自动在目录中插入未编号的标题

自动在目录中插入未编号的标题

当我使用带编号的标题(如\section或 )时\chapter,标题会自动添加到目录中。如果我使用未编号的标题(如\section*或 )\chapter*,则必须添加另一行

\section*{Criteria}
\addcontentsline{toc}{section}{Criteria}

这很烦人。有没有办法让这种情况自动发生?我试过了

\renewcommand{section}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}}

但编译失败。

我能够使用

\newcommand{mysection}[1]{\section*{#1}\addcontentsline{toc}{section}{#1}}

但这似乎也相当笨重,并且需要更改文档中的所有分段命令。

答案1

xparse在带星号的版本和可选参数之间进行条件判断非常简单。因此,以下重新定义会\section自动在目录中插入适当的带星号的版本:

在此处输入图片描述

\documentclass{article}
\usepackage{xparse}
\let\oldsection\section
\RenewDocumentCommand{\section}{s o m}{%
  \IfBooleanTF{#1}
    {% \section*
      \oldsection*{#3}% Insert \section*{...}
      \addcontentsline{toc}{section}{\protect\numberline{}#3}% Add ToC entry
    }{% \section
      \IfNoValueTF{#2}
        {\oldsection{#3}}% \section{...}
        {\oldsection[#2]{#3}}% \section[..]{...}
    }%
}
\begin{document}

\tableofcontents

\section{A section}

\section[Second section]{Another section}

\section*{Next section}

\section*[Final section]{Last section}

\end{document}

但请注意,\tableofcontents也用于\section*article因此,在这种情况下,它必然会包含在 ToC 中。\tableofcontents不过,对 进行轻微的重新定义可以解决这个问题。

另请注意,当用户输入时,我没有处理可选参数\section*[..]{...},因为这通常不被使用。但是,如果需要,可以添加该条件。

相关内容