将宏传递给 tikz/pgf 中的向量声明

将宏传递给 tikz/pgf 中的向量声明

受到我在这里给出的答案的启发,问题出现了,如果我想将宏传递给 tikz 中的向量声明,我需要如何正确定义宏。

如果要修改向量,使用的语法基本上是x={(1,-0.5,0)}。 如果我想将其放入宏中,定义应该是什么样子,才不会引起花括号的问题?

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections,calc}

\begin{document}

\newcommand{\xvec}{\{(1,-0.5,0)\}}

\begin{tikzpicture}

    \draw[thick, x={(1,-0.5,0)}](-1,0,0)--(1,0,0);
    \draw[thick, x=\xvec](-1,0,0)--(1,0,0);

\end{tikzpicture}

\end{document}

答案1

存在两个问题:

  • \{并且\}不是参数括号。
  • TikZ 需要知道接下来是什么类型的对象,因此它不能隐藏在宏中。

下面的例子首先扩展了 的可选参数来 \draw解决后一个问题。在定义过程中, 被重新定义为\{来替换:\{...\}{...}

\documentclass[tikz,border=3mm]{standalone}

\begin{document}

\newcommand{\xvec}{\{(1,-0.5,0)\}}

\begin{tikzpicture}

    \draw[thick, x={(1,-0.5,0)}](-1,0,0)--(1,0,0);
    \begingroup
      \def\{#1\}{{#1}}
    \edef\x{\endgroup
      \noexpand\draw[thick, x=\xvec]%
    }\x(-1,0,0)--(1,0,0);

\end{tikzpicture}

\end{document}

结果

如果存在某种自由度,那么如何xvec提供,则可以将其定义为坐标,例如:

\documentclass[tikz,border=3mm]{standalone}

\begin{document}
\begin{tikzpicture}

    \draw[thick, x={(1,-0.5,0)}](-1,0,0)--(1,0,0);

    \coordinate (xvec) at (1, -0.5, 0);

    \draw[thick, x=(xvec)](-1,0,0)--(1,0,0);

\end{tikzpicture}
\end{document}

相关内容