Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am using the package algorithm2e. When using comments like this

\documentclass[11pt,a4paper,twoside,openright]{book}
\usepackage[algochapter,linesnumbered,ruled,lined,boxed]{algorithm2e}
\begin{document}
\begin{algorithm}
    \tcp{not aligned comment}
    \If(\tcp*[h]{comment next to if}){constraint}{ 
         c  \tcp*[l]{bla}
         $d = \min \{c,e\}$ \tcp*[l]{minimum}
    }      

\end{algorithm}
\end{document}

the result is

// not aligned comment
if constraint then // comment next to if 
   c; // bla
   d = min{c,e}; // minimum
end

I would like to have the comments aligned, that is

// not aligned comment
if constraint then       // comment next to if
   c;                    // bla
   d = min{c,e};         // minimum
end

I only found an answer for the package algorithmicx: Algpseudocode (algorithmicx) package comments.

share|improve this question

1 Answer 1

up vote 3 down vote accepted

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.

enter image description here

\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}
share|improve this answer
    
Unfortunately, now a normal command like \tcp{comment} throws an error. Is it possible to also use regular comments? Edited my question. –  Jana Nov 20 '12 at 18:05
    
easiest is to change \def\tcp*[#1]#2 to \def\mytcp*[#1]#2 or some such then use \mytcp. –  David Carlisle Nov 20 '12 at 18:43
    
This does not work with if-statements, and the font is not the same. –  Jana Nov 20 '12 at 19:30
    
Ive never used the package just based on your mwe, so don't know about if statement markup, The code I posted does nothing with fonts, oh you might prefer to replace \box0 by #2 if the tcp command changes font. –  David Carlisle Nov 20 '12 at 20:33

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.