在 TikZ 中,对于某个节点 (x),可以使用例如 (x.west) 来引用节点 x 的锚点。如果我尝试手动定义名称中带有“.”的坐标,则此方法不起作用:
\coordinate (x.test) at (4,0);
有没有办法定义一个坐标,使得 (x.text) 引用该坐标?
答案1
是的,你可以用名称中的 来命名坐标(或一般节点).
。但你不会玩得很开心。
在以下解决方案中,我只认为最后一个(明确使用节点 cs)是有效且稳定的解决方案。
- 很烦人。
- 可能会造成混乱,因为
.
现在是一个字母,并且可以在宏名称中使用(还有一种替代方法是使其.
活跃,这实际上可能会节省时间)。 - 不仅写起来更简单,而且对其他人来说也毫不含糊。
\documentclass{article}
\usepackage{tikz}
\tikzset{no anchors/.code={\catcode`\.=11\relax}}
\begin{document}
\begin{tikzpicture}
\coordinate (x.test) at (4,0);
% 1. Hide the dot from TikZ parser.
\node[shift=(up:2)] (no dot) at ({{{{x.test}}}}) {no dot};
% 2. “Disguise” the dot as a different character
\draw {[no anchors] (x.test) } -- (no dot.south);
% 3. Explicitly use the node cs.
\draw (0,4) -- (node cs: name = x.test);
\end{tikzpicture}
\end{document}
如果你想在现存的您可以使用节点append after command
或图片作为我在另一个回答中提到过(不过,如果你可以接受x-test
使用它,那就容易多了)。
我们还可以向普通节点添加新的锚点,就像我在另一个采用相同策略的答案。
如果您还想使用这些锚点来放置节点,则需要做更多的工作,但我相信这可以很简单地解决。
但为此,我需要了解您的实际用例。
答案2
你问的是
有没有办法定义一个坐标,使得 (x.text) 引用该坐标?
从技术上来说,是的。您可以重新定义(我希望是局部定义)形状coordinate
以使其具有test
锚点。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\makeatletter
\pgfdeclareshape{coordinate}
{
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by -.5\dp\pgfnodeparttextbox%
}
\anchor{center}{\centerpoint}
\anchor{test}{\centerpoint}
\anchorborder{\centerpoint}
}
\makeatother
\coordinate (x) at (4,0);
\draw (x.test) -- ++ (1,1);
\end{tikzpicture}
\end{document}
但是,我根本不建议使用这种或类似的结构。相反,我想说,最好接受这样一个事实:你不能使用点、逗号、圆括号、方括号、大括号(它们会被解释为大括号)、~
普通美元符号、普通#
s、普通管道、普通%
、和符号,也许还有一些其他符号不起作用。(根据你加载的包,这个列表可能会变得更长。)我个人对空格和下划线确实起作用这一事实感到非常惊讶。有了这些特殊字符,处理 Ti 就非常方便了钾Z.如果您想允许,.
那么要么会有歧义,要么您必须禁止用户使用(node.north)
来指代北锚。