在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就非常方便了kZ. 如果您想允許,.
那麼要么會出現歧義,要么您必須禁止用戶使用(node.north)
指向北錨點。