考虑以下将单词“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
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
,但它扩展了以下标记以查看真正跟随的内容。