coordinate
为什么选项在名称后面就看不到?nodes
选项在名称后面还是前面都没有区别。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,3) -- ++(5,0) node (A) [midway] (A) {};
\draw (0,2) -- ++(5,0) node (B) [midway] {};
\draw (0,1) -- ++(5,0) coordinate [midway] (C);
\draw (0,0) -- ++(5,0) coordinate (D) [midway];
\foreach \C in {A,B,C}
\fill (\C) [green!70!black] circle [radius=1pt] node [above] {\C\ is ok};
\fill (D) [red!70!black] circle [radius=1pt] node [above] {D is not};
\fill (2.5,0) [green!70!black] circle [radius=1pt] node [above] {D};
\end{tikzpicture}
\end{document}
该点D
应该和其他点一样位于线的中间,但似乎coordinate
看不到该midway
选项。我猜原因是 TikZ 解析坐标的方式(以 ? 开头,coor…
以 ? 结尾…)
),但我想知道这是否是一个错误,应该报告...
答案1
我猜原因在于 TikZ 解析坐标的方式(以 ? 开头,以?
coor…
结尾…)
)[…]
什么是coordinate
?
坐标只不过是node
一个除了一个坐标之外没有其他任何内容的形状(.center
锚点与所有其他锚点相同)。
TikZ 如何工作?
它会扫描整个过程\path
并寻找关键词或\futurelet
s 和ifnextchar
s 组合中的字符序列。
如果遇到 ,c
它会测试是否为 ,i
否则circle
它必须(应该)是 ,h
否则它必须为 。它测试是否还有另一个 ,否则它必须为。child
o
o
cos
如果一切正常(即co
没有以下内容o
)\tikz@coordinate
就会被调用。
% Syntax for coordinates:
% coordinate[options] (coordinate name) at (point)
% where ``at (point)'' is optional
\def\tikz@coordinate ordinate{%
\pgfutil@ifnextchar[{\tikz@@coordinate@opt}{\tikz@@coordinate@opt[]}}
\def\tikz@@coordinate@opt[#1]{%
\pgfutil@ifnextchar({\tikz@@coordinate[#1]}
{\tikz@fig ode[shape=coordinate,#1]{}}}%}
\def\tikz@@coordinate[#1](#2){%
\pgfutil@ifnextchar a{\tikz@@coordinate@at[#1](#2)}
{\tikz@fig ode[shape=coordinate,#1](#2){}}}
\def\tikz@@coordinate@at[#1](#2)a{%
\pgfutil@ifnextchar t{\tikz@@coordinate@@at[#1](#2)a}%
{\tikz@fig ode[shape=coordinate,#1](#2){}a}%
}
然后,宏\tikz@coordinate
(吞噬ordinate
)检查[
(或假设无选项坐标,因此为空[]
)。TikZ 仅允许此时coordinate [optional arguments] (optional name)
(以及at
我现在将省略的末尾部分)。如果找到此序列(有或没有at
),则使用绝对最终(空)节点文本(无论如何在 的情况下都会被忽略)创建一个实际节点coordinate
。
节点文本{}
在路径中的节点路径运算符上绝对是最终的。此后,使用的每个选项都将应用于路径(例如[draw]
)。在您的示例中[midway]
,为路径设置了(无论如何,这是默认值),并且仅适用于路径运算符(如--
)和目标坐标之间的节点/坐标。
宏\tikz@fig ode
的工作方式略有不同,因为它始终测试选项[
、名称(
和位置at
。这些可以自由混合,因为它的工作方式类似于以 结尾的整个路径;
。
另一种看待它的方式是使用:
\draw (0,1) -- ++(5,0) coordinate [midway, red] (C);
\draw (0,0) -- ++(5,0) coordinate (D) [midway, red];
在第一行中,坐标(没有路径)将是红色的,在第二种情况下,路径是红色的,就像您写的一样\draw[red]
。
[…] 但我想知道这是否是一个错误并且应该被报告……
那么,如何表示coordinate
路径操作的结束呢?TikZ 定义
… coordinate [<options>] (<name>) at (<position>) …
^ ^ ^ ^ ^ ^ ^
rest of path specifies a coord. optional optional optional rest of path
完全按照这个顺序,其中一个可选序列是坐标的最后部分。它甚至不允许
coordinate at (<somewhere>) [<options>] (<name>)
但确实如此
node[shape=coordinate] at (<somewhere) [<options>]
(<name>) [<other options>] (<overwriting the previous set name>) {}