[Tex/LaTex] Forest trees fitting on page

foresttrees

My forest looks like this but it does not fit on a page, this is my first time using this package. I am looking for suggestions to fit this into a page, hopefully they will not be too intensive because I plan on making an even bigger tree.

\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}

Best Answer

I would:

  • use geometry to get more sensible margins;
  • move some branches of the tree down to conserve space;
  • used squared edges to avoid branches crossing things and to reduce crowding and clutter;
  • avoid putting labels so that edges are drawn through them by repositioning them slightly for greater legibility;
  • use a style to simplify adding the edge labels, which allows their positions to be amended more easily and determined more consistently (and saves typing) e.g. my label in the example below;
  • consider adding colour automatically for trees where there is a pattern e.g. all final nodes are a different colour or all left-hand nodes or whatever (but this is just to save typing and clearly a matter of preference);
  • use pdflscape for larger trees (not needed for this one).

Here's an example:

rearranged tree

\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}