將巨集傳遞給 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}

相關內容