在 TikZ 中声明常量的最佳方法是什么?我之所以使用这种方法,\pgfmathsetmacro
是因为我看到其他人在这个网站上这样做。常量应该是一个简单的东西,所以我有点困惑为什么需要为此使用低级(pgf)命令!?当使用椭圆命令时,我遇到了一个奇怪的问题,我需要将常量包装在一个额外的集合中,{}
如下所示:
\draw (6,6) ellipse (\r and 1);
。
错误:
! 包 PGF 数学错误:未知运算符“a”或“an”(在“1and 1”中)。
这是为什么?
有关的:TikZ 计算问题
梅威瑟:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\r}{1}
\draw (0,0) ellipse (1 cm and 1 cm); %ok
\draw (1,1) ellipse (1 and 1); %ok
\draw (2,2) ellipse (1 cm and \r cm); %ok
\draw (3,3) ellipse (1 and \r); %ok
\draw (4,4) ellipse (\r cm and 1 cm); %ok
\draw (5,5) ellipse ({\r} and 1); %ok
\draw (6,6) ellipse (\r and 1); %not ok
\draw (7,7) ellipse (\r{} and 1); %ok
\end{tikzpicture}
\end{document}
编辑:从@marmot的评论和实验中我发现,这\constant{}
也有效\draw (7,7) ellipse (\r{} and 1);
...但声明和使用常量的正确方法是什么 - 我在 TikZ 手册中找不到它。我应该总是使用\constant{}
,还是只在出现问题时使用?
答案1
这是来自旧代码的部分,这应该通过键来完成。tikz.code.tex
你可以在其中找到这个
\def\tikz@@@circle(#1){%
{%
\pgftransformshift{\tikz@last@position}%
\pgfutil@in@{ and }{#1}% <==== This is the part that it looks for a pattern
\ifpgfutil@in@%
\tikz@@ellipseB(#1)%
\else%
\tikz@do@circle{#1}{#1}%
\fi%
}%
\tikz@scan@next@command%
}
由于周围有空白,因此and
您需要在它周围留出空白。
开发人员不赞成这种用法并且他们推荐ellipse [x radius=<>, y radius=<>]
语法。
手册和源代码注释中都提到了这一点
% Syntax for circles:
% circle [options] % where options should set, at least, radius
% circle (radius) % deprecated
%
% Syntax for ellipses:
% ellipse [options] % identical to circle.
% ellipse (x-radius and y-radius) % deprecated
%
% radii can be dimensionless, then they are in the xy-system
例如在positioning
语法上,你没有这个问题
%\usetikzlibrary{positioning}
\begin{tikzpicture}
\node (a) {a};
\node[above=1of a] {b};% 1cmof a also works
\end{tikzpicture}