我有一本书,其中使用了titletoc
和tocloft
。我希望能够向写入.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}