我正在编写一些宏,这些宏在第一次出现后需要有不同的行为。我决定使用该etoolbox
包的toggle
。我的 MWE 如下:
\documentclass{article}
\usepackage{etoolbox}
\newtoggle{SL}
\newcommand{\SL}{%
\textit{SL}%
\nottoggle{SL}{~first}{~second}%
\toggletrue{SL}% switches to true after first occurrence!
}
\begin{document}
A footnote.\footnote{\SL}\par
\SL \par
\SL \par
\SL
\end{document}
作为输出,我得到以下内容:
如您所见,问题在于,在脚注中使用该命令时,不会发生切换。(如果图像不够清晰,脚注会显示“1 SL first”。)
这里发生了什么?(\newif
顺便说一下,我尝试了 TeX,结果相同。)
答案1
解决方案隐藏在包装文档:
该命令 [...] 可能以 为前缀
\global
。
意思是通常情况\toggletrue
下本地,即设置被封闭组撤消。\footnote
这里定义了一个组。因此您需要使用
\global\toggletrue{SL}% switches to true after first occurrence!
在您的宏中确保开关始终是全局设置的。