记住嵌套的 tikzpicture 中的坐标指向一个奇怪的地方

记住嵌套的 tikzpicture 中的坐标指向一个奇怪的地方

我无法记住嵌套 tikz 图片中定义的名称的坐标。请看以下最小工作示例:

\documentclass{article}
\usepackage{tikz-qtree}
\newcommand{\inlinenode}[2]{
There are\\
several line\\
breaks\\
#2\tikz[remember picture]\coordinate (#1);\\
and #1 is not\\
in the center}
\begin{document}
\tikzset{every tree node/.style={align=center,anchor=north}}
\begin{tikzpicture}
\Tree [.{Root}
        [.\node{\inlinenode{x1}{$x_1$}}; ]
        [.\node (x2) {$x_2$}; ]
      ]
\path[thick,color=red] (x1) edge (x2);
\end{tikzpicture}
\end{document}

我的最小工作示例的输出

我想使用红线将 x1 与 x2 连接起来,这对 x2 来说很好,但另一端却指向一个奇怪的地方而不是 x1。

我尝试运行pdflatex多次,但x1的位置变得更加奇怪。

我想要实现的效果应该在上图中可见,我想要一个多行节点,在文本中有一个特殊的单词/图形,然后将这个单词连接到另一个节点(或者甚至将另一个特殊单词连接到节点的另一个多行文本中)。请随意修改我的方法。

我也尝试用#2\tikz...\coordinate(#1)\subnode{#1}{#2}例如这个类似的问题),但结果是一样的。

答案1

在 中tikz-qtree,每个子项实际上是一个单独的 pgfpicture。这意味着,当您以这样的方式在子项之间进行绘制时,您是在两个不同的 pgfpicture 之间进行绘制,因此两个都需要应用remember picture密钥。

但是,即便如此,你还是会遇到这样的问题:你将 a 嵌套tikzpicture在 the 内部pgfpicture(而它本身又嵌套在 main 中tikzpicture),因此仅仅将其放在remember picture最外层tikzpicture是行不通的。但这正是\subnode来自tikzmark该库的设计目的在于处理:它定义一个节点的子节点,而无需设置全新的 tikzpicture。

因此使用\subnoderemember picture得到:

\documentclass{article}
%\url{http://tex.stackexchange.com/q/153756/86}
\usepackage{tikz-qtree}
\usetikzlibrary{tikzmark}

\newcommand{\inlinenode}[2]{
There are\\
several line\\
breaks\\
\subnode{#1}{#2} \\
and #1 is not\\
in the center}
\begin{document}
\tikzset{every tree node/.style={align=center,anchor=north}}
\begin{tikzpicture}[remember picture]
\Tree [.{Root}
        [.\node {\inlinenode{x1}{$x_1$}}; ]
        [.\node (x2) {$x_2$}; ]
      ]
\path[thick,color=red] (x1) edge (x2);
\end{tikzpicture}

\end{document}

带有子节点的 tikz-qtree

相关内容