
Existe uma maneira de especificar que você deseja que a árvore se estenda por toda a largura do texto? Em outras palavras, fazer com que o nó mais à esquerda se alinhe com a margem esquerda e o nó mais à direita com a margem direita e depois tenha tudo o que está entre eles desenhado em relação a esses pontos?
Aqui está um MWE da árvore que estou tentando encaixar;
\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}
Responder1
Acho que corrigi a representação dos tipos básicos, se entendi corretamente. Como não sou linguista e não sei realmente o que isso significa, considere isso como vale a pena.
Eu adicionei for tree={draw}
e showframe
apenas para fins de demonstração. Como o Okular tem um bug que estraga as imagens, você terá que compilá-lo ou imaginá-lo para realmente ver a demonstração, mas eu testei-o minuciosamente em uma amostra denárvores onden=1. Como essa é a sua árvore, pelo menos funciona neste caso.
O estilo
widen tree to width=<dimension expression>
recebe um único argumento opcional. Se não for especificado, o valor padrão é 0pt
que o estilo não terá efeito.
Notas
O algoritmo tenta ser conservador. Isso significa que será lento se você aplicar o estilo a muitas árvores. Eu recomendo
memoize
.Não é tão conservador que não quebre em casos extremos. Para estes fins, um 'caso extremo' é qualquer caso em que o algoritmo falha.
Não deixe isso para compilar sem supervisão.Se der errado, pode entrar em um
forest
loop eterno. Eu nãopensarisso vai acontecer. Conforme explicado em (1), eu testei exaustivamente, mas você não pode ter muito cuidado.Eu disse ao algoritmo para parar quando a diferença entre a árvore e o alvo não for maior que
1pt
.Não altere isso para 0pt.Os cálculos do TeX são apenas aproximados. Redução do subsídio para0pt
vaiacionar um loop infinito.Nenhuma permissão é feita para rótulos, arestas ou bordas de nós. Se a sua árvore apresentar alguma dessas coisas e elas se projetarem na largura, você deverá ajustar a largura do alvo de acordo.
Não recomendo isso por motivos estéticos ou de eficiência. Não sei por que você deseja uma árvore com largura específica. Mas talvez me falte imaginação.
Advertência emptor ...
\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}