目录中各章节、附录之间的间距,以及每章后面的虚线

目录中各章节、附录之间的间距,以及每章后面的虚线

我正在尝试格式化我的论文,格式指南要求章节和节等都使用虚线。问题是我有几个附录,单词“Chapter”的长度小于单词“Appendix”的长度,这导致获取间距的问题。.cls 样式是由另一位学生提供给我的,似乎与 tocloft 不兼容,因此不是\chapter对我来说这是一个可行的解决方案。我可以通过重新定义和相应地使用书籍包来重现该问题\l@chapter,因此修复就在这两个定义中的某个地方。

1型

在本篇 MWE 中,我改变了\l@chapter以添加虚线,使用如何在没有 tocloft 的情况下向目录添加前导符?作为指导。但是请注意,“附录 A”和标题之间的间距太小。(这严格来说不是虚线问题,无论如何我都必须解决它,但(正如我将展示的),它们是复合的。

\documentclass{book}

\makeatletter
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
    \thispagestyle{plain}%
    \global\@topnum\z@
    \@afterindentfalse
    \secdef\@chapter\@schapter}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
    \refstepcounter{chapter}%
    \typeout{\@chapapp\space\thechapter.}%
    \addcontentsline{toc}{chapter}%
    {\protect\numberline{\@chapapp\hspace{2mm}\thechapter}\hspace{1.5cm}{#1}}%
    \else
    %                      \addcontentsline{toc}{chapter}{\MakeTextUppercase{#1}}%
    \addcontentsline{toc}{chapter}{{#1}}%
    \fi
    \chaptermark{#1}%
    \addtocontents{lof}{\protect\addvspace{0\p@}}%
    \addtocontents{lot}{\protect\addvspace{0\p@}}%
    \if@twocolumn
    \@topnewpage[\@makechapterhead{#2}]%
    \else
    \@makechapterhead{#2}%
    \@afterheading
    \fi}
\renewcommand*\l@chapter[2]{%
    \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
    \parindent \z@ \rightskip \@pnumwidth
    \parfillskip -\@pnumwidth
    \leavevmode \normalfont
    \advance\leftskip\@tempdima
    \hskip -\leftskip
    #1\nobreak
    \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hfill%
    \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \penalty\@highpenalty
    \endgroup
    \fi}
\makeatother

\begin{document}
\tableofcontents

\chapter{one longer title}


\chapter{two}

\chapter{three} 

\appendix
\chapter{This needs to be right too}

\end{document}

MWE1 问题

微波辐射计

问题似乎在于从行首到文本首的空格是硬编码的,因此我删除了它,并将更多内容移到了命令内\numberline
(顺便说一句 - 我找不到任何文档来说明该怎么\numberline做,有人知道吗?)这基本上将间距问题转移到了点而不是文本上 - 因此我接下来尝试做相反的事情,并从里面删除了所有内容\numberline- 而且它几乎是正确的,但现在有一个缩进不会消失。(注意 - 如果有人不需要点,请更改{\protect\numberline{}\@chapapp\hspace{2mm}\thechapter\hspace{2mm}{#1}}%{\protect\numberline{\@chapapp\hspace{2mm}\thechapter\hspace{2mm}{#1}}}%解决间距问题。我尝试过添加的常规方法\hspace{-.25in},但不起作用。我看不到这个缩进是在哪里定义的。

有人可以帮忙吗?

\documentclass{book}

\makeatletter

\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
    \thispagestyle{plain}%
    \global\@topnum\z@
    \@afterindentfalse
    \secdef\@chapter\@schapter}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
    \refstepcounter{chapter}%
    \typeout{\@chapapp\space\thechapter.}%
    \addcontentsline{toc}{chapter}%
    {\protect\numberline{}\@chapapp\hspace{2mm}\thechapter\hspace{2mm}{#1}}%
    \else
    %                      \addcontentsline{toc}{chapter}{\MakeTextUppercase{#1}}%
    \addcontentsline{toc}{chapter}{{#1}}%
    \fi
    \chaptermark{#1}%
    \addtocontents{lof}{\protect\addvspace{0\p@}}%
    \addtocontents{lot}{\protect\addvspace{0\p@}}%
    \if@twocolumn
    \@topnewpage[\@makechapterhead{#2}]%
    \else
    \@makechapterhead{#2}%
    \@afterheading
    \fi}
\renewcommand*\l@chapter[2]{%
    \ifnum \c@tocdepth >\m@ne
    \addpenalty{-\@highpenalty}%
    \vskip 1.0em \@plus\p@
    \setlength\@tempdima{1.5em}%
    \begingroup
    \parindent \z@ \rightskip \@pnumwidth
    \parfillskip -\@pnumwidth
    \leavevmode \normalfont
    \advance\leftskip\@tempdima
    \hskip -\leftskip
    #1\nobreak
    \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hfill%
    \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \penalty\@highpenalty
    \endgroup
    \fi}
\makeatother

\begin{document}
\tableofcontents

\chapter{one longer title}


\chapter{two}

\chapter{three} 

\appendix
\chapter{This needs to be right too}

\end{document}

MWE2 问题 - 缩进

答案1

我认为发生的情况是这样的。

定义中的这一行\@chapter写入了命令的关键参数,该命令最终以as\contentsline结尾.toc

{\protect\numberline{\@chapapp\hspace{2mm}\thechapter}\hspace{1.5cm}{#1}}

例如,当它读取文件时.toc,LaTeX 看到的是

\contentsline {chapter}{\numberline {Chapter\hspace {2mm}1}\hspace {2.5cm}{one longer title}}{3}%

但是,这并没有让我们了解故事的结局,因为我们需要理解\numberline。它将它的参数(此处{Chapter\hspace{2mm}1})打印在一个框中。那个框有多大?稍微令人惊讶的答案是,它和\@tempdima调用时的临时变量一样大。(如果您\numberline在主要的 LaTeX 来源中搜索,您可以找到它:texdoc sourc2e在这些情况下是您的好朋友。)

因此,盒子的大小实际上是由 的定义中的这一行给出的\l@chapter,特别是这一行:

\setlength\@tempdima{2.5em}%

现在我们可以理解这个问题了。本例中的方框刚好够容纳“第 A 章”,但不足以容纳“附录 A”。方框后添加的 1.5 厘米的巨大空间在一定程度上掩盖了这一点。但请记住,LaTeX 在方框后添加了空格盒子而不是内容:如果它们超出了盒子的范围,就会被忽略。所以它看起来像这样。

截屏

因此,我们需要做的是调整各种命令,以使其正确。我们摆弄盒子后面的空间。但在我看来,这里正确的做法是删除盒子后面添加的所有空间,并使盒子足够大以容纳两个都“附录 A”和“第 1 章”。因此我们最终得到如下结果:

    \addcontentsline{toc}{chapter}%
    {\protect\numberline{\@chapapp~\thechapter}{#1}}%

\@chapter

\setlength\@tempdima{2.2cm}%

\l@chapter。那(至少运行两次后,让我们的更改有时间渗透到文件中.toc...对于粗心的人来说又是一个小陷阱!)

第二张截图

答案2

\numberline确实如此\hbox to <calculated dimen>{<text>\hss}。如果您不想在目录中对齐标题的左边缘,也许您不需要它:

{\@chapapp\hspace{2mm}\thechapter\hspace{5mm}{#1}}%

相关内容