例如考虑代码
\makeatletter
\renewcommand{\l@subsection}[2]{\@dottedtocline{2}{1.6em}{1.6em}{\S#1}{#2}}
\makeatother
它允许我在目录中获取在小节编号前带有段落(节)符号的记录。但我还希望在不修改\thesubsection
命令的情况下在小节编号后有一个点。
查看的第二和第三个参数,\@dottedtocline
我认为的第一个参数\l@subsection
实际上就像是封装的子节编号和子节标题对(因为我们可以通过的第三个参数来控制参数#1的这两个元素之间的距离\@dottedtocline
)。
我的问题是第一个参数实际上\l@subsection
是什么,以及是否可以从该参数中获取小节的数量及其标题作为分隔值?
答案1
在LaTeX内核中,\@dottedtocline
使用以下语法实现:
\@dottedtocline{<level>}{<indent>}{<numwidth>}{<title>}{<page>}
<level>
是一个整数,控制条目是否排版;如果<level>
大于\c@tocdepth
(计数器的内部形式tocdepth
),则不会产生任何行。<indent>
是从左边距开始的总缩进量。<numwidth>
<title>
如果有命令,则是数字框的宽度\numberline
。<title>
是条目的实际内容。<page>
是页码。
的第二个参数\l@subsection
对应于页面;第一个参数对应于数字(如果有)和文本。
为了获得期望的结果,一种简单的可能性是使用tocloft
提供适当钩子的包:
\documentclass{article}
\usepackage{tocloft}
\renewcommand\cftsubsecaftersnum{.}
\renewcommand\cftsubsecpresnum{\S}
\begin{document}
\tableofcontents
\section{Test Section}
\subsection{Test Subsection}
\end{document}
答案2
为了获得所需的结果,您可以\numberline
在子部分行周围的组中重新定义本地。您还需要增加标签的空间。通过这种方式,您还可以将命令移动到命令\S
中\numberline
:
\documentclass{article}
\makeatletter
\def\dottednumberline#1{\hb@xt@\@tempdima{\S#1.\hfil}}
\renewcommand{\l@subsection}[2]{{\let\numberline\dottednumberline\@dottedtocline{2}{1.6em}{2.6em}{#1}{#2}}}
\makeatother
\begin{document}
\tableofcontents
\section{Test section}
\subsection{Test subsection}
\section{Another section}
\subsection{Another subsection}
\end{document}
这是有效的,因为.toc
我们有
\contentsline {subsection}{\numberline {1.1}Test subsection}{1}
并将\l@subsection
应用于第二和第三个参数,即
#1 = \numberline {1.1}Test subsection
#2 = 1
后者是页码。您可以通过将这些参数添加\tracingmacros=1
到文档并检查.log
文件来直接查看这些参数。