特定の終端ノードをフォーマットし、フォレストを使用してそれらの親ノードとの間の線を削除します。

特定の終端ノードをフォーマットし、フォレストを使用してそれらの親ノードとの間の線を削除します。

使用する場合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=0親ノードの とl=0子ノードのを組み合わせると、それらのノードが垂直方向に近づきます。

子に追加で を設定しinner ysep=0(これにより、カテゴリと語彙の内容がさらに近くなります)、 Forest の を TikZ の で上書きすると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}

タイプセットツリーへの変更の影響

関連情報