我定义了一个新的计数器为:
\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}