
¿Hay alguna manera de especificar que desea que el árbol se extienda a lo largo de todo el ancho del texto? En otras palabras, ¿hacer que el nodo más a la izquierda se alinee con el margen izquierdo y el nodo más a la derecha con el margen derecho, y luego dibujar todo lo intermedio en relación con esos puntos?
Aquí hay un MWE del árbol que estoy intentando encajar;
\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}
Respuesta1
Creo que he corregido la representación de tipos básicos, si he entendido correctamente. Como no soy lingüista y en realidad no sé lo que esto significa, tómelo por lo que vale.
Agregué for tree={draw}
y showframe
solo con fines de demostración. Dado que Okular tiene un error que arruina las imágenes, tendrás que compilarlo o imaginarlo para ver la demostración, pero lo probé minuciosamente en una muestra denorteárboles dondenorte=1. Dado que uno es su árbol, al menos funciona en este caso.
El estilo
widen tree to width=<dimension expression>
toma un argumento único y opcional. Si no se especifica, el valor predeterminado es 0pt
que el estilo no tendrá ningún efecto.
Notas
El algoritmo intenta ser conservador. Esto significa que será lento si aplica el estilo a muchos árboles. Recomiendo
memoize
.No es tan conservador como para no romperse en casos extremos. A estos efectos, un "caso extremo" es cualquier caso en el que el algoritmo falla.
No dejes esto para compilar sin supervisión.Si sale mal, puede entrar en un
forest
bucle eterno. Nopensaresto es lo que va a ocurrir. Como se explica en (1), lo he probado exhaustivamente, pero no se puede ser demasiado cuidadoso.Le dije al algoritmo que se detuviera cuando la diferencia entre el árbol y el objetivo no fuera mayor que
1pt
.No cambie esto a 0pt.Los cálculos de TeX son sólo aproximados. Reducir la asignación a0pt
voluntaddesencadenar un bucle infinito.No se tienen en cuenta etiquetas, bordes o bordes de nodos. Si su árbol presenta alguna de estas cosas y sobresalen a lo ancho, debe ajustar el ancho objetivo en consecuencia.
No lo recomiendo por motivos estéticos o de eficiencia. No estoy seguro de por qué querrías un árbol de un ancho específico en particular. Pero tal vez simplemente me falta imaginación.
Advertencia 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}