\stepcounter 在子节标题中不起作用

\stepcounter 在子节标题中不起作用

我定义了一个新的计数器为:

\newcounter{lecCounter}
\newcommand{\lecID}{\stepcounter{lecCounter}\thelecCounter}

我希望将其用作:

\subsection{Lecture \lecID }

但它给出了错误:

! Missing \endcsname inserted.
<to be read again> 
                   \csname\endcsname
l.1 \subsection{Lecture \lecID }

? 

如果我把它放在Lecture \lecID外面\subsection{},那么它就会编译。

解决方案是什么?

答案1

不要\stepcounter在 的参数中使用\subsection。即使\protect为了避免错误而在 前面加上 ,\tableofcontents使用 时也会产生不利影响。下面的例子清楚地说明了这一点(我使用了\section,但使用 完全一样\subsection,只要它出现在目录中)。

\documentclass{article}

\newcounter{lecCounter}
\newcommand{\lecID}{\protect\stepcounter{lecCounter}\thelecCounter}

\begin{document}

\tableofcontents

\section{Lecture \lecID}

Text.

\end{document}

在此处输入图片描述

您应该做的是定义一个新命令:

\newcommand{\lecture}{%
  \stepcounter{lecCounter}%
  \subsection{Lecture \thelecCounter}%
}

可以根据您的需要进行微调;例如,如果您需要引用讲座编号而不是小节编号。另一种可能性是为特定讲座标题添加可选参数。最好将所有这些编码为命令,而不是在需要更改时追查文档。

示例文档可能是

\documentclass{article}

\newcounter{lecCounter}
\newcommand{\lecture}{%
  \stepcounter{lecCounter}%
  \subsection{Lecture \thelecCounter}%
}

\begin{document}

\tableofcontents

\section{Group of lectures}

\lecture

Text.

\lecture

Text.

\end{document}

答案2

该命令\stepcounter是一个脆弱命令,这意味着当它被放入移动参数中时可能会导致错误。 的参数是\section移动参数,因为 LaTeX 还会将部分名称(参数)放在目录和其他地方。您需要“保护”\stepcounter以确保它不会作为脆弱命令引起问题。我们可以在使用它时将其放在前面\lecID\protect也可以\lecID通过 将其定义为一个强大的命令\DeclareRobustCommand。(正如 Mico 所说,我们定义\lecId以防\refstepcounter您可能需要引用lecCounter\lecCounter)以便它与相应的子节匹配。):

\DeclareRobustCommand{\lecID}{\refstepcounter{lecCounter}\thelecCounter}

此外,由于\lecID每次出现时都会执行,因此lecCounter当它出现在其他地方时(例如,与)时会不恰当地增加\tableofcontents。因此,我们使用可选参数来\subsection仅输入没有\stepcounter和的计数器\refstepcounter来更改值。因此,LaTeX 只会在lecCounter第一次看到时增加\subsection

\subsection[Lecture \thelecCounter]{Lecture \lecID }

这里更详细地解释了脆弱命令和移动参数的问题:脆弱命令和坚固命令之间有什么区别?

\documentclass{article}
\usepackage[utf8]{inputenc}

\documentclass{article}
\usepackage[utf8]{inputenc}

\newcounter{lecCounter}
\DeclareRobustCommand{\lecID}{\refstepcounter{lecCounter}\thelecCounter}

\begin{document}

\tableofcontents

\subsection[Lecture \thelecCounter]{Lecture \lecID}

\subsection[Lecture \thelecCounter]{Lecture \lecID}

\end{document}

显示结果

相关内容