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

問題は2つあります。

  • \{およびは\}引数括弧ではありません。
  • 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}

関連情報