The release of pgf 3.1 on Jan the 6th broke a nightly build I'm running. Updating the package locally allowed me to reproduce the error, so I'm certain that's what caused it.
Here is a broken MWE:
\input tikz
Help?
\bye
Here is the log of running tex on it:
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}
The MWE breaks using tex, ptex and uptex. It works using etex, pdftex, xetex, luatex, eptex and euptex.
It seems to break when using anything that's missing etex extensions. That makes sense since \scantokens is such an extension.
I'm a bit surprised by the breaking change, and I might simply be missing something.
Does this actually mean that pgf lost some compatibility?
If that's the case, does anyone know the rationale behind the decision (and perhaps a link to the commit)?
NOTE: There's no complaint here, I'd just like to learn more. I know infinite retrocompatibility is never to be expected, and I think the maintainers of pgf/TikZ are amazing.
tex(I might be wrong). The incompatibility is due to the lack of the ε-TeX extensions in Knuth's TeX which are used by TikZ (\scantokens, for instance). They are available in most other engines. The originaltexwill never incorporate these extensions. – Phelype Oleinik Feb 04 '19 at 19:39tex; I've used it a few times. It's also documented as working (except for some things explicitly marked as not working) in the TikZ manual, e.g. see page 30 (section 2.2.2) which says "Gerda can typeset this file using eitherpdftexortextogether withdvips." I'd go further than the OP, this is definitely a bug. Or if the breaking change was intentional, there doesn't seem to be any announcement. – ShreevatsaR Feb 04 '19 at 20:30grep -r scantokensin thepgffiles show one occurrence of\scantokens(inpgfkeys.code.tex) which wasn't in previous ones, which is causing the problem OP noticed. – Phelype Oleinik Feb 04 '19 at 21:06