关于 tikz tree 相关命令范围的两个查询

关于 tikz tree 相关命令范围的两个查询
\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}

输出

在此处输入图片描述

相关内容