重新定义 \section 以自动添加到索引中

重新定义 \section 以自动添加到索引中

我希望我的部分标题默认列在索引中。所以我尝试\section像这样重新定义命令

\documentclass[10pt,a4paper]{article}
\usepackage{makeidx}
\makeindex

\begin{document}

\let\oldsection\section
\renewcommand{\section}[1]{\oldsection{#1}~\index{#1}}

\section{foo}

\printindex

\end{document}

不幸的是,这会破坏索引头,它看起来像这样:

创建索引

我该如何避免这种情况?

答案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}

相关内容