在算法中对以 if 开头的行进行注释

在算法中对以 if 开头的行进行注释

我正在努力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导致注释错位。补丁已添加到上述代码中。

相关内容