为什么 pgf 3.1 与 tex 不兼容?

为什么 pgf 3.1 与 tex 不兼容?

pgf1 月 6 日发布的 3.1 版本打破了每晚构建我正在运行。本地更新软件包让我重现了错误,所以我确定这就是导致错误的原因。

这是一个损坏的 MWE:

\input tikz
Help?
\bye

tex以下是其运行的日志:

This is TeX, Version 3.14159265 (TeX Live 2018) (preloaded format=tex)
(./main.tex
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/frontendlayer/tikz.tex
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/basiclayer/pgf.tex
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/utilities/pgfrcs.tex
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te
x
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-li
sts.tex))
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfutil-plain.def
(/usr/local/texlive/2018/texmf-dist/tex/generic/oberdiek/atbegshi.sty
(/usr/local/texlive/2018/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2018/texmf-dist/tex/generic/oberdiek/ltxcmds.sty)
(/usr/local/texlive/2018/texmf-dist/tex/generic/oberdiek/ifpdf.sty)))
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/pgf.revision.tex)))
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/basiclayer/pgfcore.tex
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/systemlayer/pgfsys.tex
(/usr/local/texlive/2018/texmf-dist/tex/plain/pgf/utilities/pgfrcs.tex)
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
(/usr/local/texlive/2018/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c
ode.tex))
! Undefined control sequence.
\pgfkeyssetevalue ...gfkeys@temptoks =\scantokens
                                                  \expandafter {\expandafter...

\pgfkeys@ifcsname ...\fi \ifpgfkeys@csname@test #2
                                                  \else #3\fi
\pgfkeys@ifcsname ...gfkeys@csname@test #2\else #3
                                                  \fi
\pgfkeys@ifcsname ...gfkeys@csname@test #2\else #3
                                                  \fi
\pgfkeys@unpack ...pgfeov \else \pgfkeys@case@one
                                                  \fi \fi
\pgfkeys@@normal ...pgfkeysnovalue =\pgfkeys@stop
                                                  \pgfkeys@parse
...
l.17 \pgfkeys{/pgf/.is family}

MWE 使用texptex和会中断。使用、、、和 则可以uptex正常工作。etexpdftexxetexluatexeptexeuptex

使用缺少etex扩展的任何东西似乎都会中断。这是有道理的,因为\scantokens有这样的扩展。

我对这一重大变化感到有点惊讶,我可能只是错过了一些东西。

这是否意味着pgf失去了一些兼容性?如果是这样,有人知道这个决定背后的理由吗(也许还有提交的链接)?

笔记:这里没有抱怨,我只是想了解更多。我知道永远不要指望无限的追溯兼容性,我认为/pgf的维护者TikZ惊人的

答案1

PGF 3.1 不支持 Knuth TeX 的原因有两个。

  1. 现在是今年。到现在为止,e-TeX 已经有 20 多年的历史了,并且极大地简化了 TeX 的开发。我认为你没有使用 e-TeX 是一个 bug。不幸的是,TeX Live 附带的二进制文件tex不支持 e-TeX 扩展。你必须改用etex

  2. TikZ/PGF 的开发已经停滞了几年,因为 Till Tantau 显然已经完全放弃了该项目,而 Christian Feuersänger 一直忙于线下生活。2018 年圣诞节前后,Christian(通过 Stefan Pinnow)联系我加入 PGF 开发团队,以便修复错误并准备新版本。Christian 渴望在圣诞节前后发布该版本,然后再回去工作。这只留下了很少的测试时间,许多错误和无效的错误修复最终成为 3.1 版本的一部分。我的目标是积极参与 TeX Live 2019 预测试,以便在下一个版本发布之前消除所有错误。对于这个质量低劣的版本,我深表歉意,但情况迫使我们迅速发布。

另外,我想请大家报告官方 PGF 错误追踪器而不是 Stack Exchange。遗憾的是,您无法在那里获得互联网积分,但这大大简化了开发人员的工作。如果您真的想获得这些甜蜜的声誉积分,您可以在 Stack Exchange 上发布问题此外您的错误报告官方 PGF 错误追踪器。 谢谢。

如果您不确定您观察到的是否是错误,并且您已在此处发布它,但被告知要打开错误报告,请重复所有必要的信息以在 PGF 错误跟踪器上重现问题。仅包含链接的错误报告不太好,因为它们暗示您不重视开发人员的时间。

相关内容