`\l@subsection` 的第一个参数实际上是什么?

`\l@subsection` 的第一个参数实际上是什么?

例如考虑代码

  \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文件来直接查看这些参数。

相关内容