["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
,为了使用".."
标签的语法,您必须加载quotes
TikZ 的库,即添加\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}