考虑以下简单代码
\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:我使用titlesec
和titleloft
包,如果没有合适的简单解决方案,我希望有一个不影响这些包工作的解决方案)。
答案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 节”,因为直到句点为止的所有内容都被定义为参数。