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)

関連情報