考虑这个例子:
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\xstart{-1}
% \def\xstart{-0.2-0.8}
% \def\xstart{\pgfmathparse{-0.2-0.8}\pgfmathresult}
\draw[fill=black](0,0)circle(0.1cm);
\draw(\xstart, 1) rectangle (1, -1);
\node at (0.5*\xstart + 1*0.5, 0){centre};
\end{tikzpicture}
\end{document}
结果是文本居中,正如我们所期望的:
但是,如果我使用\def\xstart{-0.2-0.8}
某些错误就会出现:
无法通过使用 来提供救援\def\xstart{\pgfmathparse{-0.2-0.8}\pgfmathresult}
。
如何纠正这个问题?
答案1
这里有两种方法(共几种选项)可以消除错误。
- 添加括号,
\node at ({0.5*(\xstart) + 1*0.5}, 0){centre};
。这是因为否则 Ti钾Z 看到\node at (0.5*-0.2-0.8 + 1*0.5, 0){centre};
。请注意,您需要在 x 组件周围添加括号,否则括号会使解析器感到困惑。 - 使用
\pgfmathsetmacro
。
结果是一样的。
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\xstart{-1}
\def\xstart{-0.2-0.8}
% \def\xstart{\pgfmathparse{-0.2-0.8}\pgfmathresult}
\draw[fill=black](0,0)circle(0.1cm);
\draw(\xstart, 1) rectangle (1, -1);
\node at ({0.5*(\xstart) + 1*0.5}, 0){centre};
\begin{scope}[xshift=4cm]
\pgfmathsetmacro\xstart{-0.2-0.8}
\draw[fill=black](0,0)circle(0.1cm);
\draw(\xstart, 1) rectangle (1, -1);
\node at (0.5*\xstart + 1*0.5, 0){centre};
\end{scope}
\end{tikzpicture}
\end{document}