在 tikz-qtree 中恢复 qtree 间距

在 tikz-qtree 中恢复 qtree 间距

是否有可能实现tikz-qtree与原始qtree包中相同的节点间距?比较两者:

配额树:

配额树

tikz-qtree:

tikz-qtree

同一层级的节点间距应该相同。另外,我有点不喜欢边的长度取决于内容(参见点与 Z)。

我使用它的原因tikz-qtree是我有一棵树,其中有一个超过 5 个分支的节点,它qtree不支持。

编辑:以及树代码:

\documentclass{article}

\usepackage{amsmath}   
\usepackage{tikz}
\usepackage{tikz-qtree}
% or \usepackage{qtree}

\newcommand{\bftt}[1]{\textbf{\texttt{#1}}}
\newcommand{\ts}[1]{\bftt{#1}}

\begin{document}

    \Tree [.$Z$ \ts{(} [.$Z$ \ts{.} [.$Z$ \ts{(} [.$Z$ $\epsilon$ ] \ts{)} [.$Z$ $\epsilon$ ] ] ] \ts{)} [.$Z$ $\epsilon$ ] ]

\end{document}

答案1

很难复制qtree间距,tikz-qtree因为后者的包使用完全不同的节点间距方法;大多数情况下,这会导致树看起来更好,尤其是对于语言学,这是它的预期用途。您可以通过将其内容括在显式命令中\node并指定宽度来手动平衡特定节点。不平衡是由于第一级节点的宽度差异很大。参见如何使该 qtree 居中?类似的问题。对于节点大小问题,我使用了 egreg 的\phantom解决方案。

\documentclass{article}

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


\newcommand{\bftt}[1]{\textbf{\texttt{#1}}}
\newcommand{\ts}[1]{\bftt{#1}\protect\vphantom{$A$}}

\begin{document}
\begin{tikzpicture}[]
    \Tree [.$Z$ \node[minimum width=1cm]{\ts{(}}; [.$Z$ \ts{.} [.$Z$ \ts{(} 
    [.$Z$ $\epsilon$ ] \ts{)} [.$Z$ $\epsilon$ ] ] ] \node[minimum width=2cm]
    {\ts{)}}; [.$Z$ $\epsilon$ ] ]
\end{tikzpicture}
\end{document}

tikz-qtree 代码的输出

forest使用包的解决方案

最近的forest软件包提供了相当容易实现这一目标的工具。尽管其主要存在的理由是为了制作更紧凑的树,它也提供了钩子来制作不太紧凑的树。输入语法有点不同:没有.标记节点标签,也没有终端节点必须被封闭在[ ... ]……内

\documentclass{article}

\usepackage{amsmath}   
\usepackage{tikz}
\usepackage{forest}
\newcommand{\bftt}[1]{\textbf{\texttt{#1}}}
\newcommand{\ts}[1]{\bftt{#1}\protect\vphantom{$A$}}

\begin{document}
\forestset{qtree edges/.style={for tree={
parent anchor=south, child anchor=north}}}

\begin{forest}
[$Z$, qtree edges,s sep=1cm [\ts{(}] [$Z$ [\ts{.}] [$Z$ [\ts{(}] [$Z$ [$\epsilon$] ]
[\ts{)}] [$Z$ [$\epsilon$] ] ] ] [\ts{)}] [$Z$ [$\epsilon$] ] ]
\end{forest}
\end{document}

在此处输入图片描述

答案2

文档中tikz-qtree提到了关键点sibling distance;你可以使用如下命令进行全局设置,

\tikzset{sibling distance=1pc}

在序言中或本地针对特定树

\begin{tikzpicture}[sibling distance=1pc]
\Tree [...]
\end{tikzpicture}

对于节点的高度,我建议在定义中放置一个幻影\ts

\documentclass{article}

\usepackage{amsmath}
\usepackage{tikz-qtree}

\newcommand{\bftt}[1]{\textbf{\texttt{#1}}}
\newcommand{\ts}[1]{\bftt{#1}\protect\vphantom{$A$}}

\begin{document}


\begin{tikzpicture}[sibling distance=1pc]
\Tree [.$Z$ \ts{(} [.$Z$ \ts{.} [.$Z$ \ts{(} [.$Z$ $\epsilon$ ] \ts{)}
  [.$Z$ $\epsilon$ ] ] ] \ts{)} [.$Z$ $\epsilon$ ] ]
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容