在对齐环境中推进伪计数器

在对齐环境中推进伪计数器

使用以下代码我得到了一些奇怪的结果,我不太理解:

\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

相关内容