我可以保证,以下示例在 2017 年之前可以正常运行。更新到 TL2017 后,出现了以下错误消息:
!Undefined control sequence.
\pgfmath@dimen@ ...men@@ #1=0.0pt\relax \pgfmath@
有什么迹象表明哪里出了问题?
\documentclass{scrartcl}
\usepackage{calc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[text width=\widthof{ABC}] at (0,0) {bla};
\end{tikzpicture}
\end{document}
还有一个问题:如何处理数学表达式?
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[text width=width("n=10"))] at (0,0) {bla};
\end{tikzpicture}
\end{document}
这不起作用,但是这个变体可以:
\node[text width=width("{$n=10$}")] at (0,0) {bla};
答案1
早期版本的 TikZ 定义了一个\widthof
宏,可以像你之前那样使用,你可能仍然会找到这样的例子。然而,在 TikZ 3 版本中,你可以改用width
数学引擎的功能,然后说
\node[text width=width("ABC")] at (0,0) {bla};
关于你的最后一个问题,你的工作代码和非工作代码之间的关键区别在于括号的存在。我不知道具体发生了什么,但=
我认为以某种方式绊倒了解析器。因此,这也有效:
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[text width=width("{n=10}")] at (0,0) {bla};
\end{tikzpicture}
\end{document}