如何用自定义代码包装目录条目

如何用自定义代码包装目录条目

我有一本书,其中使用了titletoctocloft。我希望能够向写入.toc文件的代码中添加一些自定义代码。例如,我目前在.toc文件中有一行如下:

\contentsline {subsection}{\numberline {8.1.3}萨格纳克效应}{142}

我希望能够使发出的代码看起来像这样:

\contentsline {subsection}{\numberline {8.1.3}\foo{bar}{萨格纳克效应}}{142}

\foo是我想调用的一个宏,还有bar一些其他参数要发送给该宏。有什么办法吗?titletoc似乎提供了在标题之前和之后发出代码的功能(例如,更改字体),但我没有看到任何允许我将标题包装在宏中的东西。我想要的是否与 TeX 文件的.toc工作方式一致?

我是否可以通过某种方式阻止我的分段命令发出.toc自己的一行,然后以某种方式自己编写一行来做到这一点? 如果是这样,我如何访问 8.1.3 和 142?

答案1

您的最后一个建议似乎很合适。您可以\addcontentsline暂时删除 的功能,然后放置您自己的 ToC 条目。请确保\protect宏以避免过早扩展(如果需要),或者使用 来定义它\DeclareRobustCommand

在此处输入图片描述

\documentclass{report}
%\usepackage{tocloft,titlesec}% Not needed in this example
\DeclareRobustCommand{\foo}[2]{#2 #1}
\begin{document}

\tableofcontents

\setcounter{page}{142}% Just for this example
\setcounter{chapter}{8}% Just for this example
\setcounter{section}{1}% Just for this example
\setcounter{subsection}{2}% Just for this example

\begingroup
\renewcommand{\addcontentsline}[3]{}% Remove functionality of \addcontentsline
\subsection{The Sagnac effect}
\endgroup%
% Write specific contents entry for this \subsection
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\foo{bar}{The Sagnac effect}}%
Some text

\end{document}

上述最小示例在.toc文件中具有以下条目:

\contentsline {subsection}{\numberline {8.1.3}\foo {bar}{The Sagnac effect}}{142}

相关内容