TOC 与外来编号的对齐

TOC 与外来编号的对齐

在回答这个问题时:法语章节编号使用 bis、ter 等,我意识到当您\addcontentsline使用“非常规编号”(在我的情况下为 2 bis、2 ter 等)将某些内容添加(使用)到 ToC 时,该部分的标题几乎与通常的章节标题左对齐,但并不完全对齐。

例如,以下 MWE

\documentclass{book}
\usepackage[explicit]{titlesec}
\usepackage{lipsum}

\begin{document}
\tableofcontents

\section{First section header}
\lipsum[1]
\section{Second section header}
\lipsum[2]
\section*{Third section header}
\addcontentsline{toc}{section}{\numberline{2 bis} Bis section test}
\end{document}

生产在此处输入图片描述

我认为这可以通过重新定义 来管理\l@section。事实上,在 LaTeX Companion 中,提到 的第三个参数\@dottetocline是包含节号的框的宽度。但是,将以下代码添加到我的序言中不会改变任何东西。

\makeatletter
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.5em}}
\makeatother

知道为什么会发生这种情况吗?如何解决此问题?

答案1

在将内容写入目录时,您应该意识到宏可能会被扩展以显示其内部工作原理。这种扩展可能会导致问题。以下是查看文件时在您的实例中发生的情况.toc

\contentsline {section}{\numberline {0.1}First section header}{1}
\contentsline {section}{\numberline {0.2}Second section header}{1}
\contentsline {section}{\hbox to\@tempdima {2 bis\hfil }Bis section test}{1}

请注意,即使指定了,手动写入的条目也.toc\hbox to\@tempdima{..}而不是。因此,当读取文件进行打印时(调用),可能具有与传统调用时不同的含义。\numberline\numberline.toc\tableofcontents\@tempdima\numberline

\protect通过离子扩展可以提供一种解决方案:

在此处输入图片描述

\documentclass{book}
%\usepackage[explicit]{titlesec}
\usepackage{lipsum}

\begin{document}
\tableofcontents

\section{First section header}
\lipsum[1]
\section{Second section header}
\lipsum[2]
\section*{Third section header}
\addcontentsline{toc}{section}{\protect\numberline{2 bis}Bis section test}
\end{document}

.toc文件现在类似于:

\contentsline {section}{\numberline {0.1}First section header}{1}
\contentsline {section}{\numberline {0.2}Second section header}{1}
\contentsline {section}{\numberline {2 bis}Bis section test}{1}

对于\numberline宽度的一般调整,请考虑阅读目录中的罗马数字变得“太宽”

答案2

如果您不使用该titlesec包或者使用titlesec不带explicit选项的包,则重新定义\l@section可以正常工作。

相关内容