“对齐”处理了多少次?

“对齐”处理了多少次?

考虑以下将单词“Cat”写入文件的 MWE。

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\newwrite\datei
\immediate\openout\datei=Beispiel.txt
\begin{align*}
a+b &=c \\ \immediate\write\datei{Cat}
c+d &= 88+ 9
\end{align*}
\end{document}

实际上,这会写出两次“Cat”这个词(我有更复杂的例子,其中写了四次)。

  1. 我能确定对齐处理了多少次吗?

  2. 我能以某种方式确保写入命令只被调用一次吗?

答案1

amsmath使用条件\ifmeasuring@,在测量事物的第一步中为真,在“排版步骤”中为假。所以你可以说

\makeatletter
\newcommand{\alignwrite}[2]{%
  \ifmeasuring@\else
    \write#1{#2}%
  \fi}
\makeatother

并且\immediate\alignwrite\datei{Cat}只会在“排版步骤”中执行。

以下是完整的示例:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\alignwrite}[2]{%
  \ifmeasuring@\else
    \write#1{#2}%
  \fi}
\makeatother

\begin{document}
\newwrite\datei
\immediate\openout\datei=Beispiel.txt
\begin{align*}
a+b &=c \\ \immediate\write\datei{Cat}
c+d &= 88+ 9
\end{align*}

\begin{align*}
a+b &=c \\ \immediate\alignwrite\datei{Dog}
c+d &= 88+ 9
\end{align*}
\end{document}

的内容Beispiel.txt

Cat
Cat
Dog

\immediate这利用了没有跟随\write或被忽略的事实\closeout,但它扩展了以下标记以查看真正跟随的内容。

相关内容