为什么 xparse 拒绝标记这个边?

为什么 xparse 拒绝标记这个边?

["f"]当我删除行中的标签指令时,以下代码运行良好并执行我想要的操作\draw[->] (A) edge["f"] (B);。另一方面,当带有该标签(和其他边缘标签)的指令不在xparse命令定义中时,它们运行良好。

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xparse}
\NewDocumentCommand\Triangle{ O{} r() m m m}{\begin{scope}[#1]\node at (#2) (A) {#3};
      \node at ($(#2)+(1,1.5)$) (B) {#4};
      \node at ($(#2)+(2,0)$) (C) {#5};
      \draw[->] (A) edge["f"] (B);
      \draw[->] (B) edge (C);
      \draw[->] (A) edge (C);
      \end{scope}
}
\begin{document}
  \begin{center}
    \begin{tikzpicture}
        \Triangle[rotate=30](0,0) 0 1 2;
        \Triangle[rotate=-10](2.5,0) 0 1 2;
        \Triangle(5,0) 0 1 2;
    \end{tikzpicture}
  \end{center}
\end{document}

我怎样才能xparse承认这个标签?我相信这是一个简单的答案,但我还没有找到它。

答案1

这与 无关xparse,为了使用".."标签的语法,您必须加载quotesTikZ 的库,即添加\usetikzlibrary{quotes}

您的代码在宏定义之外也无法工作,如果可以的话,我猜它是在quotes加载库的文档中。

代码输出

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,quotes} % <-- added quotes
\usepackage{xparse}
\NewDocumentCommand\Triangle{ O{} r() m m m}{\begin{scope}[#1]\node at (#2) (A) {#3};
      \node at ($(#2)+(1,1.5)$) (B) {#4};
      \node at ($(#2)+(2,0)$) (C) {#5};
      \draw[->] (A) edge["f"] (B);
      \draw[->] (B) edge (C);
      \draw[->] (A) edge (C);
      \end{scope}
}
\begin{document}
  \begin{center}
    \begin{tikzpicture}
        \Triangle[rotate=30](0,0) 0 1 2;
        \Triangle[rotate=-10](2.5,0) 0 1 2;
        \Triangle(5,0) 0 1 2;
    \end{tikzpicture}
  \end{center}
\end{document}

相关内容