tikz/pgf 和 `\maxof` 自 3.0.1a 起损坏

tikz/pgf 和 `\maxof` 自 3.0.1a 起损坏

以下示例在 tikz 3.0.0(TL 2014 以及可能的 2015)以下版本中运行良好,但从 tikz 3.0.1a(直到现在)开始出现故障:

\documentclass{report}
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
Start image
\begin{tikzpicture}[inner sep=0pt, inner ysep=0.3ex]
  \path let \p1 = (0,4), \p2 = (0,8) in node (foo) at (0,0+\maxof{\y1}{\y2}) {Hello};
\end{tikzpicture}
\end{document}

出现以下错误:

! Missing number, treated as zero.
<to be read again> 
                   m
l.8 ...,8) in node (foo) at (0,0+\maxof{\y1}{\y2})
                                                   {Hello};
? 

只需将一个文件(pgfmathparser.code.tex)从旧安装复制到新安装,示例即可再次开始工作。

这是一个已知问题吗?

谢谢

答案1

在较新的 pgf 版本中,calc 的兼容性代码已从 \pgfmathparse@更“内部”的命令移出,这会中断令牌处理。如果我再次添加代码,\pgfmathparse@它会再次运行:

\documentclass{report}
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{xpatch}
\makeatletter
\xpretocmd\pgfmathparse@{\let\maxof=\pgfmath@calc@maxof}{}{\fail} %and so on
\makeatother
\begin{document}
Start image
\begin{tikzpicture}[inner sep=0pt, inner ysep=0.3ex]\tracingmacros=1
  \path let \p1 = (0,4), \p2 = (0,8) in node (foo) at (0,{0+\maxof{\y1}{\y2}}) {Hello};
  \path let \p1 = (0,4), \p2 = (0,8) in node (foo) at (0, 0+\maxof{\y1}{\y2}) {Hello};
  \path let \p1 = (0,4), \p2 = (0,8) in node (foo) at (0,{0+ max(\y1,\y2)}) {Hello};
\end{tikzpicture}
\end{document}

但我不知道为什么代码被移动了,因此可能会产生不必要的副作用。也有可能在两个位置的中间某个地方有更好的位置放置代码。

编辑

我找到了做出更改的提交。这是在实施“快速通道”时完成的:

为数学解析器添加了自动“快速通道”:

如果输入的是没有单位的数字,它将按原样返回。对于大型散点图,排版时间减少 66%,而对于数学密集型数字,开销仅为 1%。

我认为代码不是故意移到内部命令中的,而或多或少是偶然的,因为新的内部命令是通过改变现有的pgfmathparse@并将 calc-compability 代码移回而编写的pgfmathparse@,应该可以正常工作。

相关内容