
位置合わせの目的で、ツリーの最上部にスペースを取らないファントム ノードを作成し、ツリーの最初のラベル付きノードが例の番号と揃うようにしたいのですが、設定だけでは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}
上記を、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.1.5 の言語ライブラリがよりスマートになろうとする理由です。大まかに言うと、ベースラインを「最初の非ファントム ノード」に設定します。この例では、それが左の VP なので、次のようになります。
(暫定コメント:Forest 2.1.5はすでにCTANに提出されており、GitHub。
さて、確かに、OPの例では、これはまったく役に立ちません。「最初の非ファントムノード」は に解決されるからですJane is ...
。言語学の新しい基本デフォルトは、並んだツリーの一般的なケースでは機能します。通常とは異なる場合は、単に と設定します。baseline
手動で設定するだけです。アランの答え。