算法和 hyperref 的对齐问题

算法和 hyperref 的对齐问题

algorithmic我在使用该软件包时 遇到了一些对齐问题hyperref。我喜欢将注释左对齐,这是通过\renewcommand{\algorithmiccomment}[1]{\hfill(#1)}在序言中实现的。

事实证明,行前\ENDFOR或行间断处的注释(我用它来识别不同的代码块)有点错位。

以下是 MWE:

在此处输入图片描述

\documentclass{article}

\usepackage{algorithmic}
\renewcommand{\algorithmiccomment}[1]{\hfill(#1)}

\usepackage{hyperref}

\begin{document}

\begin{algorithmic}
\STATE foo
  \COMMENT{bar}
\FOR{foo}
  \STATE foo
    \COMMENT{bar}
  \STATE foo
    \COMMENT{bar}
\ENDFOR
\STATE foo
  \COMMENT{bar}
\STATE foo
  \COMMENT{bar} \\[0.5em]
\STATE foo
  \COMMENT{bar}
\RETURN foo
  \COMMENT{bar}
\end{algorithmic}

\end{document}

请评论\usepackage{hyperref}以获得所需的输出:

在此处输入图片描述

我猜是\end{list}which algorithmic和之间有一些奇怪的交互hyperref,但我现在有点困惑。你有什么建议吗?

答案1

对于您的评论,请使用

\renewcommand{\algorithmiccomment}[1]{\hfill(#1)\ignorespaces}

这会吞掉 之后的所有空格\COMMENT,实际上相当于%在每个空格后插入空格。请参见行末百分号(%)有什么用?

答案2

解决方法是在命令后注释掉行尾字符\COMMENT

示例输出

\documentclass{article}

\usepackage{algorithmic}
\renewcommand{\algorithmiccomment}[1]{\hfill(#1)}

\usepackage{hyperref}

\begin{document}

\begin{algorithmic}
\STATE foo
  \COMMENT{bar}%
\FOR{foo}
  \STATE foo
    \COMMENT{bar}%
  \STATE foo
    \COMMENT{bar}%
\ENDFOR
\STATE foo
  \COMMENT{bar}%
\STATE foo
  \COMMENT{bar}\\[0.5em]
\STATE foo
  \COMMENT{bar}%
\RETURN foo
  \COMMENT{bar}
\end{algorithmic}

\end{document}

我不清楚到底是什么hyperref导致了这里多了一个额外的框。 在自定义列表环境中algothrimc对命令进行了一些相当大的修改\item,这可能是导致交互不佳的原因。

相关内容