为什么 diagrams.sty 与 LuaTeX 不兼容

为什么 diagrams.sty 与 LuaTeX 不兼容

我正在尝试调试 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}

相关内容