Newcommand + 计步器

Newcommand + 计步器

我正在尝试提出一个命令,该命令应增加计数器并返回包含计数器当前值的字符串。

看一下下面的最小例子:

\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}

相关内容