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}

관련 정보