
在此示例中
\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 1);
\coordinate (c) at ($(a) + (b)$);
\coordinate (d) at ($(a)!0.5!(c)$);
\end{tikzpicture}
\end{document}
可以\coordinate(c)
通过定义\coordinate(d)
为来消除
\coordinate (d) at ($(a)!0.5!((a) + (b))$);
这种替代不起作用:
! Package pgf Error: No shape named (a is known.
如何重写 的表达式\coordinate(d)
而不重复\coordinate(c)
?
答案1
您可以使用:
\coordinate (d) at ($(a)!0.5!($(a) + (b)$)$);
下面第一张图片使用
\coordinate (c) at ($(a) + (b)$);
\coordinate (d) at ($(a)!0.5!(c)$);
而第二种方法使用上面提到的计算,不需要中间(c)
坐标。
代码:
\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 1);
\coordinate (c) at ($(a) + (b)$);
\coordinate (d) at ($(a)!0.5!(c)$);
\node at (a) {a};
\node at (b) {b};
\node at (d) {d};
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 1);
\coordinate (d) at ($(a)!0.5!($(a) + (b)$)$);
\node at (a) {a};
\node at (b) {b};
\node at (d) {d};
\end{tikzpicture}
\end{document}
答案2
一个小评论:因为0.5 a + 0.5 ( a + b ) =a + 0.5 b
,你也可以这样做
\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (0, 0);
\coordinate (b) at (1, 1);
\coordinate (d) at ($1*(a)+0.5*(b)$);
\foreach \X in {a,b,d}
\node at (\X){\X};
\end{tikzpicture}
\end{document}
也就是说,calc
允许您对坐标进行任意线性组合。