使用 tikz-calc 添加坐标以及宏

使用 tikz-calc 添加坐标以及宏

我正在尝试使用tikz-calc坐标加法函数自动计算自定义宏中的坐标($ (x,y) + (a,b) $)。当我尝试添加本身是宏输出的坐标时,事情似乎出了问题。例如,我不明白为什么在这个 MWE 中,前三个坐标绘制得很好,但其他两个(注释)却不行。

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
    \def\trig(#1)(#2){ ( {(#2)*cos(#1)}, {(#2)*sin(#1)} ) }

    \node at (0,3) {hi};
    \node at \trig(70)(2) {hi};
    \node at ($ (0,3) + (3,0) $) {hi};
%   \node at ($ (0,3) + \trig(70)(2) $) {hi};
%   \node at ($ (0,3) + {\trig(70)(2)} $) {hi};
\end{tikzpicture}

\end{document}

答案1

免责声明这是内部扩展魔法,所以这是我的解释。

我认为扫描表达式时calc明确寻找(),因此

  1. 用作()宏参数的分隔符不是一个好主意,并且
  2. 您必须(在第一级提供,而无需扩展宏。

第一次出现是有效的(我认为),因为它处于顶层...但最好不要冒险。它在代码中被标记为“点 1”。

因此我使用普通参数(\mtrig)定义了一个宏,它提供不带括号的坐标。

无论如何,我认为这只是一个例子,因为 Ti 中可以使用极坐标Z(最后一个红色示例)。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}
    \def\trig#1#2{({#2*cos(#1)}, {#2*sin(#1)})}
    \def\mtrig#1#2{{#2*cos(#1)}, {#2*sin(#1)}}

    \node at (0,3) {hi};
    \node at \trig{70}{2} {hi}; %note 1
    \node[red] at (\mtrig{70}{2}) {ha}; % better
    \node at ($ (0,3) + (3,0) $) {hi};
    \node at ($ (0,3) + (\mtrig{70}{2}) $) {hi};
    \node at ($ (0,3) + (\mtrig{70}{2}) $) {hi};
    \node[red] at ($ (0,3) + (70:2) $) {ha};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容