TikZ 中使用定义的 \coordinates 和 \draw 到 [in= , out=] 语法时出错

TikZ 中使用定义的 \coordinates 和 \draw 到 [in= , out=] 语法时出错

亲爱的 LaTeX/TikZ 用户。我显然误解了 TikZ 如何处理坐标定义。我试图在预定义的点之间绘制一条贝塞尔曲线,但 TikZ 抱怨只要目标点是定义的坐标(此处(B))而不是文字坐标(此处(10,10)),编译就会失败并出现以下错误:

! Package PGF Math Error: Unknown function `up' (in 'up').

See the PGF Math package documentation for explanation.
Type  H <return>  for immediate help.
...                                              

l.16   \draw (A) to [out=down,in=up] (B)
;
? 

我尝试用 Google 搜索,但似乎找不到这个特定的错误。我做错了什么?

这是一个最小的工作示例:

\documentclass[]{article}

\usepackage{tikz}
% EDIT: This is for workaround
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,1);
  \coordinate (B) at (10,10);

  % This will work
  \draw (0,1) to [out=down,in=up] (10,10);
  % So will this
  \draw (A)   to [out=down,in=up] (10,10);  
  % And this
  \draw (A) -- (B);

  % But these wont
  % \draw (A) to [out=down,in=up] (B);
  % \draw (0,1) to [out=down,in=up] (B);

  % EDIT: Added the following workaround:
  \draw ($(A)$) to [out=down,in=up] ($(B)$);
\end{tikzpicture}
\end{document} 

编辑

我找到了一个解决方法,但它让我更加困惑。使用\tikzlibrary{calc}和替换(B)可以($(B)$)解决问题,但我不明白为什么。($...$)的环境calc允许计算点,但($(B)$)与有何不同/为什么不同(B)

答案1

问题是,如果您使用命名坐标(或节点)作为目标,tikz 将使用该值作为锚点。但节点中in没有锚点。这意味着(将设置目标)或(将设置目标)将起作用,但不会起作用,因为不存在。upin=90B.90in=northB.northin=upB.up

您的解决方法是,在这种情况下,目标转换为绝对坐标(0.0pt,28.45274pt)并且 tikz 不会尝试使用该in值作为锚点。

\documentclass[]{article}

\usepackage{tikz}

\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  \coordinate (A) at (0,1);
  \coordinate (B) at (10,10);

  \draw (A) to [out=down,in=90] (B);
  \draw (A) to [out=down,in=north] (B);
  %won't work 
 % \draw (A) to [out=down,in=up] (B);

  \draw (A) to [out=down,in=up] ($(B)$);


\end{tikzpicture}
\end{document} 

相关内容