如何在 TikZ 装饰选项中使用宏

如何在 TikZ 装饰选项中使用宏

我想使用宏来设置边缘的装饰选项,如下所示:

\def\curlbl{text along path,text={hi}}
\newcommand{\myedge}[2]{%
 \path (#1) edge[decorate, decoration={\curlbl}] (#2);
}

然而,这并没有按我预期的方式工作,并且我收到了一个我无法理解的错误:

./minimal.tex:12: Package pgfkeys Error: I do not know the key '/pgf/decoration/\pgfkeyscurrentname ' and I am going to ignore it. Perhaps you misspelled it.

这是我的 tex 文件:

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{positioning,decorations.text}
\begin{document}
\def\curlbl{text along path,text={hi}}
\newcommand{\myedge}[2]{%
 \path (#1) edge[decorate, decoration={\curlbl}] (#2);%
}

\begin{tikzpicture}
  \node (A) {\emph{A}};
  \node[below left=10ex and 6ex of A] (B) {\emph{B}};
  \myedge{A}{B};
\end{tikzpicture}

\end{document}

是否可以使用宏来设置 TikZ 的选项decoration

答案1

这就是所谓的扩展问题:当 TiZ 解析路径,你的宏尚未展开。当然,这个问题当然可以用各种方式解决。一个可以说是相当优雅的方式,只要你坚持使用这种方式使用宏的总体策略,就是告诉 TiZ 展开\curlbl。这可以通过使用 键来实现.expanded

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{positioning,decorations.text}
\begin{document}
\def\curlbl{text along path,text={hi}}
\newcommand{\myedge}[2]{%
 \path (#1) edge[decorate, decoration/.expanded={\curlbl}] (#2);%
}

\begin{tikzpicture}
  \node (A) {\emph{A}};
  \node[below left=10ex and 6ex of A] (B) {\emph{B}};
  \myedge{A}{B};
\end{tikzpicture}
\end{document}

在此处输入图片描述

我强烈怀疑,如果你向我们提供完整的图片,将会有更多 Ti实现这一点的 Zy 方式。由于不知道详细信息,目前我只能提请您注意pgfmanual 第 889 页中描述的键is if和。is choice

相关内容