multicol、hyperref 和 \refstepcounter 的错误

multicol、hyperref 和 \refstepcounter 的错误

在以下 MWE 中,

\documentclass{article}

\usepackage{multicol}
\usepackage{hyperref}

\newcounter{counterForCalcul}
\setcounter{counterForCalcul}{0}
\def\incrementCounterForCalcul{\refstepcounter{counterForCalcul}}

\begin{document}

\begin{multicols}{2}
\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test
\end{multicols}

\end{document}

应该有两列,但只有一列。

我该如何解决这个问题?

答案1

multicolTeX Live 2020(或更高版本)、版本 1.8y 和hyperref版本 v7.00k中不会出现这种情况。

这种情况发生在 TeX Live 2019hyperref版本 7.00d 中。

您可以通过在\leavevmode之前发射来解决该问题\refstepcounter,无论如何我都会推荐它,因为它会在预期的位置产生锚点。

\documentclass{article}

\usepackage{multicol}
\usepackage{hyperref}

\newcounter{counterForCalcul}
\setcounter{counterForCalcul}{0}
\newcommand\incrementCounterForCalcul{%
  \leavevmode
  \refstepcounter{counterForCalcul}%
}

\begin{document}

\begin{multicols}{2}
\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test

\incrementCounterForCalcul Test
\end{multicols}

\end{document}

在此处输入图片描述

我通过运行 TeX Live 2012 生成了该图片,因此它对于所有后续版本来说都应该是安全的。

避免\def在文档中使用它,除非你有特殊原因要使用它。请参阅趣味:我们如何在 LaTeX 中生成有趣/意想不到的消息?举一个有趣的例子。

相关内容