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

2 Answers 2

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

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" marco \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}

I do not know how to align comments after if-style blocks, though.

share|improve this answer

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.