![如何在 gb4e 示例中的森林树中将文本放在多行上?](https://linux22.com/image/375673/%E5%A6%82%E4%BD%95%E5%9C%A8%20gb4e%20%E7%A4%BA%E4%BE%8B%E4%B8%AD%E7%9A%84%E6%A3%AE%E6%9E%97%E6%A0%91%E4%B8%AD%E5%B0%86%E6%96%87%E6%9C%AC%E6%94%BE%E5%9C%A8%E5%A4%9A%E8%A1%8C%E4%B8%8A%EF%BC%9F.png)
我正在使用 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
定义有关。至少有三种方法可以解决这个问题:GP1
forest
使用明确的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}