![重新定义 \section 以自动添加到索引中](https://linux22.com/image/330197/%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%20%5Csection%20%E4%BB%A5%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%B4%A2%E5%BC%95%E4%B8%AD.png)
答案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}