![TikZ calc 不接受在 \newcommand 中定义的坐标,如 (x,y) (带括号)](https://linux22.com/image/346180/TikZ%20calc%20%E4%B8%8D%E6%8E%A5%E5%8F%97%E5%9C%A8%20%5Cnewcommand%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E5%9D%90%E6%A0%87%EF%BC%8C%E5%A6%82%20(x%2Cy)%20%EF%BC%88%E5%B8%A6%E6%8B%AC%E5%8F%B7%EF%BC%89.png)
我已经定义了一个新命令,\newcommand{\with}{(1,1)}
因为我想创建一个tikzpicture
具有“参数化”起点并从那里构建所有其他坐标。
但是如果这个新命令在calc
绝缘坐标中使用,就会出现错误:
!扫描 \tikz@cc@parse@factor 的使用时文件结束。
而在正常情况下,它是可以工作的。为什么呢?
\newcommand
不使用括号(在之后添加)的方法总是有效。
\documentclass[tikz, preview=true]{standalone}
\usetikzlibrary{calc}
\newcommand{\without}{1,2}
\newcommand{\with}{(1,1)}
\begin{document}
\begin{tikzpicture}
\node (a) at (\without) {Without calc and command without parentheses: this works};
\node (b) at \with {Without calc and command with parentheses: this works too};
\node (c) at ($(\without)-(0,2)$) {With calc and command without parentheses: this works};
\node (d) at ($\with-(0,2)$) {With calc and command with parentheses: this doesn't work};
\end{tikzpicture}
\end{document}
答案1
关于括号问题,egreg 是正确的,使用$
使得tikz
尝试解析坐标,这意味着寻找(
和,它还会寻找和之间的)
数学运算符+
和,这就是起作用的原因。-
)
(
\expandafter
关于您想要做什么,即创建绘图所依赖的关键坐标。您可以使用命令而不是样式,例如create key coordinates
,使用insert path={(x,y) coordinate (a) ...}
,然后将其用作绘图中的第一件事:
\path[create key coordinates];
然后,您可以用一种单一风格创建任意数量的关键坐标。
平均能量损失
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\tikzset{%
create key coordinates/.style={%
insert path={(1,1) coordinate (a)
%make more coordinates if you wish...
}
}
}
\begin{document}
\begin{tikzpicture}
\path[create key coordinates];
\node[below=5cm] at (a) {This is using the key coordinate `a'};
\draw (0,0) -- ($(a)-(7/2,3*8)$);
\end{tikzpicture}
\end{document}