我正在尝试在 Forest 中制作基本的语言树,它们可以做两件事:1) 将底部叶子对齐到单个层上,2) 父级锚点为南。(实际上我还有第三个要求:能够在叶子中使用换行符,但那是另一个问题。)目前,我可以通过根据需要为每个叶子指定层来强制将它们组合在一起(对于偶尔出现的小树来说没问题,但对于许多或更大的树来说就很烦人了)。
森林文档(http://mirrors.ibiblio.org/CTAN/graphics/pgf/contrib/forest/forest-doc.pdf) 确实提供了一种自动进行这种对齐的技术(第 7 页,示例 12),但如果我在指定父锚点的同时尝试此操作,则会出现此错误:
!软件包 pgfkeys 错误:我不知道您传递了“0{tier=word}{}”的密钥“/tikz/{parent anchor=south} whe re n children”,我将忽略它。也许您拼错了。
我对 Forest 还很陌生,所以也许我忽略了一些显而易见的东西。下面是我的 MWE,首先是暴力破解版本 A,它给出了正确的输出:
接下来是产生正确对齐的自动版本,但没有指定任何父锚定(我已经包含了中断它的行,但已注释掉):
我希望能够使用自动对齐,如在 B 中一样,但以 A 为锚点。谢谢。
\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
A) Correct tree, but brute-forced:
\begin{forest}{parent anchor=south}
[
[strong
[strong[Cant,tier=word]]
[weak[wara,tier=word]]
]
[weak
[byrig,tier=word]
]
]
\end{forest}
B) Automated tree, but with wrong parent anchor:
\begin{forest}%{parent anchor=south}
where n children=0{tier=word}{}
[
[strong
[strong[Cant]]
[weak[wara]]
]
[weak
[byrig]
]
]
\end{forest}
\end{document}
答案1
您只是使用了不完全正确的语法。选项/指令需要用逗号分隔(不需要括号)。编辑:已添加for tree
。非常感谢@cfr,他对这个问题有唯一真正的答案。我发帖只是为了让这个问题保持活跃。(有点像在真正的明星开始之前演奏的不知名乐队。;-)
\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
A) Correct tree, but brute-forced:
\begin{forest}
parent anchor=south
[
[strong
[strong[Cant,tier=word]]
[weak[wara,tier=word]]
]
[weak
[byrig,tier=word]
]
]
\end{forest}
B) Automated tree and correct parent anchor:
\begin{forest}
for tree={parent anchor=south},
where n children=0{tier=murmel}{}
[
[strong
[strong[Cant]]
[weak[wara]]
]
[weak
[byrig]
]
]
\end{forest}
\end{document}
当@cfr 上线时我会很乐意删除它。;-)
答案2
使用当前的 Forest 来实现这一点的简单方法是使用库linguistics
:
\usepackage[linguistics]{forest}
适用于多线、中心节点parent anchor=children
以及其它好东西。
如果你没有当前的 Forest 并且无法更新,你可以手动进行。正如 marmot 所说,你需要用逗号来分隔 Ti钾parent anchor
Z 选项,但您也只为根设置。相反,使用类似这样的
for tree={% sets things for the whole tree
parent anchor=children,% children is better than south unless you really mean south or can't use current forest
% align=center,% if you want multi-line nodes for the whole tree
},
where n children=0{tier=twrllaod, align=center,% mulit-line nodes
}{}
使用当前的 Forest,您可以加载库,然后只需说
where n children=0{tier=twrllaod}{}
您还可能发现nice empty nodes
和/或roof
对您有用。
\documentclass[border=5pt]{standalone}
% \usepackage[linguistics]{forest}% use this to apply the library settings globally
\usepackage{forest}
\useforestlibrary{linguistics}
\begin{document}
\begin{forest}%{parent anchor=south}% this only sets the parent anchor for the root node - not the whole tree
for tree={% sets things for the whole tree
parent anchor=children,% children is better than south unless you really mean south or can't use current forest
% align=center,% if you want multi-line nodes for the whole tree
},
where n children=0{tier=twrllaod, align=center,% mulit-line nodes
}{}
[
[strong
[strong[Cant]]
[weak[wara]]
]
[weak
[byrig]
]
]
\end{forest}
\forestapplylibrarydefaults{linguistics}
\begin{forest}% multi-line nodes, parent anchor=children etc.
where n children=0{tier=twrllaod}{}
[
[strong
[strong[Cant]]
[weak[wara]]
]
[weak
[byrig]
]
]
\end{forest}
\end{document}