% \algo{name of the algorithm}\algalias{a longer name}
% \algin input description
% \:step
-% \:step
+% \:step \cmt{comment}
% \::[identifier]nested step
% \:::yet more nested step
% \algout output description
% \endalgo
% Localized strings
-\localedef{en}{alg:alg}{Algorithm}
-\localedef{en}{alg:proc}{Procedure}
-\localedef{en}{alg:in}{Input}
-\localedef{en}{alg:out}{Output}
+\localedef{0}{alg:alg}{Algorithm}
+\localedef{0}{alg:proc}{Procedure}
+\localedef{0}{alg:in}{Input}
+\localedef{0}{alg:out}{Output}
+
+% Item indent
+\newdimen\algoindent
+\algoindent=2em
+
+% Extra indent for nested items
+\newdimen\algonestindent
+\algonestindent=2em
-% Spacing (customizable)
+% Width of item label
+\newdimen\algolabelwidth
+\algolabelwidth=0.5em
+
+% Set up spacing (customizable)
\def\algospacing{
\itemnarrow=\itemindent
\interitemskip=1pt
\postitemizeskip=\dimexpr \bigskipamount - \parskip \relax
}
+% Set up paragraph mode for a single step of the algorithm (customizable)
+\def\algopar{
+ \par
+ \parindent=\algoindent
+ \hangindent=\algoindent
+ \advance\hangindent by \algolabelwidth
+ \hangafter=1
+ \leavevmode
+}
+
+% Typeset step label (customizable)
+\def\algostep#1{\hbox to \algolabelwidth{\hss #1~~}}
+
\def\algoinit{
- \goodbreak
\begingroup
\algospacing
\inititemize
\let\:=\algoitem
\def\={\leftarrow}
+ \let\cmt=\algcmt
\itemcount=0
}
\def\proc#1{\typedalgo{\localestr{alg:proc}}{#1}}
\def\headlessalgo{\algoinit}
-\def\endalgo{\goodbreak\endlist\endgroup}
+\def\endalgo{\endlist\endgroup}
\let\endproc=\endalgo
-\def\algopar{
- \par
- \parindent=2em
- \hangindent=2.5em % \parindent + width of box for the step number
- \hangafter=1
- \leavevmode
-}
-
\def\algoitem{%
\ifnum\itemcount=0\par\nobreak\smallskip\fi
\algopar\advance\itemcount by 1
- \hbox to 0.5em{\hss \the\itemcount.~~}%
+ \algostep{\the\itemcount.}%
\futurelet\next\algoitemh
}
\def\algoitemh{\ifx\next:\let\next=\algohang\else\let\next=\algoitemgo\fi\next}
-\def\algohang:{\advance\hangindent by 2em \hskip 2em\futurelet\next\algoitemh}
+\def\algohang:{\advance\hangindent by \algonestindent \hskip \algonestindent\futurelet\next\algoitemh}
\optdef\algoitemgo{\ifx\addid\undefined\else\addid{item}{\the\itemcount}\fi}
\def\algin{\par\nobreak{\it \localestr{alg:in}:\/} }
% Algorithm name in text or in a formula
\protected\def\alg#1{\leavevmode\hbox{\csc #1}}
+
+% Comments
+\def\algcmt#1{\unskip~~\hfill\fullcmt{#1}\ignorespaces}
+\def\fullcmt#1{{$\triangleleft$\hskip0.5em\it #1}}