Передача макроса в объявление вектора в 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

Есть две проблемы:

  • \{и \}не являются скобками аргумента.
  • 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}

Связанный контент