買者自負 ...

買者自負 ...

有沒有辦法指定您希望樹延伸到整個文字寬度?換句話說,要讓最左邊的節點與左邊距對齊,最右邊的節點與右邊距對齊,然後相對於這些點繪製中間的所有內容?

這是我想要擬合的樹的 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因此樣式將不起作用。

筆記

  1. 該演算法試圖保持保守。這意味著如果將該樣式應用於許多樹,速度會很慢。我建議memoize

  2. 它不那麼保守,在極端情況下也不會崩潰。出於這些目的,「極端情況」是演算法失敗的任何情況。

  3. 不要讓其在無人看管的情況下進行編譯。如果出錯的話,可能會進入一個永恆的forest循環。我不思考這將會發生。正如(1)中所解釋的,我已經對其進行了詳盡的測試,但你不能太小心。

  4. 我已經告訴演算法在樹和目標之間的差異不超過 時停止1pt不要將其更改為 0pt。TeX 的計算只是近似值。將津貼減少至0pt 將要觸發無限循環。

  5. 不考慮標籤、邊緣或節點邊界。如果您的樹具有任何這些特徵,並且它們在寬度方向上突出,則必須相應地調整目標寬度。

  6. 出於美觀或效率的考慮,我不建議這樣做。我不知道為什麼你會特別想要一棵指定寬度的樹。但也許我只是缺乏想像力。

買者自負 ...

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

在此輸入影像描述

相關內容