目录中的附录正确对齐

目录中的附录正确对齐

我正在尝试编写自己的类,但是我没有使用hyperref包,但以下代码可以正常工作。

\newcommand\chaptindent{\advance\leftskip 1.0em \hskip -\leftskip}
\newcommand\appenindent{\advance\leftskip 6.0em \hskip -\leftskip}

\def\@chapter[#1]#2{
  \ifnum \c@secnumdepth > \m@ne
    \if@mainmatter                 
       \refstepcounter{chapter}%
       \addcontentsline{toc}{chapter}%
           {\chaptindent\protect\numberline{\thechapter}\MakeUppercase{#1}}%
    \else
       \refstepcounter{chapter}
       \addcontentsline{toc}{chapter}%
           {\appenindent\nobreak\@chapapp\space\protect\numberline{
                \thechapter}\space{#1}}
    \fi
  \else
    \addcontentsline{toc}{chapter}{\MakeUppercase{#1}}%
  \fi
    \chaptermark{#1}%
    \addtocontents{lof}{\protect\addvspace{10\p@}}%
    \addtocontents{lot}{\protect\addvspace{10\p@}}%
    \@makechapterhead{#2}%
    \@afterheading}

在此处输入图片描述

在我包含hyperref包之后,附录 ToC 行移到了左边框。 在此处输入图片描述

移除\chaptindent\appenindent重新\@chapter定义,获得 ToC 且没有任何僵持 在此处输入图片描述

尝试使用\def\l@chapter{\@dottedtocline{1}{0.0em}{1.0em}}命令修复此问题,但章节和附录行的缩进相同。 在此处输入图片描述

如何才能使 ToC 附录与使用hyperref包正确对齐?

答案1

我已经解决了这个问题。所以有一个解决方案可能对某些人有用。附录与章节相同,因此要在目录中显示它们,请使用与章节相同的命令,即。\l@chapter此命令是在\contentsline{chapter}{... 处理项目时形成的。为了区分章节和附录,需要\contentsline在 .toc 文件中形成不同的项目,如下所示\contentsline{chapter}{...\contentsline{appendix}{...。为了处理 \contentsline{appendix}{...它,需要执行\l@appendix命令。在此之后,我有机会在目录形成时单独处理章节和附录。

\def\@chapter[#1]#2{\ifnum\c@secnumdepth>\m@ne%
                    \if@mainmatter%                 
                      \refstepcounter{chapter}%
                      \addcontentsline{toc}{chapter}%
    {\protect\numberline\thechapter\texorpdfstring{\MakeUppercase{#1}}{#1}}%
                    \else%
                      \refstepcounter{chapter}%
                      \phantomsection
                      \addcontentsline{toc}{appendix}%
    {\texorpdfstring{\@chapapp\space\protect\numberline\thechapter\space#1}
     {\@chapapp\space\thechapter\space#1}}%
                    \fi%
                    \else%
                      \addcontentsline{toc}{chapter}{#1}%
                    \fi%
                      \chaptermark{#1}%
                      \addtocontents{lof}{\protect\addvspace{10\p@}}%
                      \addtocontents{lot}{\protect\addvspace{10\p@}}%
                      \@makechapterhead{#2}%
                      \@afterheading}

因此此代码生成以下 .toc 文件内容

...
\contentsline {chapter}{\numberline 2\MakeUppercase {\IeC ...
...
\contentsline {appendix}{{\Ukrainian \CYRD ...

由两个命令处理

\renewcommand\l@chapter[2]{%
   \ifnum \c@tocdepth >\m@ne
    \vskip \z@ \@plus.2\p@
    {\leftskip 0.0em\relax \rightskip \@tocrmarg plus 15em \parfillskip -
  \rightskip%mod <plus 15em> for avoid hyph. in TOC
     \parindent 0.0em\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima 1.0em\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#1}\nobreak
     \leaders\hbox{$\m@th
      \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
         mu$}\hfill
      \nobreak
     \hb@xt@\@pnumwidth{\hfil \normalcolor #2}%   \hfil\normalfont   |||
    \par}%
   \fi}

\newcommand\l@appendix[2]{%
  \ifnum \c@tocdepth >\m@ne
    \vskip \z@ \@plus.2\p@
    {\leftskip 0.0em\relax \rightskip \@tocrmarg plus 15em \parfillskip -
 \rightskip%mod <plus 15em> for avoid hyph. in TOC
     \parindent 0.0em\relax \hangindent 4.3em\relax\@afterindenttrue
     \interlinepenalty\@M
     \leavevmode
     \@tempdima 1.5em\relax
     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
     {#1}\nobreak
     \leaders\hbox{$\m@th
        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
       mu$}\hfill
     \nobreak
     \hb@xt@\@pnumwidth{\hfil \normalcolor #2}%   \hfil\normalfont   |||
     \par}%
  \fi}

\phantomsection用于hyperref链接的工作正常。 在此处输入图片描述

相关内容