
次のようなことを実行するための推奨/標準/通常の方法があるはずです (提案されていること)。
\begin{tikzpicture}
\node (tikzpicture0) at (0pt,100pt) []{
\begin{tikzpicture}
\ABSOLUTE-AND-CONTEXT-AWARE-node (node00) at (0pt,0pt) []{(0pt,0pt)};
\node (node01) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\node (tikzpicture1) at (100pt,200pt) []{
\begin{tikzpicture}
\node (node10) at (0pt,0pt) []{(0pt,0pt)};
\node (node11) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\node (tikzpicture2) at (200pt,300pt) []{
\begin{tikzpicture}
\node (node20) at (0pt,0pt) []{(0pt,0pt)};
\node (node21) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\draw[->] (node00)--($(node10)+(100pt,200pt)$);
\end{tikzpicture}
ここで、ABSOLUTE は、(node00) が定義されている tikzpicture の外部から参照できることを意味し、AND-CONTEXT-AWARE は、囲んでいる tikzpicture の座標 (0pt,100pt) がノードの座標 (0pt,0pt) に追加されることを意味します。
もちろん、コードは
\begin{tikzpicture}
\node (tikzpicture0) at (0pt,100pt) []{
\begin{tikzpicture}
\node (node00) at (0pt,0pt) []{(0pt,0pt)};
\node (node01) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\node (tikzpicture1) at (100pt,200pt) []{
\begin{tikzpicture}
\node (node10) at (0pt,0pt) []{(0pt,0pt)};
\node (node11) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\node (tikzpicture2) at (200pt,300pt) []{
\begin{tikzpicture}
\node (node20) at (0pt,0pt) []{(0pt,0pt)};
\node (node21) at (0pt,10pt)[]{(0pt,10pt)};
\end{tikzpicture}
};
\draw[->] (node00)--($(node10)+(100pt,200pt)$);
\end{tikzpicture}
収穫
意図した図は(ハードコードされた座標で取得された)図のようになるはずである
おすすめは何ですか?
答え1
一般的なアドバイスとしては、ネストtikzpicture
された を使用しないことです。代わりに を使用して同じことを行うことができますscope
。以下のコードでは、ノードを区別するためだけにいくつかの名前をノードに追加しました。コードの末尾の矢印は、そのエンドポイントが ではnode10
なくから派生しているため、ハードコードされた図の矢印と同じではありません。代わりにnode01
を使用して、赤で矢印を追加しましたnode01
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (node00) at (0pt,0pt) []{N00:(0pt,0pt)};
\node (node01) at (0pt,10pt)[]{N01:(0pt,10pt)};
\begin{scope}[shift={(100pt,200pt)}]
\node (node10) at (0pt,0pt) []{N10:(0pt,0pt)};
\node (node11) at (0pt,10pt)[]{N11:(0pt,10pt)};
\end{scope}
\begin{scope}[shift={(200pt,300pt)}]
\node (node20) at (0pt,0pt) []{N20:(0pt,0pt)};
\node (node21) at (0pt,10pt)[]{N21:(0pt,10pt)};
\end{scope}
\draw[->] (node00)--($(node10)+(100pt,200pt)$) node[anchor=west]{(N10)+(100pt,200pt)};
\draw[red,->] (node00)--($(node01)+(100pt,200pt)$);
\end{tikzpicture}
\end{document}
答え2
私が正しく理解しているなら、あなたの概念には問題があります。次のケースを見てみましょう。
\begin{tikzpicture}
\node at (10,10) {This was 10, 10};
\node at (15,15) {This was 15, 15};
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
これにより、
注目すべき点がいくつかあります。結果として得られるボックスは、原点から最も遠い距離にあるにもかかわらず、サイズが 15x15 ではありません。また、テキストの長さのため、5x5 でもありません。
したがって、境界ボックスを事前に修正しない限り、最終的なキャンバスに対してノードが絶対的にどこにあるかを見つけることはできません。残りの解決策は、ノードの配置をハッキングし、現在の境界ボックスの値と自己サイズを含めて、それに応じてすべてを更新することです。それでも、今何かを配置すると、(-2,-2)
境界ボックスが突然 17 x 17 になるので、すべてのノード値を更新する必要があります。したがって、ノードの配置は、画像全体がタイプセットされるまで延期する必要があります。そして、スケーリングや変換などの変換にはまだ触れていません。
したがって、私の意見では、これは単純な操作ではうまくいかないでしょう。私は一般的なマントラを繰り返します。TikZ 画像をネストしないでください。常に別の方法があります。
この方向へ向かう動機となった実際の問題(それが何であれ)は、おそらく次の答えで解決できるでしょう。tikz 座標をテキスト ファイルにエクスポートできますか?2 パス ソリューションを使用します。