Pasar una macro a una declaración de vector en tikz/pgf

Pasar una macro a una declaración de vector en tikz/pgf

Inspirado por una respuesta que di aquí, surgió la pregunta de cómo necesito definir correctamente una macro, si quiero pasarla a una declaración de vector en tikz.

Si deseas modificar un vector, la sintaxis utilizada es básicamente x={(1,-0.5,0)}. Si quiero ponerlo en una macro, ¿cómo debe verse la definición para no causar problemas con las llaves?

\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}

Respuesta1

Hay dos problemas:

  • \{y \}no son llaves de argumento.
  • TikZ necesita saber qué tipo de objeto sigue, por lo que no se puede ocultar en una macro.

El siguiente ejemplo amplía primero el argumento opcional de \drawpara resolver el último problema. Durante la definición, \{se redefine para reemplazarlo \{...\}por {...}:

\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}

Resultado

Si hay algún grado de libertad, como xvecse proporciona, entonces podría definirse como coordenada, por ejemplo:

\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}

información relacionada