页面上的森林树木

页面上的森林树木

我的森林看起来像这样,但它不适合放在一页上,这是我第一次使用这个包。我正在寻找建议,以将其放入一页中,希望它们不会太密集,因为我计划制作一棵更大的树。

\documentclass{article}
\usepackage{forest}

\begin{document}
\begin{forest}
for tree={circle,draw, l sep=20pt}
 [1,red 
[2, edge label={node[midway,left] {A}}
  [1,red,edge label={node[midway,left] {B}} 
            [2,red,edge label={node[midway,right] {C}}]
            [2,red,edge label={node[midway,right] {D}}]
        ] 
  [1,red,edge label={node[midway,right] {C}}
            [2,red,edge label={node[midway,right] {B}}]
            [2,red,edge label={node[midway,right] {D}}]
            ]
        [1,red,edge label={node[midway,right] {D}}
            [2,red,edge label={node[midway,right] {B}}]
            [2,red,edge label={node[midway,right] {C}}]
            ]
]
[2, edge label={node[midway,left] {B}}
  [1,red, edge label={node[midway,left] {A}}
            [2,red,edge label={node[midway,right] {C}}]
            [2,red,edge label={node[midway,right] {D}}]
            ] 
  [1,red, edge label={node[midway,right] {A}}
            [2,red,edge label={node[midway,right] {C}}]
            [2,red,edge label={node[midway,right] {D}}]
        ]
        [1,red,edge label={node[midway,right] {A}}
            [2,red,edge label={node[midway,right] {C}}]
            [2,red,edge label={node[midway,right] {D}}]
        ]
]
    [2, edge label={node[midway,left] {C}}  
  [1,red,edge label={node[midway,left] {A}} 
            [2,red,edge label={node[midway,right] {B}}]
            [2,red,edge label={node[midway,right] {D}}]
        ] 
  [1,red,edge label={node[midway,right] {B}} 
            [2,red,edge label={node[midway,right] {A}}]
            [2,red,edge label={node[midway,right] {D}}]
        ]
        [1,red,edge label={node[midway,right] {D}}
            [2,red,edge label={node[midway,right] {A}}]
            [2,red,edge label={node[midway,right] {B}}]
            ]
]
    [2, edge label={node[midway,left] {D}}
  [1,red,edge label={node[midway,left] {A}} 
            [2,red,edge label={node[midway,right] {B}}]
            [2,red,edge label={node[midway,right] {C}}]
            ] 
  [1,red,edge label={node[midway,right] {B}}
            [2,red,edge label={node[midway,right] {A}}]
            [2,red,edge label={node[midway,right] {C}}]
            ]
        [1,red,edge label={node[midway,right] {C}}
            [2,red,edge label={node[midway,right] {A}}]
            [2,red,edge label={node[midway,right] {B}}]
            ]
    ]
]
\end{forest}
\end{document}

答案1

我会:

  • 用来geometry获得更合理的利润;
  • 将树的一些树枝向下移动以节省空间;
  • 使用方形边缘,避免树枝交叉,减少拥挤和混乱;
  • 避免将标签放置在边缘处,通过稍微调整标签的位置以提高可读性;
  • 使用样式来简化添加边缘标签,这使得它们的位置可以更容易地修改和更一致地确定(并节省打字),例如my label在下面的例子中;
  • 考虑为具有模式的树自动添加颜色,例如,所有最终节点都是不同的颜色或所有左侧节点或其他颜色(但这只是为了节省打字时间,显然是一个偏好问题);
  • 用于pdflscape较大的树(这个不需要)。

以下是一个例子:

重排树

\documentclass{article}
\usepackage{geometry}
\usepackage[edges]{forest}

\begin{document}
\noindent
\begin{forest}
  my label/.style={%
    if n=1{%
      edge label={node [midway,left] {#1}}
    }{%
      if n'=1{%
        edge label={node [midway,right] {#1}}
      }{%
        edge label={node [midway,below right] {#1}}
      }
    },
  },
  for tree={circle,draw, l sep=20pt},
  before typesetting nodes={
    where content={}{coordinate}{},
  },
  forked edges,
 [1,red
  [2, my label={A}
    [1,red,my label={B}
              [2,red,my label={C}]
              [2,red,my label={D}]
          ]
    [1,red,my label={C}
              [2,red,my label={B}]
              [2,red,my label={D}]
              ]
          [1,red,my label={D}
              [2,red,my label={B}]
              [2,red,my label={C}, tier=this]
              ]
  ]
  [, tier=this, my label={B}
  [2
    [1,red, my label={A}
              [2,red,my label={C}]
              [2,red,my label={D}]
              ]
    [1,red, my label={A}
              [2,red,my label={C}]
              [2,red,my label={D}]
          ]
          [1,red,my label={A}
              [2,red,my label={C}]
              [2,red,my label={D}]
          ]
  ]]
      [2, my label={C}
    [1,red,my label={A}
              [2,red,my label={B}]
              [2,red,my label={D}]
          ]
    [1,red,my label={B}
              [2,red,my label={A}]
              [2,red,my label={D}]
          ]
          [1,red,my label={D}
              [2,red,my label={A}]
              [2,red,my label={B}, tier=this]
              ]
  ]
  [, tier=this, my label={D}
  [2
    [1,red,my label={A}
            [2,red,my label={B}]
            [2,red,my label={C}]
            ]
    [1,red,my label={B}
            [2,red,my label={A}]
            [2,red,my label={C}]
            ]
        [1,red,my label={C}
            [2,red,my label={A}]
            [2,red,my label={B}]
            ]
    ]]
]
\end{forest}
\end{document}

答案2

由于你的树很宽,而且不太高,一种可能性是将其放置在横向页面上。pdflscape包及其landscape环境会以横向模式创建一个新页面,它不会弄乱您的页眉,甚至可以在 PDF 查看器中正确显示:

\documentclass{article}

\usepackage{pdflscape}
\usepackage{forest}
\usepackage{lipsum}    % Only for creating example text

\begin{document}

\lipsum[1-4]    % Example text

\begin{landscape}
\begin{forest}
    ...
\end{forest}
\end{landscape}

\lipsum[5-7]    % Example text

\end{document}

横向模式的结果

当然,这个解决方案会失败非常大森林。如果是这样的话,缩小整个森林(包括文本!)以适合页面可能是一个好主意。一个简单的方法是使用调整框包,它允许您将任何内容缩放到所需的大小,例如通过将宽度定义为\linewidth

\documentclass{article}

\usepackage{adjustbox}
\usepackage{forest}

\begin{document}

\begin{adjustbox}{width=\linewidth}
\begin{forest}
    ...
\end{forest}
\end{adjustbox}

\end{document}

使用调整框的结果

当然,重新设计森林以适应你的页面没有重新缩放会更好,因为你可能不想在文档中出现许多不同的小字体大小。也许森林- 专家可以阐明如何以这种方式重新设计森林。

相关内容