Passando uma macro para uma declaração de vetor em tikz/pgf

Passando uma macro para uma declaração de vetor em tikz/pgf

Inspirado por uma resposta que dei aqui, surgiu a questão de como preciso definir corretamente uma macro, se quiser passá-la para uma declaração de vetor no tikz.

Se quiser modificar um vetor, a sintaxe usada é basicamente x={(1,-0.5,0)}. Se eu quiser colocar em uma macro, como deve ficar a definição, para não causar problemas com as chaves?

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

Responder1

Existem dois problemas:

  • \{e \}não são chaves de argumento.
  • O TikZ precisa saber que tipo de objeto segue, portanto não pode ser escondido em uma macro.

O exemplo a seguir expande primeiro o argumento opcional de \drawpara resolver o último problema. Durante a definição, the \{é redefinido para substituir \{...\}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

Se houver algum grau de liberdade, como xvecé fornecido, então poderia ser definido como coordenada, por exemplo:

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

informação relacionada