Forest: スペースを取らないファントムノードを作成しますか?

Forest: スペースを取らないファントムノードを作成しますか?

位置合わせの目的で、ツリーの最上部にスペースを取らないファントム ノードを作成し、ツリーの最初のラベル付きノードが例の番号と揃うようにしたいのですが、設定だけではl sep=0pt明らかに不十分です。これを実現するには、他に何を設定する必要がありますか?

MWE:

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex\begin{forest}
[, phantom
    [{Jane is ...}, tier=words]
    [AjP
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}\xe

\end{document}

不要なスペースを占有する空のトップノードを持つツリー

答え1

現在のバージョンの では問題を再現できませんforest。ただし、現在のバージョンでは、baseline任意のノードに追加して、そのノードをツリーのベースラインにすることができます。

(無関係な言語学的コメント: 「指定子」は構文上の位置の名前であり、ツリー内の構文上のカテゴリやノードではなく、通常はツリーに現れることはありません。)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
[,phantom,
    [{Jane is ...}, tier=words]
    [AjP,baseline
        [Specifier
            [very, tier=words]
        ]
        [Aj'
            [Aj
                [fond, tier=words]
            ]
            [PP
                [{of Cheetah}, roof, tier=words]
            ]
        ]
    ]
]
\end{forest}
\xe

\end{document}

コードの出力

答え2

ここではルートはまったく必要ありませんphantom。最初の子のエッジを削除し、ルートの配置を指定するだけです。

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{expex}

\begin{document}

\ex
\begin{forest}
  where n children=0{tier=words}{}
  [AjP, calign child=2
    [Jane is \dots, no edge]
      [Specifier
          [very]
      ]
      [Aj'
          [Aj
              [fond]
          ]
          [PP
              [of Cheetah, roof]
          ]
      ]
  ]
\end{forest}
\xe

\end{document}

ファントムなしの配置

答え3

v2.0.3 より前のバージョンでは、 TikZ によって描画されていないノードbaselineでキーが使用された場合でも、Forest はキーが使用されるたびにベースライン ノード (アンカーがベースラインに揃えられるノード)phantomを設定していました。これにより TikZ エラーが発生すると予想されますが、実際には発生しませんでした。

TikZ でノードが作成されると、その名前はグループ外でも保持され (これはバグと見なすことができます)、「ノード」は(0,0)次のように に配置されます。

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \node(foo){};
\end{tikzpicture}

\begin{tikzpicture}
  \draw[->] (-1,1) -- (foo.center) -- (1,1);
\end{tikzpicture}

\end{document}

TikZ のノード名が永続化するバグ

上記を、Forest がノード名を再利用するという事実 (ルートは通常node@2デフォルトで名前が付けられます) と組み合わせると、問題が発生します。ベースライン ノードをルートに設定し (言語ライブラリのように)、ルートをファントムにすると (サイドバイサイド ツリーをタイプセットするために一般的に行われるように)、TikZ は事実上ベースラインを に設定しますy=0。結果は OP の例に示されています。

現在、Forest 2.0.3 ( によって導入された問題がdraw tree method修正されました) は賢くなり、TikZ にベースライン ノードをファントム ノード (より正確には、描画されていないノード) に設定するよう指示しなくなりました。したがって、このバージョン以降、並列言語ツリーにベースラインは設定されなくなりました。TikZ マニュアルで約束されているように、結果は、次の例のように「画像の下端が周囲のテキストのベースライン上に配置される」ということになります。(ノードは、draw配置をよりよく確認できるように n になっています。)

\documentclass{article}

\usepackage[linguistics]{forest}
\usepackage{gb4e}

\begin{document}
\begin{exe}
\ex\begin{forest}
  for tree=draw
  [,phantom
    [VP[V][DP]]
    [VP[V][DP]]
  ]
\end{forest}
\end{exe}
\end{document}

これは、上記のコードを Forest v2.0.3 - v2.1.4 でコンパイルすると得られる結果です。

v2.0.3 - 2.1.4 でコンパイル

はっきり言って、私はこれが期待される行動だと考えています。しかし、これが望ましい動作 ... これが、v2.1.5 の言語ライブラリがよりスマートになろうとする理由です。大まかに言うと、ベースラインを「最初の非ファントム ノード」に設定します。この例では、それが左の VP なので、次のようになります。

2.1.5でコンパイル

(暫定コメント:Forest 2.1.5はすでにCTANに提出されており、GitHub

さて、確かに、OPの例では、これはまったく役に立ちません。「最初の非ファントムノード」は に解決されるからですJane is ...。言語学の新しい基本デフォルトは、並んだツリーの一般的なケースでは機能します。通常とは異なる場合は、単に と設定します。baseline手動で設定するだけです。アランの答え

関連情報