为什么使用常量时需要在椭圆中添加额外的括号?

为什么使用常量时需要在椭圆中添加额外的括号?

在 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}

相关内容