我正在尝试调试 Paul Taylor 的问题diagrams.sty
(不是在 TeX Live 或 MiKTeX 中,但是可从 CTAN 获取)。
最小示例:
\documentclass{article}
\usepackage{diagrams}
\begin{document}
\fboxsep=0pt
\tracingmacros=2\tracingcommands=2
\fbox{\begin{diagram}
a
\end{diagram}}
\tracingmacros=0\tracingcommands=0
\end{document}
问题是 pdfTeX 可以正确绘制图表,但 LuaTeX 会增加较大的垂直空间。从宏观层面跟踪显示,两个引擎所做的完全相同。
运行TL2012:
This is LuaTeX, Version beta-0.70.2-2012080612 (TeX Live 2012/W32TeX)
(format=lualatex 2012.7.19) 19 JUN 2013 12:06 restricted \write18 enabled.
**test.tex
(./test.tex
LaTeX2e <2011/06/27>
LuaTeX adaptation of babel <v3.8m-luatex-1.5> and hyphenation patterns for english, dumylang, nohyphenation, loaded.
(x:/texroot/texlive2012/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(x:/texroot/texlive2012/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
....
....
*File List*
article.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
diagrams.sty 2011/04/19 v3.94 Paul Taylor's commutative diagrams
有什么提示吗?
答案1
如果您想讨论这个问题或我的 TeX 代码中出现的其他问题,请直接给我发电子邮件,因为我不阅读 TeX 网站并且不愿意公开讨论。
感谢 Sean 的欢迎,但我无意居高临下,我在他出生前就完成了 TeX 的工作,我不想加入任何新的 TeX“社区”,更不想为了获得“名声”(我在 MathOverFlow 上玩的已经够多了)。正如您从本页其他地方看到的那样,TeX 只是给我带来了痛苦。可能许多其他早期采用者也有类似的故事。在 texlive 或任何 Linux 包管理系统出现之前,我为帝国理工学院维护了一个现成的 TeX 系统,我因此受到了学院管理层的虐待,最终丢掉了工作。
看起来 LuaTeX 中有一个错误(或者与 Knuth 的 TeX 有差异),因为 \par 似乎会生成一个额外的 \baselineskip 和 \whatsit。
如果有人非常熟悉 LuaTeX 并愿意直接联系我,我可以尝试解释我在图表包中对段落做了什么,以便他们可以追踪这个错误。
对于只想在 LuaTeX 下使用我的包的人来说,快速修复方法是:在 \usepackage{diagrams} 之后添加
% take this out when you update the diagrams package
\makeatletter
\let\oldCD@t\CD@t
\def\CD@t{\oldCD@t\baselineskip0pt\relax}
\makeatother
请私信告诉我这是否成功。
答案2
来自的版本
http://www.paultaylor.eu/diagrams/diagrams.sty
在您的示例中,使用 lualatex 没有任何错误。
该版本现在
\ProvidesPackage{diagrams}[2014/12/31 v3.94 Paul Taylor's commutative diagrams]
并在 luatex 和 pdftex 中产生相同的输出。
以下是较早的答案。
\ProvidesPackage{diagrams}[2011/04/19 v3.94 Paul Taylor's commutative diagrams]%%
pdflatex
路拉泰克斯
细心的人会注意到它们并不相同。可能值得在 luatex 列表中提出。
luatex 代码似乎在段落的开头得到了一个双框,这意味着之后\setbox\z@\lastbox
不会清除水平列表,并且会生成一个额外的空白段落:
pdflatex
\CD@r ->\CD@GB \lastpenalty \unpenalty \ifnum \CD@GB >\z@ \setbox \z@ \lastbox
\CD@lB
{\count102}
{\unpenalty}
{\ifnum}
{false}
{\par}
{internal vertical mode: \unskip}
路特克斯
\CD@r ->\CD@GB \lastpenalty \unpenalty \ifnum \CD@GB >\z@ \setbox \z@ \lastbox
\CD@lB
{\count102}
{\unpenalty}
{\ifnum}
{false}
{\par}
@firstpass
[][]
@\par via @0 b=0 p=-10000 d=81000000
@@1: line 1.2- t=81000000 -> @0
{internal vertical mode: \unskip}