请问我在这次测试中做错了什么:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathparse{10*2}
\node at (4,-5) {$2 \cdot 10 = \pgfmathresult$};
\end{tikzpicture}
\end{document}
它的输出是一行:
2 * 10 = -5.0
代替:
2 * 10 = 20
?
答案1
\pgfmathresult
保存 pgfmath 最后一次计算的结果;在本例中,这是 y 坐标的求值(4,-5)
,恰好是 -5。用于\pgfmathsetmacro
将结果分配给宏。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro\result{10*2}
\node at (4,-5) {$2 \cdot 10 = \result$};
\end{tikzpicture}
\end{document}
要获取整数值,请使用\pgfmathtruncatemacro
而不是\pgfmathsetmacro
。有关更多信息,请参阅TikZ 手册;在 3.0.1a 版本中,该主题在第 89 节第 923 页中介绍。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathtruncatemacro\result{10*2}
\node at (4,-5) {$2 \cdot 10 = \result$};
\end{tikzpicture}
\end{document}
答案2
tikz
使用 s 时执行一些计算\node
。这些计算是使用 完成的\pgfmathparse
。因此,您的\pgfmathresult
被其他内容覆盖。
相反,将 放在\pgfmathparse
之前\pgfmathresult
,或者\pgfmathresult
在 评估之后立即存储以供稍后使用:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathparse{10*2}\edef\storeresult{\pgfmathresult}%
\node at (4,-5) {$2 \cdot 10 = \pgfmathprintnumber\storeresult$};
\node at (4,-6) {$2 \cdot 10 = \pgfmathparse{10*2}\pgfmathprintnumber\pgfmathresult$};
\end{tikzpicture}
\end{document}