如何解决 TeXLive 和 pgf 版本之间的冲突?

如何解决 TeXLive 和 pgf 版本之间的冲突?

为了解决我描述的问题这里,我需要使用pgfplots版本 1.13,这要求我更新到 TeX Live 2015。这样做会导致命令出现问题\heightof,正如运行 MWE 时看到的那样

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[text height=\heightof{$\pi/2$}] {Text};
\end{tikzpicture}
\end{document}

这导致

! Undefined control sequence.
\tikz@text@height ->\heightof 
                              {$\pi /2$}
l.5 \node[text height=\heightof{$\pi/2$}] {Text};

因此,我需要 TeX Live 2015 来处理一些图形,但这会破坏其他图形,而这些图形在 TeX Live 2014 下可以正常工作。我已经在SourceForge- 最初认为这是一个pgfplots问题 - 而 Christian Feuersänger 指出这实际上是一个问题pgf

截至今天,错误报告仍然处于打开状态,我想非常清楚地说明一下,我不是抱怨。相反,我想问一个实际问题和一个不太实际的问题。实际问题:

在修复错误之前,我该如何解决这两个问题?我对这个笨拙的解决方法很满意,但我想避免根据我的图表是否需要 TeX Live 2015 或 2014 来将它们分成两组进行处理。原因有两个。首先,我的文档相当大(数百个.tex文件)。其次,它使用多个 Makefile 进行处理。

我提出的问题不太实际,这源于我的好奇心以及开发和测试复杂软件的经验:pgf、TikZ 和的新版本pgfplots在发布(并被纳入 TeX Live 等)之前是否经过自动回归测试?似乎没有,但考虑到 Till Tantau 和 Christian Feuersänger 在计算机科学和数值模拟方面的背景,我觉得这很奇怪,所以我必须假设我错了,它们确实经过了自动回归测试。我遗漏了什么吗?

让我再次声明,我不是抱怨pgfpgfplots。我非常感谢他们,并且很享受他们允许我制作的高质量人物。

答案1

猜测预期的含义,你可以这样做:

\documentclass{minimal}
\usepackage{tikz}
\begin{document}

\newlength\zzz
\settoheight\zzz{$\pi/2$}
\begin{tikzpicture}
\node[text height=\zzz] {Text};
\end{tikzpicture}
\end{document}

答案2

内部宏的定义发生了重大变化\pgfmathparse@。旧版本包含一组兼容行,calc这些行已被删除(可能是故意的)。将这些行重新添加进去,但保留新定义,结果如下:

\makeatletter
\def\pgfmathparse@#1{%
    % Stuff for calc compatiability.
    \let\real=\pgfmath@calc@real
    \let\minof=\pgfmath@calc@minof
    \let\maxof=\pgfmath@calc@maxof
    \let\ratio=\pgfmath@calc@ratio
    \let\widthof=\pgfmath@calc@widthof
    \let\heightof=\pgfmath@calc@heightof
    \let\depthof=\pgfmath@calc@depthof
    % No (math) units yet. 
    \global\pgfmathunitsdeclaredfalse
    \global\pgfmathmathunitsdeclaredfalse
    % Expand expression so any reamining CSs are registers
    % or box dimensions (i.e. |\wd|, |\ht|, |\dp|).
    \edef\pgfmath@expression{#1}%
        %
        \expandafter\pgfmathparse@trynumber@loop\pgfmath@expression\pgfmath@parse@stop
        %
        % this here is the _real_ parser. it is invoked by
        % \pgfmathparse@trynumber@loop if that says "this is no number"
        %\pgfmathparse@@\pgfmath@parse@stop%
}
\makeatother

添加的集合位于开始时的集合。

相关内容