控制 `.toc` 文件中的 `\subsection` 输出

控制 `.toc` 文件中的 `\subsection` 输出

考虑以下简单代码

\documentclass[12pt]{article}
\usepackage [english] {babel}
\begin{document} 
    \tableofcontents
    \section{One}
    \subsection{Two}
    \subsection{Three}
\end{document}

它将生成.toc包含以下内容的文件

\select@language {english}
\contentsline {section}{\numberline {1}One}{1}
\contentsline {subsection}{\numberline {1.1}Two}{1}
\contentsline {subsection}{\numberline {1.2}Three}{1}

然后,如果我使用包格式化目录,tocloft我将始终处理格式为的部分编号<section>.<subsection>。我的问题是是否可以控制\subsection命令输出到.toc文件中,以在文件中获取.toc格式为的子部分编号<subsection>

\select@language {english}
\contentsline {section}{\numberline {1}One}{1}
\contentsline {subsection}{\numberline {1.1}Two}{1}
\contentsline {subsection}{\numberline {1.2}Three}{1}

(PS:我使用titlesectitleloft包,如果没有合适的简单解决方案,我希望有一个不影响这些包工作的解决方案)。

答案1

使用包tocloft\cftsubsecpresnum宏来吃掉节号和句点:

\documentclass{article}
\usepackage{tocloft}
\def\cftsubsecpresnum#1.{}

\begin{document}

\tableofcontents
\section{one}
\subsection{two}
\subsection{three}
\end{document}

在此处输入图片描述

如果还有章节,并且小节编号像 xyz,则应该使用两部分:

\def\cftsubsecpresnum#1.#2.{}

该包在排版目录时tocloft会将其放在\cftsubsecpresnum章节号前面。因此 TeX“看到”,例如

\cftsubsecpresnum 1.2

并展开\cftsubsecpresnum;我对宏的重新定义告诉 TeX 它有一个参数,并且这个参数是宏后面直到第一个句点(\renewcommand在这种情况下您不能使用)的所有内容。由于替换文本为空,因此 1 和句点将与一起从输入流中消失,\cftsubsecpresnum只有 2 会保留下来。

如果你说\def\cftsubsecpresnum#1.{\S}代替1.就会\S出现。

以这种方式指定的参数称为分隔;普通参数(使用 定义宏时查找的参数\newcommand)只是一个标记或括号中的整个组。此宏也适用于“第 10.11 节”,因为直到句点为止的所有内容都被定义为参数。

相关内容