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