通过宏设置 TikZ 中坐标系的极坐标

通过宏设置 TikZ 中坐标系的极坐标

问题

我想做与以下相当的事情:

\def\setX{{(0:1cm)}}
\tikzset{x=\setX}

“可调试”代码(它无法运行,因为我按照我想要的方式放置它。\setX里面的内容\tikzset使它无法编译):

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}
    \def\setX{(0:1cm)}
    \tikzset{
      x={\setX},y={(50:0.7cm)},z={(90:1cm)}
    }
    \draw[->] (0,0,0) --++ (1,0,0) node[right]{$x$};
    \draw[->] (0,0,0) --++ (0,-1,0) node[right]{$y$};
    \draw[->] (0,0,0) --++ (0,0,1) node[right]{$z$};
  \end{tikzpicture}
\end{document}

动机

在兔子洞里呆了几个小时后不是弄清楚如何在 3d tikzpicture 中切换轴,我很好奇为什么这不起作用。这无疑是某种pgfkeys魔法造成的。

答案1

这是关于扩展键值。x/.expand once=\setX为键写入。它必须明确查看内容,否则它会抱怨。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}
    \def\setX{(0:1cm)}
    \tikzset{
      x/.expand once=\setX,y={(50:0.7cm)},z={(90:1cm)}
    }
    \draw[->] (0,0,0) --++ (1,0,0) node[right]{$x$};
    \draw[->] (0,0,0) --++ (0,-1,0) node[right]{$y$};
    \draw[->] (0,0,0) --++ (0,0,1) node[right]{$z$};
  \end{tikzpicture}
\end{document}

enter image description here

相关内容