Align comments in algorithm with package algorithm2e
Here's a solution I'm using with algorithm2e. The idea is to use right-aligned comments (\tcp*[r]
), and put them in a box of fixed length \commentWidth
. The important stuff is wrapped in an "aligned comment" macro \atcp
for ease of use.
\documentclass[11pt,a4paper,twoside,openright]{book}
\usepackage[algochapter,linesnumbered,ruled,lined,boxed]{algorithm2e}
\begin{document}
\newlength{\commentWidth}
\setlength{\commentWidth}{7cm}
\newcommand{\atcp}[1]{\tcp*[r]{\makebox[\commentWidth]{#1\hfill}}}
\begin{algorithm}
\tcp{not aligned comment}
\If(\tcp*[h]{comment next to if}){constraint}{
c \atcp{bla}
$d = \min \{c,e\}$ \atcp{minimum}
}
\end{algorithm}
\end{document}
This results in:
I do not know how to align comments after if-style blocks, though.
This flushes them right, padded to the longest comment, so the //
line up. It takes a couple of runs to get the measuring. I added some $
to avoid errors that were generated when I tried your MWE.
\documentclass{article}
\usepackage{algorithm2e}
\makeatletter
\newdimen\commentwd
\let\oldtcp\tcp
\def\tcp*[#1]#2{% only support one style for simplicity
\setbox0\hbox{#2}%
\ifdim\wd\z@>\commentwd\global\commentwd\wd\z@\fi
\oldtcp*[r]{\leavevmode\hbox to \commentwd{\box0\hfill}}}
\let\oldalgorithm\algorithm
\def\algorithm{\oldalgorithm
\global\commentwd\z@
\expandafter\ifx\csname commentwd@\romannumeral\csname c@\algocf@float\endcsname\endcsname\relax\else
\global\commentwd\csname commentwd@\romannumeral\csname c@\algocf@float\endcsname\endcsname
\fi
}
\let\oldendalgorithm\endalgorithm
\def\endalgorithm{\oldendalgorithm
\immediate\write\@auxout{\gdef\expandafter\string\csname commentwd@\romannumeral\csname c@\algocf@float\endcsname\endcsname{%
\the\commentwd}}}
\begin{document}
\begin{algorithm}
c \tcp*[l]{bla}
$d = \min \{c,e\}$ \tcp*[l]{minimum}
\end{algorithm}
\end{document}