\documentclass{文章} \usepackage[margin=1in]{几何} \usepackage{tikz} \usetikzlibrary{树} \newcommand{\somevar}{center} \tikz设置{ 耳机/.style={ 对齐=\somevar } } \tikz设置{ ideaone/.style={ 通过三个点成长 = {一个孩子在 (1.0,-1.5) 处,两个孩子在 (1.0,-1.5) 和 (1.0,-5.0) 处},% 是孩子的属性 来自父路径的边 = {(\tikzparentnode\tikzparentanchor)|-(\tikzchildnode\tikzchildanchor)}, 增长父级锚点=西方, 父锚点 = 西, 锚点 = 西 } } \tikz设置{ ideatwo/.style={ 通过三个点增长={一个孩子在(1.0,0.0)处,两个孩子在(1.0,0.0)和(1.0,-2.0)处},%这工作得很好 增长父锚点=东方, 来自父路径的边 = {(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzparentanchor)}, %***这应该只会影响子节点,为什么它会影响一切?*** %parent anchor = east, %***不允许多重锚定?是否被覆盖?*** 锚点 = 西 } } \开始{文档} \开始{tikzpicture} [ 耳机 %global 和 levelwise 样式 ] \node {\underline{\Large {主要头部?}}} [想法一] 孩子 { 节点 {Idea 1 \\ center??} %相对于“子”cs 绘制 [想法二] 孩子 { 节点{想法 1-1} } 孩子 { 节点{想法 1-2} } 孩子 { 节点{想法 1-3} } } 孩子 { 节点 {想法 2} %[想法二] } ; \结束{tikzpicture} \renewcommand{\somevar}{left} \新一页 \结束{文档}
我正在尝试为自己制作一个方便的类文件,每次我都可以使用它来创建类似类型的树。但是,我就是无法获得理想的结果。我正在尝试弄清楚每个命令的范围。但感觉它依赖于命令。我尝试按照此页面说明了解范围https://tikz.dev/tikz-trees. 内容如下:
\开始{tikzpicture} \范围 [...] % 选项应用于整个树 \node[...] {root} % 选项仅适用于根节点 [...] % 选项适用于所有儿童 child[...] % 选项适用于此子项及其所有子项 { node[...] {} % 选项仅适用于子节点 ... } child[...] % 选项适用于此子项及其所有子项 ; \结束{tikzpicture}
基于此,我假设我的树会输出如下内容:
我不太明白为什么会发生这种情况,或者函数的范围是否依赖于命令。甚至锚点的定义也无法正常工作。最后,我只想提一下,我不能使用 levelx 样式,因为我的兄弟之间可能会有差异,我计划使用 renewcommand 来适应这些差异。
简而言之,
问题 1) 为什么父路径的边缘不能像我想象的那样工作?
问题 2) 为什么在 ideatwo/.style 中重新定义父锚点会让事情变得更加混乱?
答案1
ideatwo
来自父路径的边缘包含两次\tikzparentanchor
:
edge from parent path={(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzparentanchor)}
否则,这似乎是一个范围问题。
所有边缘设置移至every child
样式(边缘是子项的一部分)解决了另一个问题。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{trees}
\newcommand{\somevar}{center}
\tikzset{
headset/.style={align=\somevar, child anchor=west},
edge from parent line to/.style={
edge from parent path={(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzchildanchor)}},
edge from parent vh/.style={
edge from parent path={(\tikzparentnode\tikzparentanchor) |- (\tikzchildnode\tikzchildanchor)}},
ideaone/.style={
grow via three points={one child at (1.0,-1.5) and two children at (1.0,-1.5) and (1.0,-5.0)},
every child/.append style={
edge from parent vh, parent anchor = west, child anchor=west},
growth parent anchor = west,
anchor = west},
ideatwo/.style={
grow via three points={one child at (1.0,0.0) and two children at (1.0,0.0) and (1.0,-2.0)},
every child/.append style={
edge from parent line to, parent anchor = east, child anchor = west},
growth parent anchor = east,
anchor = west}}
\begin{document}
\tikz[headset]
\node {\underline{\Large {Main Head?}}}
[ideaone]
child {
node {Idea 1 \\ center??}
[ideatwo]
child {node {Idea 1-1}}
child {node {Idea 1-2}}
child {node {Idea 1-3}}
}
child {node {Idea 2}};
\end{document}