
Вдохновленный ответом, который я дал здесь, возник вопрос, как мне правильно определить макрос, если я хочу передать его в объявление вектора в 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}