“\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip”的含义

“\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip”的含义

我是 LaTeX 的新手,遇到了以下我无法完全理解的代码。

\def\@dottedtocline#1#2#3#4#5{%
  \ifnum #1>\c@tocdepth tt\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 1.5mu\cdot\mkern 1.5mu$}\hfill
     \nobreak
     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
     \par}%
  \fi}

第一个是

\leftskip #2 \relax \rightskip \@tocrmarg \parfillskip -\rightskip
     \parindent #2 \relax\@afterindenttrue

有人可以详细地向我解释一下吗?

第二

\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip

它是什么意思,为什么要使用\hskip -\leftskip以及的含义是什么\advance\leftskip \@tempdima

先感谢您!

答案1

该代码大概不适合新手 LaTeX 用户阅读,但是...

\def\@dottedtocline#1#2#3#4#5{%

具有 5 个参数的宏

  \ifnum #1>\c@tocdepth tt\else

如果#1 深度超过了目录深度排版的限制tt(打字错误??)否则

    \vskip \z@ \@plus.2\p@

在 0 和 .2pt 之间添加一个小的垂直空间

    {\leftskip #2 \relax

\leftskip将(段落左边缘前的空格)设置为#2

            \rightskip \@tocrmarg

设置\rightskip\@tocrmarg

           \parfillskip -\rightskip

\parfillskip将(段落末尾的额外空间)设置为,-\rightskip以便取消\rightskip,确保段落结束与右边距齐平。

     \parindent #2 \relax

将段落缩进设置为#2

     \@afterindenttrue

将此布尔标志设置为 true,以控制标题后第一个段落的缩进。

     \interlinepenalty\@M

防止行间分页

     \leavevmode

开始一个段落

     \@tempdima #3 \relax

将此临时寄存器设置为#3

     \advance\leftskip \@tempdima

将左跳跃增加刚刚存储的值

      \null

在刚开始的段落中添加一个空白框

       \nobreak\hskip -\leftskip

向后跳,以便形成第一行不是缩进\leftskip

     {#4}

排版或以其他方式做#4

     \nobreak

防止此时中断

     \leaders\hbox{$\m@th\mkern 1.5mu\cdot\mkern 1.5mu$}\hfill

画出一排圆点

     \nobreak

防止中断

     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%

设置#5在固定宽度的框中\@pnumwidth

     \par}%

结束段落和组

  \fi}

结束 if 测试

相关内容