只有使用 \refstepcouter 进行交叉引用时,代码才能通过第二次编译

只有使用 \refstepcouter 进行交叉引用时,代码才能通过第二次编译

bbb在下面的例子中,我尝试通过提前获取计数器的值(在bbb赋值之前)cross-referencing,并将该值存储到宏(\aaa)中以供以后使用。我按照以下步骤编译代码:

步骤(1)首先,删除与包含以下代码的主 tex 文件相关的所有临时文件(此例中为 .aux、.fls、.log)。

步骤(2) 然后使用 编译主 tex 文件xelatex,失败。错误消息为:

ERROR: Missing number, treated as zero.

--- TeX said ---
<to be read again> 
                   \protect 
l.5 \setcounter{bbb}{\ref{pp}}

步骤(3) 然后再次编译主tex文件,成功得到预期的排版。

我重复了步骤(1)(2)(3)几次,每次尝试的结果都相同——第一次编译失败,第二次编译成功。

我知道在某些情况下可能需要编译两次,但应该是两次成功的编译,而不是像这种情况——第一次尝试失败,第二次尝试成功。

如何让我的代码第一次编译就顺利通过并且不出现错误?

例子:

\documentclass{article}

\newcounter{bbb}
\begin{document}
\setcounter{bbb}{\ref{pp}}
\edef\aaa{\thebbb}
\rule{1in}{\aaa pt}


\setcounter{bbb}{5}
\refstepcounter{bbb}\label{pp}

\end{document}

看来这\setcounter{bbb}{\ref{pp}}就是原因。\ref{pp}给出6\hbox{},而不是6。所以这个问题可能涉及如何将数字与 分开\hbox{}。对此有什么想法吗?

相关内容