在完成 TUGboat 的一篇文章时,我发现 pdfTeX 的突出机制(由该microtype
包实现)出现了奇怪的行为。打字机中的字符\
具有负的左边距突出,即它通常向左边距突出 1.57498pt。但是,如果在 LaTeX 环境中使用相同的文本quote
,第一行的突出就会消失,如下例所示:
\documentclass{article}
\usepackage{microtype}
\microtypesetup{protrusion=true}
\begin{document}
\noindent
\verb=\foo= \\
\verb=\foo= \\
\smash{\rule{.4pt}{34pt}}aaaaaaaa
\begin{quote}
\verb=\foo= \\
\verb=\foo= \\
\smash{\rule{.4pt}{34pt}}aaaaaaaa
\end{quote}
\end{document}
结果我们得到
现在问题显然与 pdfTeX 如何实现突出有关,并且微类型与 \parindent 之间意外的交互这已经在意图框中讨论过了。
在这种情况下,这里没有缩进框。相反,我们有一个由quote
环境添加的隐藏“标签”框,因为这实际上是一种简单的列表形式。因此,有一个隐藏的\item
没有任何可见输出(如零宽度缩进框)。
以下是我的问题:
- 我的分析正确吗(这基本上只是午夜时分的一个假设)
- 如果是这样,pdfTeX 是否应该更加努力地在行尾的“不可见”材料上进行凸出处理?也就是说,这会是 pdfTeX 的一个错误,至少是一个改进主题?
- 或者应该/可以通过 LaTeX 中的代码来解决这个问题(或
microtype
)以不同的方式实现这些事情?
答案1
你的分析是正确的。
几年前,pdftex 团队一直在讨论 pdftex 是否应该更加努力。除了在所有情况下都正确处理可能太难之外,没有得出明确的结论,因此这个问题被推迟到以后再考虑……现在对 pdftex 来说可能已经太晚了,应该交给 luatex。
microtype
如果 pdftex 没有提供任何合适的方法,解决这个问题将非常困难;参见这个拼凑物。使用命令告诉 pdftex 应该将当前点视为行的开始/结束,这样做会更容易(尽管仍然很混乱)。甚至还有一个修补提供这样的命令,但似乎从未正式发布。(当然,将
quote
环境实现为一个带有空项的列表(verbatim
另一种情况)可能被 LaTeX2e 视为一个相当不幸的选择,无论如何 - 我认为应该对 LaTeX3 进行调查。)