买者自负 ...

买者自负 ...

有没有办法指定您希望树延伸到整个文本宽度?换句话说,让最左边的节点与左边距对齐,最右边的节点与右边距对齐,然后让中间的所有内容都相对于这些点绘制?

这是我试图拟合的树的 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}

在此处输入图片描述

相关内容