编辑(现在有 3 个解决方案)

编辑(现在有 3 个解决方案)

我需要使用tikz-qtree而不是qtree,但我注意到树木参差不齐,令人烦恼。比较以下使用 创建的树tikz-qtree

% !TEX TS-program = latex
\documentclass[11pt]{article}
\usepackage{tikz, tikz-qtree, pst-node, pst-asr, graphicx}
\tikzset{every tree node/.style={align=center, anchor=north}}
%\usepackage{qtree}

\begin{document}

\Tree [  [  [ $\sqrt{\textsc{Root}}$ {\scshape Voice} ] [.{\scshape Asp} ] ] [.{\scshape Tns} ] ]

\end{document}

在此处输入图片描述

使用以下内容创建qtree

% !TEX TS-program = latex
\documentclass[11pt]{article}
%\usepackage{tikz, tikz-qtree, pst-node, pst-asr, graphicx}
%\tikzset{every tree node/.style={align=center, anchor=north}}
\usepackage{qtree}

\begin{document}

\Tree [.  [.  [.  $\sqrt{\textsc{Root}}$ {\scshape Voice} ] [.{\scshape Asp} ] ] [.{\scshape Tns} ] ]

\end{document}

在此处输入图片描述

是否有可能编译出与tikz-qtree那些一样好的树qtree

答案1

编辑(现在有 3 个解决方案)

qtree+tikzmark

如果稍后只需要绘制箭头,则可以使用tikzmarkwith qtree。至少,下面的方法似乎有效:

\documentclass{article}
\usepackage{qtree,tikz}
\usetikzlibrary{tikzmark,calc}
\begin{document}
  \Tree [  [  [ {\tikzmark{a}$\sqrt{\textsc{Root}}$\tikzmark{b}} {\scshape Voice} ] [.{\scshape Asp} ] ] [.{\scshape {\tikzmark{c}Tns\tikzmark{d}}} ] ]
\begin{tikzpicture}[overlay, remember picture]
  \draw [->, shorten >=5pt, shorten <=5pt] ($(pic cs:a)!1/2!(pic cs:b)$) .. controls +(1,-2) and +(-1,-2) .. ($(pic cs:c)!1/2!(pic cs:d)$);
\end{tikzpicture}
\end{document}

<code>qtree</code> + <code>tikzmark</code>

forest

我也会使用 Forest,但绝对推荐linguistics提供现成nice empty nodes合适边缘的库。要对齐终端节点,您可以添加宽度为零但高度合适的幻影。

例如,

\documentclass{standalone}
\usepackage[linguistics]{forest}
\begin{document}
\begin{forest}
  nice empty nodes,
  for tree={
    font=\scshape,
  },
  before typesetting nodes={
    where n children=0{
      +content=\makebox[0pt]{\phantom{$\sqrt{X}$}},
    }{}
  }
  [
    [
      [
        [$\sqrt{\textsc{Root}}$]
        [Voice]
      ]
      [Asp]
    ]
    [Tns]
  ]
\end{forest}
\end{document}

带有 <code>linguistics</code> 库的森林

tikz-qtree

如果你更喜欢坚持使用tikz-qtree,你应该等着看 Alan Munn 能想出什么。我只用过qtreeforest,所以我能做的最好的tikz-qtree就是

<code>tikz-qtree</code> 努力

\documentclass[border=10pt]{standalone}
\usepackage{tikz-qtree}
\begin{document}
\newlength\widesttreenodewidth
\settowidth{\widesttreenodewidth}{$\sqrt{\textsc{Root}}$}
\newlength\highesttreenodeht
\settoheight{\highesttreenodeht}{$\sqrt{\textsc{Root}}$}
\newlength\deepesttreenodedpth
\settodepth{\deepesttreenodedpth}{$\sqrt{\textsc{Root}}$}
\tikzset{
  every tree node/.append style={text width=\widesttreenodewidth, text depth=\deepesttreenodedpth, text height=\highesttreenodeht, text centered},
  execute at begin node=\makebox[0pt]{\phantom{$\sqrt{X}$}},
}
\Tree [  [  [ $\sqrt{\textsc{Root}}$ {\scshape Voice} ] [.{\scshape Asp} ] ] [.{\scshape Tns} ] ]
\end{document}

笔记

Forest 确实需要花费一些时间来学习,而且语法也有点不同,所以在一个大型项目即将结束、截止日期迫在眉睫的时候,肯定不适合尝试。

答案2

不是qtree,也不是tikz-qtree,但是forest:):

\documentclass[11pt]{article}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={% style of tree
  font=\scshape,
  anchor=base,
  calign=fixed edge angles,
  delay={where content={}{shape=coordinate}{}},
  inner sep=1pt,
}
[
  [
    [
     [$\sqrt{\textsc{Root}}$] [Voice]
    ]
    [Asp]
  ]
  [Tns]
]
\end{forest}
\end{document}

在此处输入图片描述

相关内容