
ツリーをテキスト幅全体に広げるように指定する方法はありますか? つまり、左端のノードを左余白に揃え、右端のノードを右余白に揃え、その間にあるすべてのものをそれらの点を基準にして描画するということですか?
私が適合させようとしているツリーの MWE は次のとおりです。
\documentclass{article}
\usepackage[margin=.75in]{geometry}
\usepackage[linguistics]{forest}
\begin{document}
\begin{center}
\begin{forest}
[IP$_{<t>}$
[VP$_{<<e,t>,t>}$
[NP $_{<<<e,t>,e,t>>,t>}$
[at least five $_{<<e,t>,<<<e,t>,<e,t>>,t>>}$]
[NP $_{<e,t>}$
[students $_{<<e,t>,<e,t>>}$]
[$t_{2_{<e,t>}}$]
]
]
[arrived $_{<e,t>}$]
]
[CP$_{<e,t>}$
[who$_1$]
[CP$_{<t>}$
[$t_{1_{<e>}}$]
[VP $_{<e,t>}$
[took $_{<e,<e,t>>}$]
[semantics $_{<e>}$]
]
]
]
]
\end{forest}
\end{center}
\end{document}
答え1
私が正しく理解していれば、基本型の表現を修正したと思います。私は言語学者ではないので、これが何を意味するのか実際にはわかりませんが、参考程度に受け止めてください。
for tree={draw}
デモ用にと を追加しましたshowframe
。Okularには画像が壊れるバグがあるため、実際にデモを見るにはコンパイルするか想像する必要がありますが、私はサンプルで徹底的にテストしました。ん木々のある場所ん=1。1つはあなたのツリーなので、少なくともこの場合は機能します。
スタイル
widen tree to width=<dimension expression>
1 つのオプション引数を取ります。指定しない場合はデフォルト値が設定され、0pt
スタイルは効果がありません。
ノート
アルゴリズムは保守的になります。つまり、スタイルを多数のツリーに適用すると遅くなります。 をお勧めします
memoize
。極端なケースでも破綻しないほど保守的ではありません。ここでの「極端なケース」とは、アルゴリズムが失敗するケースを指します。
これを放置してコンパイルしないでください。間違った場合は、永遠にループしてしまう可能性があります
forest
。考えるこういうことは起こります。(1)で説明したように、私は徹底的にテストしましたが、用心しすぎることはありません。ツリーとターゲットの差が 以下になったらアルゴリズムを停止するように指示しました
1pt
。これを 0pt に変更しないでください。TeXの計算はあくまでも近似値です。許容値を0pt
意思無限ループを引き起こします。ラベル、エッジ、ノードの境界は考慮されません。ツリーにこれらのいずれかがあり、幅方向にはみ出している場合は、それに応じてターゲットの幅を調整する必要があります。
美観や効率の観点から、これはお勧めしません。なぜ特に特定の幅のツリーが必要なのかわかりません。でも、私の想像力が足りないだけかもしれません。
買い手責任負担 ...
\documentclass{article}
\usepackage[margin=.75in,showframe]{geometry}
\usepackage[linguistics]{forest}
\forestset{% ateb: https://tex.stackexchange.com/a/715314/
declare dimen register=target wd,
target wd'=0pt,
declare dimen register=needed wd,
needed wd'=0pt,
adjust tree/.style={
tempcounta'=1,
tempcountc'=0,
for tree breadth-first={%
if={ >OR> {level}{tempcountc} }{
tempcountc/.option=level,
tempcountd'=1,
}{
tempcountd'+=1,
if={ >RR> {tempcountd}{tempcounta} }{
tempcounta/.register=tempcountd,
}{},
},
},
tempcounta*/.register=tempcountc,
tempcounta'+=1,
tempdima/.process={ RRw2+d {needed wd}{tempcounta}{##1/##2} },
where={>O_<{s}{0pt}}{
s-/.register=tempdima,
}{
s+/.register=tempdima,
},
compute xy stage,
tempdima/.max={>OOw2+d{x}{max x}{##1+##2}}{tree},
tempdimb/.min={>OOw2+d{x}{min x}{##1+##2}}{tree},
tempdimc/.register=tempdima,
tempdimc-/.register=tempdimb,
needed wd/.register=target wd,
needed wd-/.register=tempdimc,
if={ >Rd>{needed wd}{1pt} }
{% pam alla i ddim ddefnyddio loop yma?
adjust tree,
}{},
},
widen tree to width/.style={
target wd=#1,
needed wd/.register=target wd,
before drawing tree={
tempdima/.max={>OOw2+d{x}{max x}{##1+##2}}{tree},
tempdimb/.min={>OOw2+d{x}{min x}{##1+##2}}{tree},
tempdimc/.register=tempdima,
tempdimc-/.register=tempdimb,
needed wd-/.register=tempdimc,
if={ >Rd>{needed wd}{1pt} }
{% pam alla i ddim ddefnyddio loop yma?
adjust tree,
}{},
},
},
}
\begin{document}
\begin{center}
\begin{forest}
widen tree to width=\linewidth,
for tree={draw},
[IP$_{t}$
[VP$_{<<e,t>,t>}$
[NP $_{<<<e,t>,e,t>>,t>}$
[at least five $_{<<e,t>,<<<e,t>,<e,t>>,t>>}$]
[NP $_{<e,t>}$
[students $_{<<e,t>,<e,t>>}$]
[$t_{2_{<e,t>}}$]
]
]
[arrived $_{<e,t>}$]
]
[CP$_{<e,t>}$
[who$_1$]
[CP$_{t}$
[$t_{1_{e}}$]
[VP $_{<e,t>}$
[took $_{<e,<e,t>>}$]
[semantics $_{e}$]
]
]
]
]
\end{forest}
\end{center}
\end{document}