我已经定义了一个新命令,\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}