![“\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip”的含义](https://linux22.com/image/296439/%E2%80%9C%5Cadvance%5Cleftskip%20%5C%40tempdima%20%5Cnull%5Cnobreak%5Chskip%20-%5Cleftskip%E2%80%9D%E7%9A%84%E5%90%AB%E4%B9%89.png)
我是 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 测试