使用森林格式化特定的終端節點並刪除它們與其父節點之間的線

使用森林格式化特定的終端節點並刪除它們與其父節點之間的線

當使用forest包來繪製語言語法樹,如何防止在特定終端節點及其父節點之間繪製線條,同時仍將它們維護為forest/查看的單獨“節點” TikZ,以便於編程格式化?

以下是所需輸出的範例(使用下面 MWE 中給出的我目前的解決方法產生):

範例所需輸出樹

我目前的解決方法涉及以下需要太多手動幹預的方法:

  • 我透過創建單一節點然後在句法類別(如果存在)與其詞法實現(如果存在)之間強制換行來刪除“終端節點”及其“父節點”之間的行,例如[DP\\the apple]
  • 具有詞彙項的終端節點透過使用xcolor包對它們進行著色來手動修飾這些項(例如[DP\\\textcolor{blue}{the apple}].

理想情況下,我希望能夠以程式設計方式在環境中應用類似以下程式碼的內容forest

for tree={
    if n children=0{
        text=blue
    }{},
}

但是,添加上面的程式碼片段會產生以下不必要的輸出:

範例不需要的輸出樹

我認為解決方案可能與設定一種「詞彙終端節點」(即屬於詞彙類型而不是空或句法類別的終端節點)有關,然後僅將文本修飾應用於該節點類型。但是,我不確定如何在 內執行此操作forest,或者它是否是好的/最佳解決方案。

最小工作範例(目前解決方法)

\documentclass[a4paper]{article}

% ----- Package Imports -----
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
\usepackage[svgnames]{xcolor} % Custom colours
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees

\begin{document}
\begin{forest}
    [CP
        [\phantom{X}]
        [C'
            [C]
            [TP 
                [\phantom{X},name=TP-spec]
                [T'
                    [T\\\textcolor{blue}{$\varnothing_{\text{past}}$},name=TP-head]
                    [VoiceP 
                        [DP\\\textcolor{blue}{Bill}]
                        {\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
                        [Voice' 
                            [Voice\\\textcolor{blue}{$\varnothing_{\text{active}}$}]
                            [VP 
                                [DP]
                                [V'
                                    [V\\{[}FORM preterite{]}\\\textcolor{blue}{ate}]
                                    [DP\\\textcolor{blue}{the apple}]
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
\end{forest}
\end{document}

答案1

應用於no edge節點可防止繪製其父節點的邊緣。

l sep=0on 父節點和on 子節點的組合l=0使它們在垂直方向上彼此靠近。

inner ysep=0如果我另外設定子項(這會使類別和詞彙內容更接近),並透過 TikZ 覆蓋 Forest 的align(將節點內容放入 tabular環境中,從而創建一些額外的垂直空間),我發現結果是最令人滿意的align: \forestset{align/.style={/tikz/align={#1}}}

\documentclass[a4paper]{article}

% ----- Package Imports -----
\usepackage[svgnames]{xcolor} % Custom colours
\usepackage{amsmath, amssymb, amsthm, mathtools} % Math enhancements
\usepackage{newpxtext, newpxmath} % Palatino fonts (load after amssymb)
%\usepackage[style=ieee]{biblatex} % Bibliography
\usepackage[linguistics]{forest} % Linguistic syntax trees

\forestset{align/.style={/tikz/align={#1}}}

\begin{document}
\begin{forest}
  for tree={
    if n children=1{
      l sep=0,
      for 1={no edge, l=0, inner ysep=0, blue}
    }{},
  }
    [CP
        [\phantom{X}]
        [C'
            [C]
            [TP 
                [\phantom{X},name=TP-spec]
                [T'
                    [T[$\varnothing_{\text{past}}$,name=TP-head]]
                    [VoiceP 
                        [DP[Bill]
                          {\draw[->] () to[out=south west,in=west,distance=2cm] (TP-spec);}
                        ]
                        [Voice' 
                            [Voice[$\varnothing_{\text{active}}$]]
                            [VP 
                                [DP]
                                [V'
                                    [V\\{[}FORM preterite{]}[ate]]
                                    [DP[the apple]]
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
\end{forest}
\end{document}

修改對排版樹的影響

相關內容