为什么将 tikzset 参数存储在坐标中会导致错误?

为什么将 tikzset 参数存储在坐标中会导致错误?

我很难理解 TikZ 如何处理坐标。因此,这个问题与我之前的两个问题有关,将来还会有更多问题……

在下面的代码中,我定义了一个tikzset带有两个参数的函数。我想将它们存储在坐标中(是的 - 在这种情况下不需要并且毫无意义,但在我尝试使用 TikZ 执行的操作中不是这样)。

生成的图片是正确的但是我收到一个错误:! Package tikz Error: Giving up on this path. Did you forget a semicolon?. l.17 \pic at (0,0) {somearrow={(1,1)}{(3,3)}}

我的代码有什么问题?请解释一下。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\tikzset{
  pics/somearrow/.style 2 args={
    code={
      \coordinate (A) at (#1);
      \coordinate (B) at (#2);
      \node at (A) {#1};
      \node at (B) {#2};
    }}}

\begin{document}

  \begin{tikzpicture}
  \draw[help lines] (0,0) grid (4,4);
  \pic at (0,0) {somearrow={(1,1)}{(3,3)}};
  \end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

你要求它将坐标放置在((0,0))和 处,((3,3))而不是(0,0)和 处(3,3)。只需省略额外的括号:

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\tikzset{
  pics/somearrow/.style 2 args={
    code={
      \coordinate (A) at #1;
      \coordinate (B) at #2;
      \node at (A) {#1};
      \node at (B) {#2};
    }}}

\begin{document}

  \begin{tikzpicture}
  \draw[help lines] (0,0) grid (4,4);
  \pic at (0,0) {somearrow={(1,1)}{(3,3)}};
  \end{tikzpicture}

\end{document}

无错误输出

相关内容