![编辑(现在有 3 个解决方案)](https://linux22.com/image/351497/%E7%BC%96%E8%BE%91%EF%BC%88%E7%8E%B0%E5%9C%A8%E6%9C%89%203%20%E4%B8%AA%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%89.png)
我需要使用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
如果稍后只需要绘制箭头,则可以使用tikzmark
with 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}
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}
tikz-qtree
如果你更喜欢坚持使用tikz-qtree
,你应该等着看 Alan Munn 能想出什么。我只用过qtree
和forest
,所以我能做的最好的tikz-qtree
就是
\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}