有人可以解释一下 threeparttable 的 para 设置吗?

有人可以解释一下 threeparttable 的 para 设置吗?

para(以下摘录)中的设置使用threeparttable了 David Carlisle 所说的“一组有趣的惩罚和胶水”我必须遗憾地承认,我对此一无所知。有人能像我一样解释一下这里发生了什么吗?一个小孩,或者一只金毛猎犬? :-)

摘录自threeparttable.sty:

\def\TPT@doparanotes{\par
   \prevdepth\z@ \TPT@hsize
   \TPTnoteSettings
   \parindent\z@ \pretolerance 8
   \linepenalty 200
   \renewcommand\item[1][]{\relax\ifhmode \begingroup
       \unskip
       \advance\hsize 10em % \hsize is scratch register, based on real hsize
       \penalty -45 \hskip\z@\@plus\hsize \penalty-19
       \hskip .15\hsize \penalty 9999 \hskip-.15\hsize
       \hskip .01\hsize\@plus-\hsize\@minus.01\hsize 
       \hskip 1em\@plus .3em
      \endgroup\fi
      \tnote{##1}\,\ignorespaces}%
   \let\TPToverlap\relax
   \def\endtablenotes{\par}%
}

答案1

从中间开始。

\hskip .15\hsize \penalty 9999 \hskip-.15\hsize

成语 hskip某物一些惩罚, 跳过减去一些东西相当常见,其历史可以追溯到 TeXBook 中描述的 LaTeX 之前。

这里添加的总空间为零,因此如果没有发生换行,那么它就如同不存在一样。但是,如果在惩罚处发生换行(在此 9999 示例中允许但强烈反对),则在第一行末尾会跳过 .15\hsize(由于这不会拉伸,因此会强制缩短行),然后在惩罚处换行,然后第二个负跳过将被丢弃,因为换行后的所有粘连都会被丢弃。

因此,如果项目之前已经有段落分隔符,则大部分内容将被跳过,但如果没有,并且我们处于水平模式,则

\unskip删除空格前面的任何粘连\item(我们要添加这种粘连组合,而不是普通的单词空格)

\penalty -45 负惩罚表示如果可以在前一项之后直接断点,那么这是一个很好的断点。

\hskip 0pt plus \hsize在 0pt 和全宽之间添加粘连(如果先前的中断已被占用,则会被丢弃)

\penalty-19 仍然是一个不错的突破点,但不如 -45 选项好。

\hskip .15\hsize \penalty 9999 \hskip-.15\hsize 正如所讨论的,这是一个不鼓励但允许的最后选择中断,这将迫使前一行变短

\hskip .01\hsize plus-\hsize minus.01\hsize如果之前的断裂没有被消除,则添加具有弹性的胶水,-\hsize以抵消\hsize之前添加的弹性,同时也允许一点收缩。

\hskip 1em plus .3em如果没有换行符(否则将被丢弃),则在实际项目前添加 1em 的空格(如果需要,可延伸至 1.3em)作为最小空格

\tnote{##1}\,\ignorespaces现在,无论这是一个新段落还是刚添加的水平粘贴后面的同一段,都从中添加文本,然后添加\item[]一个细空格,然后忽略源文件中的空格,然后从后面的实际文本开始\item

相关内容