我正在尝试提出一个命令,该命令应增加计数器并返回包含计数器当前值的字符串。
看一下下面的最小例子:
\documentclass{article}
\newcounter{mycounter}
\newcommand{\mystepFAILS}{\stepcounter{mycounter}foo\themycounter}
\newcommand{\mystepWORKS}{foo\themycounter}
\begin{document}
\section{\mystepFAILS}
\section{\mystepWORKS}
\end{document}
为什么命令会\mystepFAILS
抛出错误? 有什么特别之处\stepcounter
? 有什么想法吗?
答案1
您不想直接\stepcounter
在章节标题中使用,因为章节标题会被多次修改。即使它有效,在排版目录时也会遇到问题,因为计数器会在不合适的时间进行调整。
考虑这个输入:
\documentclass{article}
\newcounter{mycounter}
\newcommand{\mystep}{\protect\stepcounter{mycounter}foo\themycounter}
\begin{document}
\tableofcontents
\section{\mystep}
\end{document}
这将在第二次 LaTeX 运行中在目录中包含“foo1”而在文档中包含“foo2”,并且在后续运行中两个位置都包含“foo2”。
如果标题中包含 section ( \pagestyle{headings}
),情况会更糟,因为计数器会在标题出现的每个页面上进行计数。
如果你不打算有目录,那么\protect
就足够了。但最好是定义一个新命令:
\newcommand{\step}{\stepcounter{mycounter}\section{foo\themycounter}}
\step
并在需要的地方使用
\documentclass{article}
\newcounter{mycounter}
\newcommand{\step}{\stepcounter{mycounter}\section{foo\themycounter}}
\begin{document}
\tableofcontents
\step
\end{document}
另一个复杂的策略是说
\section[foo\themycounter]{\stepcounter{mycounter}foo\themycounter}