TransWikia.com

Tree branching starting from specific character of node

TeX - LaTeX Asked on August 14, 2021

I am doing parse trees for propositional logic formulas and I want to have the branches of a tree start from the main connective. Notice that the branching starts at a specific character for each node. Here is an example of what I am looking for:

Expected

This was done using phantoms to demonstrate. Here is the code:

documentclass{article}
usepackage{forest}
forestset{
    parse tree/.style={for tree={s sep=3em, minimum size=1.5em}}
}

begin{document}
begin{center}
    begin{forest}
        parse tree
        [phantom{ssssssssssssssssss}$neg (neg P to (Q lor R))$
            [phantom{sssss}$neg P to (Q lor R)$
                [phantom{ss}$neg P$ [$P$]]
                [$Q lor R$
                    [$Q$]
                    [$R$]
                ]
            ]
        ]
    end{forest}
end{center}
end{document}

I’m hoping a solution could include the Forest package, but I am fine with anything that is easy enough to use!

2 Answers

I am not an expert on forest, but what about smashing the size of part of the equations with mathtools? Like:

documentclass{article}
usepackage{forest}
usepackage{mathtools}
forestset{
    parse tree/.style={for tree={s sep=3em, minimum size=1.5em}}
}

begin{document}
begin{center}
    begin{forest}
        parse tree
        [$negmathrlap{(neg P to (Q lor R))}$
        [$mathllap{neg} to mathrlap{(Q lor R)}$
        [$neg mathrlap{P}$ [$P$]]
                [$Q lor R$
                    [$Q$]
                    [$R$]
                ]
            ]
        ]
    end{forest}
end{center}
end{document}

enter image description here

...the only problem could be the bounding box of the final box, which can (will) be wrong. If this is a feasible solution, you can use a macro:

newcommand{balancemath}[3]{mathllap{#1} #2 mathrlap{#3}}
begin{document}
begin{center}
    begin{forest}
        parse tree
        [$balancemath{}{neg}{(neg P to (Q lor R))}$
        [$balancemath{neg}{to}{(Q lor R)}$
        [$balancemath{}{neg}{P}$ [$P$]]
                [$Q lor R$
                    [$Q$]
                    [$R$]
                ]
            ]
        ]
    end{forest}
end{center}

...to obtain the same result. If needed, the macro can be changed (not trivially) to have a phantom bounding box so that it encompasses the full formula.

Correct answer by Rmano on August 14, 2021

I'm adding this answer even if it does not address OP's main issue (starting the branch below the connective), because (i) it provides a solution for the same problem (logic parse trees) and (ii) I had it already developed for myself.

documentclass{article}

usepackage{forest}

forestset{
  declare toks={left}{},
  declare toks={right}{},
  declare boolean={paren}{false},
  formula as tree/.style={
    formula@as@tree,
    for tree={
      content format={ensuremath{%
        noexpandcolor{lightgray}forestoption{left}%
        noexpandcolor{black}forestoption{content}%
        noexpandcolor{lightgray}forestoption{right}%
        }},
    },
  },
  formula@as@tree/.style={
    % assuming unary or binary branching nodes
    delay={
      for descendants children-first={
        if n=1{
          if={n_children("!u")==1}{
            append content to parent,
          }{
            prepend content to parent,
          }
        }{
          append content to parent,
        },
      },
    },
  },
  prepend content to parent/.style={
    if paren={
      !u.+left/.process={OOOw3}{left}{content}{right}{(##1##2##3)},
    }{
      !u.+left/.process={OOOw3}{left}{content}{right}{##1##2##3},
    },
  },
  append content to parent/.style={
    if paren={
      !u.right+/.process={OOOw3}{left}{content}{right}{(##1##2##3)},      
    }{
      !u.right+/.process={OOOw3}{left}{content}{right}{##1##2##3},
    }
  }, 
}

begin{document}


begin{forest} formula as tree
  [neg
    [rightarrow,paren
      [neg
        [P]
      ]
      [vee,paren
        [Q]
        [R]
      ]
    ]
  ]
end{forest}


end{document}

enter image description here

Answered by Sašo Živanović on August 14, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP