在包中,algorithm2e
您可以用四种不同的方式对齐边注释,具体取决于所使用的选项(请参阅包手册的第 11.4 节)。
在以下 mwe 中,有两份相同的 3 行“算法”。第一个算法中的注释与选项对齐[r]
,该选项右对齐注释并更改行。在第二个算法中,注释与选项对齐[f]
,该选项应该右对齐边注释而不更改行(这就是为什么\;
在这种情况下是必要的)。
\documentclass{book}
\usepackage{algorithm2e}
\SetKwComment{commentSt}{! }{}
\begin{document}
% this is right
\begin{algorithm}
\KwSty{Keywords} and words\commentSt*[r]{first comment}
\KwSty{More keywords} other words\commentSt*[r]{second comment}
Words first \KwSty{keywords later}\commentSt*[r]{third}
\end{algorithm}
% this doesn't look right
\begin{algorithm}
\KwSty{Keywords} and words\commentSt*[f]{first comment}\;
\KwSty{More keywords} other words\commentSt*[f]{second comment}\;
Words first \KwSty{keywords later}\commentSt*[f]{third}
\end{algorithm}
\end{document}
输出结果如下,但我觉得不太对劲:
这是某种错误吗?实际上,我在重新查看以前可以正常工作的旧 LaTeX 代码时偶然发现了这个问题...这可能是回归吗?我现在正在使用 XeLaTeX 编译它。
答案1
h
- 和f
- 注释不应该用在普通行上。它们不会结束当前行,并且\;
在它们后面放置行结束标记会在该行中留下两个相互竞争的拉伸粘连。结果是注释以剩余可用空间为中心。因此只能使用l
- 或r
在普通行上
h
- 和-comments的目的f
是将注释放在已经自行添加换行符的块元素行上。将这两个 if-then-else 语句的输出与放在可选 -argument 中的注释进行比较()
:
\documentclass{article}
\usepackage{algorithm2e}
\SetKwComment{commentSt}{! }{}
\begin{document}
\begin{algorithm}
\eIf(\commentSt*[r]{if comment}){cond}
{true part}
{false part}
\end{algorithm}
\begin{algorithm}
\eIf(\commentSt*[f]{if comment}){cond}
{true part}
{false part}
\end{algorithm}
\end{document}
第一个r
注释正确地向右对齐,但后面插入了一个额外的换行符,导致算法中出现不需要的空行。f
此处使用 -comment 是正确的,可以防止出现额外的换行符。
这同样适用于左对齐的等价物l
和h
。