Vorsicht beim Kauf ...

Vorsicht beim Kauf ...

Gibt es eine Möglichkeit anzugeben, dass sich der Baum über die gesamte Textbreite erstrecken soll? Mit anderen Worten, den äußersten linken Knoten am linken Rand und den äußersten rechten am rechten Rand auszurichten und dann alles dazwischen relativ zu diesen Punkten zu zeichnen?

Hier ist ein MWE des Baums, den ich anzupassen versuche;

\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}

Antwort1

Ich glaube, ich habe die Darstellung der Basistypen korrigiert, wenn ich das richtig verstanden habe. Da ich kein Linguist bin und nicht wirklich weiß, was das bedeutet, nehmen Sie das für das, was es wert ist.

Ich habe hinzugefügt for tree={draw}undshowframe nur zu Demonstrationszwecken hinzugefügt. Da Okular einen Fehler hat, der Bilder ruiniert, müssen Sie es entweder kompilieren oder sich vorstellen, um die Demonstration tatsächlich zu sehen, aber ich habe es gründlich an einer Stichprobe vonNBäume, woN=1. Da es sich hierbei um Ihren Baum handelt, funktioniert es zumindest in diesem Fall.

Der Style

widen tree to width=<dimension expression>

nimmt ein einzelnes, optionales Argument an. Wenn nichts angegeben wird, ist der Standardwert, 0ptsodass der Stil keine Auswirkung hat.

Anmerkungen

  1. Der Algorithmus versucht konservativ zu sein. Das bedeutet, dass er langsam ist, wenn Sie den Stil auf viele Bäume anwenden. Ich empfehle memoize.

  2. Es ist nicht so konservativ, dass es in Extremfällen nicht zusammenbricht. In diesem Sinne ist ein „Extremfall“ jeder Fall, in dem der Algorithmus versagt.

  3. Lassen Sie die Kompilierung nicht unbeaufsichtigt.Wenn es schief geht, kann es in eine ewigeforest . Ichdenkendas wird passieren. Wie in (1) erklärt, habe ich es ausführlich getestet, aber man kann nicht vorsichtig genug sein.

  4. Ich habe dem Algorithmus gesagt, dass er anhalten soll, wenn der Unterschied zwischen dem Baum und dem Ziel nicht mehr beträgt als1pt .Ändern Sie dies nicht auf 0pt.Die Berechnungen von TeX sind nur Näherungswerte. Die Reduzierung der Toleranz auf0pt Willeeine Endlosschleife auslösen.

  5. Beschriftungen, Kanten oder Knotenränder werden nicht berücksichtigt. Wenn Ihr Baum solche Elemente aufweist und diese in der Breite hervorstehen, müssen Sie die Zielbreite entsprechend anpassen.

  6. Ich empfehle dies weder aus ästhetischen noch aus Effizienzgründen. Ich bin mir nicht sicher, warum Sie einen Baum mit einer bestimmten Breite haben möchten. Aber vielleicht fehlt mir einfach die Vorstellungskraft.

Vorsicht beim Kauf ...

\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}

Bildbeschreibung hier eingeben

verwandte Informationen