我正在使用 algorithm2e 包。当使用这样的注释时
\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}
结果是
// not aligned comment
if constraint then // comment next to if
c; // bla
d = min{c,e}; // minimum
end
我希望大家的意见保持一致,即
// not aligned comment
if constraint then // comment next to if
c; // bla
d = min{c,e}; // minimum
end
我只找到了 algorithmicx 包的答案:Algpseudocode(algorithmicx)包注释。
答案1
这会将它们刷新到右侧,填充到最长的注释,这样就可以对齐//
了。需要运行几次才能进行测量。我添加了一些$
以避免在尝试 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}
答案2
这是我使用 algorithm2e 的解决方案。想法是使用右对齐注释 ( \tcp*[r]
),并将它们放在固定长度的框中\commentWidth
。重要内容被包裹在“对齐注释”宏中,\atcp
以方便使用。
\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}
其结果是:
但是,我不知道如何在 if 样式块后对齐注释。