我正在尝试使用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”。
因此我使用普通参数(\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}