Advertencia emptor...

Advertencia emptor...

¿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 showframesolo 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 0ptque el estilo no tendrá ningún efecto.

Notas

  1. El algoritmo intenta ser conservador. Esto significa que será lento si aplica el estilo a muchos árboles. Recomiendo memoize.

  2. 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.

  3. No dejes esto para compilar sin supervisión.Si sale mal, puede entrar en un forestbucle eterno. Nopensaresto es lo que va a ocurrir. Como se explica en (1), lo he probado exhaustivamente, pero no se puede ser demasiado cuidadoso.

  4. 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.

  5. 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.

  6. 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}

ingrese la descripción de la imagen aquí

información relacionada