在参照这个帖子,我有一个后续问题。我需要做的基本上是类似以下的事情:
这是我的尝试:
\documentclass[12pt]{article}
\usepackage[linguistics]{forest}
\usetikzlibrary{decorations.pathmorphing}
\forestset{%
/tikz/squiggly/.style={decorate, decoration={snake, amplitude=.5mm, segment length=2mm}},
wiggly/.style={edge=squiggly},
move me/.style n args=2{%
before drawing tree={%
x+=#1,
y+=#2,
},
},
}
\begin{document}
\begin{forest}
[P\textsubscript{\scshape [rel]}, move me={-150pt}{0pt}
[{\itshape bla}, wiggly, move me={200pt}{0pt}]
[D\textsubscript{\scshape [+def]}, move me={-150pt}{0pt}
[{\itshape bla}, wiggly, move me={200pt}{0pt}]
[{\itshape bla, no edge, move me={80pt}{-20pt}]
[{\itshape \textfishhookr a} <P\textsubscript{\scshape [rel]}, D\textsubscript{\scshape [+def, +fem]}>, no edge, move me={-30pt}{-40pt}]
[, phantom, calign with current]
[NP, move me={-150pt}{-15pt}
[{\hspace{2cm}}, roof, move me={-150pt}{-15pt}]
]
]
]
\end{forest}
\end{document}
但它遇到了一个我无法弄清楚的错误。有什么想法吗?
谢谢!
答案1
在这种情况下,我也不会使用move me
,但也会创建一个节点。但是,我可能会以常规方式将其创建为树的一部分。但是,Sašo 是这方面的专家,所以可能有充分的理由不按我的方式做!
买者自负 ...
wiggly
和squiggly
的定义与之前相同,节点内容来自 Sašo 的答案。parent to=<node>
从当前节点parent anchor
到目标节点绘制一条波浪线child anchor
。phantom
节点和calign=fixed edge angles
间距帮助。我们覆盖“bla node using
plain content , aligning things at the centre and using a
tier”的数学模式,以确保终端节点的水平对齐。
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage[linguistics]{forest}
\usetikzlibrary{decorations.pathmorphing}
\forestset{%
/tikz/squiggly/.style={
decorate,
decoration={snake, amplitude=.5mm, segment length=2mm}},
wiggly/.style={edge=squiggly},
parent to/.style={
tikz+={\draw [squiggly] (.parent anchor) -- (#1.child anchor);}
},
}
\begin{document}
\begin{forest}
where n children=0{tier=terminus}{},
[P\textsubscript{\scshape [rel]}
[bla\\bla\\bla, plain content, align=c, font=\itshape, wiggly]
[D\textsubscript{\scshape [+def]}, parent anchor=south east, child anchor=120, calign=fixed edge angles, parent to=!r1
[, phantom]
[NP
[{\hspace*{1cm}}, roof]
]
]
]
\end{forest}
\end{document}
答案2
该示例无法编译,因为{\itshape \textfishhookr a} <P\textsubscript{\scshape [rel]}, D\textsubscript{\scshape [+def, +fem]}>}
包含逗号。因此,Forest 和 TikZ 假设这D\textsubscript{\scshape [+def, +fem]}>}
是键名。解决方案:用括号将该内容括起来。
但是为了从问题中绘制树,我不会创建三个 bla 节点并手动移动所有内容,而是创建一个 tikz(即非森林)节点 bla,半手动定位它,然后手动将节点连接到它(使用森林\draw
内部的tikz
键)。
\documentclass[12pt]{article}
\usepackage{tipa}
\usepackage[linguistics]{forest}
\usetikzlibrary{decorations.pathmorphing}
\forestset{%
/tikz/squiggly/.style={
decorate,
decoration={snake, amplitude=.5mm, segment length=2mm}},
to bla/.style={
phantom,
tikz+={\draw[squiggly] (!u)--(bla);},
}
}
\begin{document}
\begin{forest}
[P\textsubscript{\scshape [rel]}
[,to bla]
[D\textsubscript{\scshape [+def]}
[,to bla]
[NP
[{\hspace*{1cm}}, roof]
]
]
]
\path
(!r) |-
node(bla)[align=left,anchor=north east,
shift={(-1em,2ex)},font=\itshape]
{bla\\bla\\bla}
(!lll);
\end{forest}
\end{document}