TikZ:节点名称以“。”

TikZ:节点名称以“。”

在 TikZ 中,对于某个节点 (x),可以使用例如 (x.west) 来引用节点 x 的锚点。如果我尝试手动定义名称中带有“.”的坐标,则此方法不起作用:

\coordinate (x.test) at (4,0);

有没有办法定义一个坐标,使得 (x.text) 引用该坐标?

答案1

是的,你可以用名称中的 来命名坐标(或一般节点).。但你不会玩得很开心。

在以下解决方案中,我只认为最后一个(明确使用节点 cs)是有效且稳定的解决方案。

  1. 很烦人。
  2. 可能会造成混乱,因为.现在是一个字母,并且可以在宏名称中使用(还有一种替代方法是使其.活跃,这实际上可能会节省时间)。
  3. 不仅写起来更简单,而且对其他人来说也毫不含糊。
\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)来指代北锚。

相关内容