你可以在luatex85
文档中读到:
LuaTEX 0.85 和 0.87 与 TEXLive 2014 中的 LuaTEX 0.80 相比有很多变化。最值得注意的是,几乎所有有名称的 pdfTEX 扩展原语
\pdf...
都已被重命名或删除。[...]
LuaTEX 手册列出了可以进行的适当兼容性定义,以便文档可以继续使用旧名称。这个包主要由这些定义组成,在某些情况下会进行微小更改。(主要是在使用 \protected 或 \edef 时的选择不同。)
除了“编程品味”之外,还有其他原因导致这些不同的选择吗?
答案1
这些luatex85
定义的优点是,它们以代码形式存在,并且在更多情况下经过测试(在乳胶中实际使用),因此可以在更多情况下发挥作用。
\def
在最初的几个版本中,对几个定义进行了调整。通常,使用或\edef
或 是否使用\protected
以及使用空格或 来终止数字都无关紧要\numexpr...\relax
。但是,如果您在足够多的真实世界文档中尝试模拟,并执行足够多奇怪的扩展上下文,那么您就会发现不同的命令需要不同类型的模拟。
例如你在评论中提到的案例
\def\pdffontname{\pdffeedback fontname} % (luatex85.sty)
\def\pdffontname{\numexpr\pdffeedback fontname\relax}% manual
在几乎所有情况下,它都会被用作数字,例如
\count@=\pdffontname
任何一种定义都可以,但 pdftex 允许在所有上下文中将其扩展为数字,并且不需要\the
这个纯 tex 文档
\pdffontname\font
\bye
是否无错误,排版是否正确 1
该\numexpr
版本将产生
! You can't use `\numexpr' in vertical mode.
\pdffontname ->\numexpr
\pdffeedback fontname\relax
l.5 \pdffontname
\font
?
除非你加上前缀\the
但没有的版本
\def\pdffontname{\pdffeedback fontname}
\pdffontname\font
\bye
做正确的事。
有时就像
{\outputmode=1
\xdef\pdfcreationdate {\pdffeedback creationdate}
}
我们更加努力地在一个扩展步骤中扩展到正确的东西,因为有人有一个真正的包
....\expandafter\something\pdfcreationdate
并且\something
需要访问扩展日期而不仅仅是的第一级扩展\pdffeedback creationdate
,并且 pdftex 使得它在 PDF 和 DVI 模式下都可用,而 LuaTeX 反馈仅在\outputmode
为 1 时可用。
目前尚不清楚这些为了实现在野外工作的强健仿真而做出的考虑是否必然会澄清手册,该手册给出了如何解决 LuaTeX 0.85 中发生的名称更改的基本思想,因此我们从未认为有必要将这些差异推回给 LuaTeX 团队以编写手册。