
有沒有辦法指定您希望樹延伸到整個文字寬度?換句話說,要讓最左邊的節點與左邊距對齊,最右邊的節點與右邊距對齊,然後相對於這些點繪製中間的所有內容?
這是我想要擬合的樹的 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 有一個損壞圖像的錯誤,您必須編譯它或想像它才能實際看到演示,但我已經在示例上徹底測試了它n樹木在哪裡n=1。由於該樹是您的樹,因此它至少在這種情況下起作用。
樣式
widen tree to width=<dimension expression>
採用單一可選參數。如果未指定,則預設值,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}