众所周知,pdfTeX 试图以一种巧妙的方式应用字符突出。当将水平列表分成几行时,字符突出的(隐式)字距会插入到每个结果\hbox
'es 的边缘附近,其字距量由行中最左/最右字符的\lpcode
/\rpcode
推算得出,即使该字符埋在嵌套的\hbox
'es 中,或者字符本身和行边缘之间有其他粘连或字距,甚至是空的\hbox
'es。另一方面,缩进框的存在会抑制“左边距”字距。因此,我们看到字符突出会绕过水平列表中的某些类型的节点,但不会绕过其他类型的节点。
我曾试图找到控制“边距”字距插入的规则的确切规范,但没有成功。不过,我注意到,设置值的规则,例如, \rightmarginkern
并不总是与插入此类字距的字距“同步”。例如,请考虑以下代码:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[protrusion]{microtype} % protrusion option is actually redundant,
% but I want to be safe!
\begin{document}
First of all, \( \verb|\parfillskip| = \mbox{\the\parfillskip} \).
Secondarily, the main font is ``\fontname\the\font'': in this font the
\verb|\rpcode| of the character~``.'' is \the\rpcode\font`. \space and the
\verb|\lpcode| of the character~``('' is \the\lpcode\font`( . % paren match )
Now we typeset a paragraph which, while containing the usual \verb|\parfillskip|
glue, whose value is specified above, ends flush with the right margin because
it contains a \verb|\hfill| command:\hfill
(here!).\special{comment:Do you see the kern?}
(Another example for protrusion into the left margin,\hfill using
parentheses.)\linebreak (We force a left parenthesis at the beginning of a
line.)
\begingroup
% Show that protrusion _is_ applied "through" the \parfillskip glue:
\showboxbreadth = 1000
\showboxdepth = 5
\showlists
% But if we ask for the \rightmarginkern of the last line...
\setbox0 = \vbox{\indent
Now we typeset a paragraph which, while containing the usual \verb|\parfillskip|
glue, whose value is specified above, ends flush with the right margin because
it contains a \verb|\hfill| command:\hfill (here!).\par
\global\setbox1 = \lastbox
}
% (...here it is...)
\showbox1
\endgroup
% ...we don't see any protrusion:
Now, \( \verb|\rightmarginkern1| = \mbox{\rightmarginkern1} \).
\end{document}
检查本例产生的转录本,发现字符突出是应用于以“现在我们排版......”开头的段落最后一行的右边缘;尽管如此,当我们要求该\rightmarginkern
行时,0pt
会返回。
这可能是 pdfTeX 的一个错误吗?如果不是(如果它是一项功能),那么设置\leftmarginkern
和 的具体规则是什么\rightmarginkern
?
答案1
是的,我想说这是 中的一个错误pdftex
。(它似乎与这个错误,几年前已经修复。)\rightmarginkern
如果 包含 glue 组件, 似乎会报告零字距\parfillskip
,而边距字距调整本身会应用,尽管有 glue 组件。如果设置\parfillskip
为 ,则两者都一致0pt
。
对于具体的规则,我只能推荐你去pdftex
来源,其中可跳过的项目在 中定义cp_skipable
为:
- 插入
- 分数
- 调整节点
- 处罚
- 什么东西(图片除外)
- 空的自由裁量权
- 空数学节点
- 零字距
- 零粘连(这是实际边距字距和报告的边距字距之间的差异)
- 空的水平盒子
不幸的是,似乎不再有错误跟踪器pdftex
,所以我不知道可以在哪里报告这个问题。