在不改变类的情况下恢复类文件更改?

在不改变类的情况下恢复类文件更改?

我尝试在不使用包的情况下在目录中的节和页面之间添加点tocloft,因为它将标题从其原始位置移开。现在它看起来像这样:

現在目錄

我发现如果我从我的.cls文件中注释以下行,我就会得到所需的输出。

\let\@dottedtocline\@plaintocline

所需的输出如下所示:

目录目标

我想保持.cls文件不变,因为我知道这是最佳做法。

那么我怎样才能从我的文件中抑制该行的效果.tex,而不是修改类?

以下是\@plaintocline命令定义:

\def\@plaintocline#1#2#3#4#5{%
  \ifnum #1>\c@tocdepth \else
    \vskip \z@ \@plus.2\p@
    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima #3\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#4}\nobreak
     \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{}\mkern \@dotsep
        mu$}\hfill
     \nobreak
     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
     \par}%
  \fi}

答案1

我想只是添加:

\makeatletter
\def\@dottedtocline#1#2#3#4#5{%
  \ifnum #1>\c@tocdepth \else
    \vskip \z@ \@plus.2\p@
    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima #3\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#4}\nobreak
     \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
        mu$}\hfill
     \nobreak
     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
     \par}%
  \fi}
\makeatother

序言部分应该可以工作。这应该重新定义您提到的\@dottedtocline之前的方式\let,即 LaTeX 核心定义的方式latex.ltx。如果您告诉我您使用的是什么类,我可能会找到一个关闭它的选项\let。或者您可以尝试阅读它的文档……

附加物

  1. 正如你所说,手册中没有提到撤销更改的选项,而是说:

    UFPEThesis 不提供任何特别用于生成书目或索引的服务。这些东西是由人们通常所说的语言创造的,例如 [1]。

    或者:

    UFPEThesis 没有特别提供用于制作参考书目或索引的内容。必须按照通常的方式创建此材料,例如 [1] 中讨论的方式。

  2. 正如您所注意到的,两个 tocline 命令之间的唯一区别是宏中\hbox{.}的。这正是构成点的原因。基本上(但我可能过于简单化或完全搞错了),它接受其参数并重复足够多次以填充一行,因此如果它没有任何东西,它就不会放任何东西(),如果它有一个点,它就会放一个点()。您可以有趣地更改它的内容并看到奇怪的事情,例如:\hbox{}\@plaintocline\leaders\@plain\@dotted\hbox

    1. 第二章 * * * * * * * * * * * * * * * *<pagenumber>

    或者:

    1. 第二章 foo foo foo foo foo foo foo foo<pagenumber>

    如果你喜欢 :)。

有关该命令的更多详细信息:

  • 首先,它会检查给出的数字是否#1大于\c@tocdepth,因此如果子小节不应该在目录中,而您开始了一个子小节,则不会创建一行。如果不大于,则进入分支\else
  • 在那里,它找到了添加垂直空间的指令,确切地说是可拉伸的空间,以便具有一定的拉伸余量,以避免在页面损坏时将页面折叠到顶部部分;
  • 然后它打开一个组;
  • 然后我们进行一些簿记,更准确地说是一些参数改变;
  • 在那次记账之后,一直到\null开始\leavevmode一行,我们有一个\nobreak禁止换行符(毕竟我们在行的开头),然后我们有一个负的水平空间(我想知道为什么是负的),然后#4打印,应该是章节标题或类似内容;
  • 在另一个 之后\nobreak,我们有了\leaders命令,其中包含\m@th,这是一个间距命令,我对此并不是太了解,然后是一个数学空格\mkern\hbox和另一个\mkern;因此 的内容\hbox将被空格包围重复;自然,删除\mkern将减少(或消除,如果删除两个\mkerns) 中点/任何东西周围的间距\hbox
  • \hfill觉得这很不合适,但我可能不知道它是如何\leaders工作的;无论如何,在此之后,禁止中断,并创建一个宽度为\@pnumwidth(我认为该参数包含适合页码的宽度) 的框并放置在那里,其中恰好包含页码;
  • \par,因此换行,然后关闭组,然后关闭\else分支和整个条件\fi,我们就完成了。

相关内容