为了解决我描述的问题这里,我需要使用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 在计算机科学和数值模拟方面的背景,我觉得这很奇怪,所以我必须假设我错了,它们确实经过了自动回归测试。我遗漏了什么吗?
让我再次声明,我不是抱怨pgf
和pgfplots
。我非常感谢他们,并且很享受他们允许我制作的高质量人物。
答案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
添加的集合位于开始时的集合。