如何在 gb4e 示例中的森林树中将文本放在多行上?

如何在 gb4e 示例中的森林树中将文本放在多行上?

我正在使用 gb4e 和 forest 以良好的格式呈现(语言)树。它一直运行良好,只是节点下方的一些文本显示在多行上。在 forest 包自述文件中,我发现了以下代码。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[extra]{tipa}
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usepackage{tikz-qtree}
% For delinked segments
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
    decorate,
    postaction={decorate,
    decoration={text along path,
        text align=center,
        text={|\tiny|=},
        transform={rotate=90}}}}}
\usepackage{gb4e}

\begin{document}

\begin{exe}
\ex
\begin{xlist}
\ex
\begin{forest} GP1 [
 [parent
 [child]
 [child]
 [a very\\tall\\child, align=center, base=bottom]
 ]
 ]
\end{forest}
\end{xlist}
\end{exe}

\end{document}

这实现了我想要的结果,即文本显示在多行上。

在此处输入图片描述

但是,当我将此方法应用于我自己的树时,我遇到了一个问题,即它不会将文本放在多行上。这是代码。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[extra]{tipa}
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usepackage{tikz-qtree}
% For delinked segments
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
    decorate,
    postaction={decorate,
    decoration={text along path,
        text align=center,
        text={|\tiny|=},
        transform={rotate=90}}}}}
\usepackage{gb4e}

\begin{document}

\begin{exe}
\ex
 \begin{xlist}
 \ex
 \begin{forest} GP1 [
 [x[k]]
 [x[\textipa{1}
 [a very\\tall\\child, align=center, base=bottom]
 ]]
 [x[z]]
 [x[\textipa{1}[| |]]]
 [x[n]]
 ]\end{forest}
 \end{xlist}
\end{exe}

\end{document}

其产生以下输出。

在此处输入图片描述

有什么方法可以解决这个问题并使文本出现在多行上?

编辑:编辑以包括 MWE

答案1

这与 无关,但与 中的样式gb4e定义有关。至少有三种方法可以解决这个问题:GP1forest

使用明确的tabular

您可以将节点放在显式的里面tabular

\documentclass{article}
\usepackage[extra]{tipa}
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usepackage{gb4e}

% For delinked segments
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
decorate,
postaction={decorate,
decoration={text along path,
    text align=center,
    text={|\tiny|=},
    transform={rotate=90}}}}}
\begin{document}
\begin{exe}
\ex
 \begin{xlist}
 \ex
 \begin{forest} GP1 [
 [x[k]]
 [x[\textipa{1}
 [{\begin{tabular}{c}a very\\tall\\child\end{tabular}}]
 ]]
 [x[z]]
 [x[\textipa{1}[| |]]]
 [x[n]]
 ]\end{forest}
 \end{xlist}
\end{exe}
\end{document}

代码输出

使用stackengine

或者,您可以使用该stackengine包来做同样的事情:

\usepackage{stackengine}
\begin{forest} GP1 [
  [x[k]]
  [x[\textipa{1}
  [{\Shortunderstack[c]{{a very} tall child}}]
  ]]
  [x[z]]
  [x[\textipa{1}[| |]]]
  [x[n]]
]\end{forest}

重新定义forest GP1风格

如果您要经常这样做,GP1稍微重新定义样式可能会更有意义,以便节点的行为符合您的预期:

\documentclass{article}
\usepackage[extra]{tipa}
\usepackage[linguistics]{forest}
\usepackage{tikz}
\usepackage{gb4e}
% For delinked segments
\usetikzlibrary{decorations,decorations.text}
\tikzset{delink/.style={
decorate,
postaction={decorate,
decoration={text along path,
    text align=center,
    text={|\tiny|=},
    transform={rotate=90}}}}}
\forestset{GP1/.style 2 args={
    for n={1}{baseline},
    s sep=0pt, l sep=0pt,
    for descendants={
      l sep=0pt, l={#1},
      anchor=base,calign=first,child anchor=north,
      inner xsep=1pt,inner ysep=2pt,outer sep=0pt,s sep=0pt
    },
    delay={
      if content={}{phantom}{for children={no edge}},
      for tree={
        if content={O}{tier=OR}{},
        if content={R}{tier=OR}{},
        if content={N}{tier=N}{},
        if content={x}{
          tier=x,content={$\times$},outer xsep={#2},
          for tree={calign=center},
          for descendants={content format={\noexpand\standardnodestrut\forestoption{content}}},
          before drawing tree={outer xsep=0pt,delay={typeset node}},
          s sep=4pt
        }{align=center}, % changed the style here
      },
    },
    before drawing tree={where content={}{parent anchor=center,child anchor=center}{}},
  }}
\begin{document}
\begin{exe}
\ex
 \begin{xlist}
 \ex
 \begin{forest} GP1 [
 [x[k]]
 [x[\textipa{1}
 [{a very\\ tall \\child}]
 ]]
 [x[z]]
 [x[\textipa{1}[| |]]]
 [x[n]]
 ]\end{forest}
 \end{xlist}
\end{exe}
\end{document}

相关内容