记得图片不能与森林和 tikzmark 的子节点一起使用

记得图片不能与森林和 tikzmark 的子节点一起使用

根据tikzmark文档,使用时\subnode,应

可以使用普通节点语法(在 内tikzpicture)来访问此信息。因此,之后\node {a \subnode{a}{sub} node};可以将其用作a节点。

阅读文档后,使用\subnode绘制树时可以按我预期的方式工作,tikz-qtree但使用 绘制树时则不行forest

此代码根据需要生成以下树。

\documentclass[varwidth=\maxdimen, border=5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{tikz-qtree}
\tikzset{every tree node/.style={align=center, anchor=north}}

\begin{document}
\begin{tikzpicture}[remember picture]
\Tree
[.TP
  [.NP \edge[roof]; {someone} ]
  [.T$'$
    [.\node(T){T};  ]
    [.VP
      [.V$'$
        [.V\\\subnode{eat}{eat}\\{\ldots}\\{\ldots} ]
        [.NP \edge[roof]; {the pie} ]
      ]
    ]
  ]
]
\draw[->] (T) to[in=-180, out=-75] (eat);
\end{tikzpicture}

\end{document}

在此处输入图片描述

而此代码会生成下面的树,这是我们所不希望的。

\documentclass[varwidth=\maxdimen, border=5pt]{standalone}

\usepackage[linguistics]{forest}
\usetikzlibrary{tikzmark}

\begin{document}
\begin{forest} remember picture
[TP
  [NP
    [someone, roof]
  ]
  [T$'$
    [T, name=T]
    [VP
      [V$'$
        [V\\\subnode{eat}{eat}\\\ldots\\\ldots]
        [NP
          [{the pie}, roof]
        ]
      ]
    ]
  ]
]
\draw[->] (T) to[in=-180, out=-75] (eat);
\end{forest}

\end{document}

在此处输入图片描述

似乎forest没有选择该remember picture选项,那么我是否应该以不同的方式进行设置?如果是,该怎么做?

答案1

这总是有点棘手,因为有两个独立的“记忆”机制在起作用。因此,您可能只需使用两个子项并以通常的方式(即使用图片)将它们连接起来即可overlay,remember

\documentclass[varwidth=\maxdimen, border=5pt]{standalone}

\usepackage[linguistics]{forest}
\usetikzlibrary{tikzmark}

\begin{document}
\begin{forest} 
[TP
  [NP
    [someone, roof]
  ]
  [T$'$
    [\subnode{T}{T}]
    [VP
      [V$'$
        [V\\\subnode{eat}{eat}\\\ldots\\\ldots]
        [NP
          [{the pie}, roof]
        ]
      ]
    ]
  ]
]
\end{forest}
\begin{tikzpicture}[overlay,remember picture]
\draw[->] (T) to[in=-180, out=-75] (eat);
\end{tikzpicture}
\end{document}

在此处输入图片描述

另一种可能性是仅使用\subnodes来测量相对位置。这样可以消除偏移误差。不过,必须考虑inner sep

\documentclass[varwidth=\maxdimen, border=5pt]{standalone}

\usepackage[linguistics]{forest}
\usetikzlibrary{tikzmark}

\begin{document}
\begin{forest} 
[TP
  [NP
    [someone, roof]
  ]
  [T$'$
    [T, name=T]
    [VP
      [V$'$
        [\subnode{V1}{V}\\\subnode{eat}{eat}\\\ldots\\\ldots,name=V]
        [NP
          [{the pie}, roof]
        ]
      ]
    ]
  ]
]
\draw[->] let \p1=($(V1.north west)-(eat.west)$) in  
(T) to[in=-180, out=-75] ($(V.north west)+(0,-\y1-\pgfkeysvalueof{/pgf/inner
ysep})$);
\end{forest}

\end{document}

在此处输入图片描述

相关内容