答案1
粗心地使用\let\oldsection\section
和将忽略实际上是一个带有移动参数的命令和带星号的版本的\renewcommand{\section}{...}
事实,即。\section
\section*
OP 使用的方式将会*
在输入中留下一个杂散\tableofcontents
(使用的方式\section*{...}
只会打印*
,以及\printindex
。)
我使用了更简单的方法来重新定义\section
命令,并注意带星号的版本和可选参数。该\index
命令自动位于章节标题内。hyperref
不过,可能会对此抱怨。
\documentclass[10pt,a4paper]{article}
\usepackage{makeidx}
\usepackage{xparse}
\makeindex
\let\oldsection\section
\RenewDocumentCommand{\section}{som}{%
\IfBooleanTF{#1}{% Is it the starred command? Yes, then no \index
\oldsection*{#3}
}{%
\IfValueTF{#2}{% Is it the optional argument version --> use #3
\oldsection[#2]{#3\protect\index{#3}}
}{%
\oldsection{#3\protect\index{#3}} % Use #3 as well
}
}
}
\begin{document}
\tableofcontents
\section{foo}
\printindex
\end{document}