1

I have a pretty complicated qtree.

\Tree [.expr while 
             [.expr not 
                    [.expr 
                    ( 
                    [.expr 
                    [.ID a ] <-  [.expr [.ID z ] <- [.expr 0 ] ] ] ) ] ].expr 
             loop 
             [.expr [.ID y ] 
                    <- 
                    [.expr [.expr [.expr [.ID  z ] ] 
                                  + 
                                  [.expr [.expr [.Integer 2 ] ] 
                                         * 
                                         [.expr [.ID x ] ] ] ] + [.expr [.Integer 1 ] ] ] ] 
             pool ].expr

output

How shall I make it fit into a A4 page? I have been trying !\qsetw{} for hours and failed.

2 Answers2

3

You can change to forest which uses a similar syntax and optimize space between tree elements.

Your tree with forest default style looks like

enter image description here

Of course forest provide instructions to make it wider or align certain elements with other ones, etc.

The code used to draw previous figure was:

\documentclass[a4paper]{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{forest}
\begin{document}
\begin{forest}
[expr [while] 
      [expr [not] 
            [expr [(] 
            [expr [ID [a]] 
                  [<-]  
                  [expr [ID [z]] 
                        [<-] 
                        [expr [0]]]]
                  [)]]] 
       [loop] 
       [expr [ID [y]] 
             [<-] 
             [expr [expr [expr [ID [z]]] 
                        [+] 
                               [expr [expr [Integer [2]]] 
                                     [*] 
                                     [expr [ID [x]]]] 
                         [+] 
                         [expr [Integer [1]]]]]] 
       [pool]
       ]
\end{forest}
\end{document}
Ignasi
  • 136,588
  • Indeed one of the strong points of qtree is that it can easily be changed to forest when needed. – Vorac Apr 15 '18 at 11:59
2

This is one possibility via resizebox from array package:

output

Code:

\documentclass[a4paper]{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz-qtree}
\begin{document}
\resizebox{0.9\textwidth}{!}{%
\begin{tikzpicture}
\Tree [.expr while 
             [.expr not 
                    [.expr 
                    ( 
                    [.expr 
                    [.ID a ] <-  [.expr [.ID z ] <- [.expr 0 ] ] ] ) ] ].expr 
             loop 
             [.expr [.ID y ] 
                    <- 
                    [.expr [.expr [.expr [.ID  z ] ] 
                                  + 
                                  [.expr [.expr [.Integer 2 ] ] 
                                         * 
                                         [.expr [.ID x ] ] ] ] + [.expr [.Integer 1 ] ] ] ] 
             pool ].expr
\end{tikzpicture}
}
\end{document}

If landscape is an option, add lanscape to the geometry options:

output

Jesse
  • 29,686