我正在努力algorithmic
创建一些带注释的伪代码。使用本网站上的宏(见标题),注释将右对齐,这很棒。
但是,我不明白如何对以 开头的行添加注释\IF
。
下面是 SSCCE,展示了一种解决方法。
\documentclass{report}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{array}
\usepackage{eqparbox}
\renewcommand\algorithmiccomment[1]{%
\hfill\#\ \eqparbox{COMMENT}{#1}%
}
\begin{document}
\begin{algorithm}[h]
\begin{algorithmic}[1]
\STATE $math$ \COMMENT{comment 1}
\IF{$moremath$}
\STATE \COMMENT{comment 2 one line up please}
\STATE $lastmath$
\ENDIF
\end{algorithmic}
\end{algorithm}
\end{document}
这种修改不起作用,pdflatex 会阻塞\STATE $lastmath$
。
\begin{algorithm}[h]
\begin{algorithmic}[1]
\STATE $math$ \COMMENT{comment 1}
\IF{$moremath$} \COMMENT{comment 2 on line 2 please} %\STATE removed, won't work!
\STATE $lastmath$
\ENDIF
\end{algorithmic}
\end{algorithm}
我使用pdflatex
。我如何修改代码以将注释放在第 1 行和第 2 行,而不是将注释 2 放在单独的行(解决方法)?
答案1
对 if 语句的注释应作为可选参数提供,而\IF
不是通过\COMMENT
命令提供。请参阅文档第 3.12 节,这也适用于\ELSIF
、\ELSE
、\WHILE
、\FOR
、\FORALL
和。\REPEAT
\LOOP
\documentclass{report}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{array}
\usepackage{eqparbox}
\renewcommand\algorithmiccomment[1]{%
\hfill\#\ \eqparbox{COMMENT}{#1}%
}
\usepackage{etoolbox} % patch def of algorithmic environment
\makeatletter
\patchcmd{\algorithmic}{\addtolength{\ALC@tlm}{\leftmargin} }{\addtolength{\ALC@tlm}{\leftmargin}}{}{}
\makeatother
\begin{document}
\tracingmacros=1
\begin{algorithm}[h]
\begin{algorithmic}[1]
\STATE {$math$} \COMMENT{comment 1}
\IF[comment 2 on line 2]{$moremath$}
\STATE $lastmath$ \COMMENT{comm 3}
\ENDIF
\end{algorithmic}
\end{algorithm}
\end{document}
更新ALC@g
环境内部环境定义中的虚假空格algorthmic
导致注释错位。补丁已添加到上述代码中。