如何制作具有笔直骨架或脊柱的树?

如何制作具有笔直骨架或脊柱的树?

我是一个新的/初学者 LaTeX 用户,我想制作具有直脊的句法树,有点像这里的:

http://tanvirdhaka.blogspot.com/2010/01/phrase-structure-grammar.html

可以使用 tikz-qtree 完成此操作吗?这是我至今一直在使用的。

编辑:感谢这里的一些回复。我想我有两个问题。第一个“问题”是,当我创建一棵树时,一些树枝(有空节点或叶子)是不均匀的(有角度),因此看起来有点难看。我附上了一些原始代码来说明我的意思。但我认为下面的回复可能会帮助我解决这个问题。

\documentclass[10pt]{article}

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

\begin{document}

\begin{tikzpicture}
\Tree % Ugly tree with uneven branches and different lengths
[.CP 
[.{} ]
[.C$'$ 
    [.C ]
    [.(?) 
[.Neg ]         
[.TP
    [.{} ]
    [.T$'$ 
        [.T ] 
        [.\textit{v}P 
        [.AGENT ]
        [.\textit{v}$'$
            [.\textit{v} ] 
                [.VP 
                [.V ] 
                [.THEME ] ] ] ] ] ] ] ] ] ] ] ] ]
\end{tikzpicture}

\end{document}

我的第二个问题是如何制作一棵从上到下具有连续笔直脊柱的树(请参阅上面我原帖中的第二个链接)。有人知道如何做到这一点吗?

答案1

包裹forest(基于图形包tikz-pgf) 可以按如下所示进行配置,为您提供具有对称二进制分支的直脊树。我从您的 MWE 中取出了中间投影(条形级别)标签,以按照您的要求显示通过空节点的直线。

enter image description here

\documentclass[10pt]{article}

\usepackage{tikz}
\usepackage{forest}
\forestset{sn edges/.style={for tree={parent anchor=south, child anchor=north}}}
\forestset{nice empty nodes/.style={for tree={calign=fixed edge angles},
        delay={where content={}{shape=coordinate, for parent={for children={anchor=north}}}{}}}}

\usepackage{times}

\begin{document}

\begin{forest}
sn edges, nice empty nodes
[CP 
    []
    [
        [C ]
         [(?) 
            [Neg ]         
            [TP
                [ ]
                [
                    [T ] 
                    [\textit{v}P 
                        [AGENT ]
                        [
                            [\vphantom{V}\textit{v} ] % the \vphantom{V} makes the height of the little v node the same as the VP node; without it, the branch to the little v goes too low
                            [VP 
                                [V ] 
                                [THEME ]
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
]                                   
\end{forest}

\end{document}

样式sn edges(获取到达父节点下方的分支)和nice empty nodes(获取直脊和平衡的空节点)取自forest,但请注意,对于某些字体,使用这些样式可能会导致错误,如我的答案森林中的 sn 边和漂亮的空节点样式导致除以零

获得直脊树的另一种方法是直接在 中制作它们tikz,如图所示这个答案制作包含和不包含文本节点的混合树

答案2

tikz-qtree可以通过明确设置叶节点与树根之间的距离来创建此类图。此类图的最小工作示例如下:

\documentclass{article}

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

\begin{document}

% >>> Specify the "frontier"/leaf-level distance from root:
\tikzset{frontier/.style={distance from root=120pt}}

\Tree [.S   [.NP    [.Det The ]
            [.N Man ] ]
        [.VP    [.V captured ]
            [.NP    [.Det a ] 
                [.N bird ] ] ] ]

\end{document}

这使用了tikz-qtree文档在第 5 页。

结果显示如下:

diagram

答案3

forest是构建句法树的另一种选择。在其文档摘要中,您可以阅读:

Forest 是一个基于 pgf/TikZ 的软件包,用于绘制语言树(和其他类型的树)。其主要特点是:(i) 可以生成非常紧凑的树的打包算法;(ii) 用户友好的界面,由熟悉的树括号编码以及用于选项设置的键值界面组成;(iii) 多种树格式选项,可控制各个节点的选项值及其操作机制;(iv) 可以使用 pgf/TikZ 的全部功能来装饰树;(v) 对代码更改敏感的外部化机制。

前面用 forest 输入的示例是:

\documentclass[border=10pt]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
    where n children=0{tier=word}{}
    [S 
        [NP 
            [Det [The]] 
            [N [Man]]
        ]
        [VP 
            [V [captured]]
            [NP 
                [Det [a]]
                [N [bird]]
            ]
        ]
    ]
\end{forest}
\end{document}

enter image description here

答案4

另一种方式tikz

enter image description here

代码

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
 [
% Children and edges style
    edge from parent/.style={very thick,draw=black!70},
    level 1/.style={sibling distance=5.5cm, growth parent anchor=south,},
    level 2/.style={sibling distance=3.5cm},
    level 3/.style={sibling distance=3.5cm},
    level 4/.style={sibling distance=3.5cm}
    ]
%% Draw events and edges
 \node (g1) [] {S}
            child{node (e1) {NP}  % left branch
                child {node (e11) {Det}
                          child[level distance=3.25cm]{node{The}}}
                child {node (e13) {N}
                          child[level distance=3.25cm]{node{Man}}}
                    }
            child {node (e2) {VP} % right branch
                      child {node (e21) {V}
                          child[level distance=3.25cm]{node( ){captured}}
                           }
                     child {node (e32) {NP}
                          child {node (e11) {Det}  child{node(a){a}}}
                          child {node (e13) {N}    child{node(b) {bird}}}
}
};  
\end{tikzpicture}

相关内容