使用以下代码我得到了一些奇怪的结果,我不太理解:
\documentclass{article}
\usepackage{pgfmath}
\usepackage{amsmath}
\newcommand\initializecount{\def\aecnt{0}}
\newcommand\aenextify{%%
\pgfmathparse{int(\aecnt+1)}%%
\xdef\aecnt{\pgfmathresult}%%
\typeout{>> \aecnt}%%
}
\begin{document}
\initializecount
Current: \aecnt
\begin{align*}
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\end{align*}
\end{document}
导致以下
就好像在第一次解析环境\aenextify
时,每个命令都会被扩展一次align*
,然后在扩展环境的每一行时再次扩展。我想要做的是启动柜台在零点处以及环境的每一行之后align*
,推进这个计数器。
我尝试插入一个\noexpand
,但伪计数器被完全忽略或没有明显的效果。(在这个 MWE 中,本身\noexpand
似乎被忽略了。)
\aecnt && \aecnt\\\noexpand\aenextify
请注意,我对实际使用 LaTeX 的原生计数器不感兴趣,这只是一个说明我的问题的 MWE。如果你能让这个 MWE 工作,或者解释它为什么会失败,而不诉诸使用真实的柜台,那么我将非常感激。
答案1
某些 AMS 环境会align
处理内容两次,一次在“测量”阶段,然后“实际”。您只想让计数器移动一次。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand\initializecount{\def\aecnt{0}}
\newcommand\aenextify{%%
\unless\ifmeasuring@%
\xdef\aecnt{\the\numexpr\aecnt+1}%%
\typeout{>> \aecnt}%%
\fi
}
\makeatother
\begin{document}
\initializecount
Current: \aecnt
\begin{align*}
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\aecnt && \aecnt\\\aenextify
\end{align*}
\end{document}
PS 您不需要pgf
增加数字,但代码当然也可以使用pgf
。