1

I have just one question. My if condition does not work. I dont know why. Here is the if condition:

\ifthenelse{\boolean{somevariable}}{split dir tree auto,}{} %IF ABFRAGE FUNKTIONIERT NICHT

I set \setboolean{somevariable}{false} so my output should be {} that means empty.

\documentclass[11pt,a4paper,titlepage,bibliography=totoc,numbers=noenddot,abstract=on,multi,dvipsnames,svgnames,x11names]{scrreprt}

\usepackage{storebox}
\usepackage[edges]{forest}
\usepackage{adjustbox}
\usepackage{ifthen}
\newboolean{somevariable}
\setboolean{somevariable}{false}

%Zeilenumbruch in der tikz Umgebung!
% addaswyd o gôd Sašo Živanović: http://tex.stackexchange.com/a/296771/
\def\hiddenparcommand{\par}
\newcommand\otherhiddenparcommand{\par\noindent}
\newcommand\hiddencommacommand{, }
\forestset{%
    declare keylist register={split here ids},% the list of nodes to split the tree at
    split here ids={},
    declare keylist register={split here interjects},% the list of comments to put in between the tree parts
    split here interjects={},
    declare keylist={split here auto siblings}{},% a list to hold the siblings which need edge restoration
    declare toks register=split here toks,
    declare dimen register=tmpdima,
    tmpdima'=0pt,
    declare dimen register=tmpdimb,
    tmpdimb'=0pt,
    declare dimen register=tmpdimc,
    tmpdimc'=0pt,
    to widest/.style={
        tikz+={\path (\forestregister{tempdima}, \forestoption{y}) -- (\forestregister{tempdimb}, \forestoption{y});},
    },
    hide commas/.style={%
        split here toks+={\hiddencommacommand},
        split here toks+={#1},
    },
    split dir tree pre/.style={%
        label={[text=gray, anchor=north, font=\scriptsize]below:{[cont.]}{}},
    },
    split dir tree post/.style={%
        label={[font=\scriptsize, anchor=south, text=gray]above:{[cont.]}{}},
    },
    split dir tree auto post/.style={% this gets applied to the first node after a break
        split dir tree post,
        tempkeylistc'={},
        tmpdimb/.option=y,
        for nodewalk={
            while={
                > ORw2+d _+d < On=! & {y}{tmpdimb}{##2-##1} {\textheight-#1} {n'}{1}%
            }{
            next,
            tempkeylistc/.option=name
        }%
    }{},
    % save the list
    split here auto siblings/.register=tempkeylistc,
    tikz+/.process={% this tries to redraw the edges to the following siblings
        OOw2{edge}{id}%
        {%
            \path [##1] (!u.parent anchor |- .north) ++(\forestregister{folder indent},1ex) coordinate (before ##2) |- (.child anchor);
            \edef\tempa{\foresteoption{split here auto siblings}}
            \foreach \i in \tempa \path [##1] (before ##2) |- ({forest cs:\i.child anchor});
        }%
    },
},
split dir tree/.code={%
    \forestset{%
        draw tree stage/.style={
            for root'={
                tempdima/.min={%
                    >OOw2+d{x}{min x}{####1+####2}%
                }{tree},
                tempdimb/.max={%
                    >OOw2+d{x}{max x}{####1+####2}%
                }{tree},
                for tree={%
                    to widest,
                },
            },
            tempcountb'=-1,
            do until={%
                strequal((split_here_ids),"")
            }{%
            tempkeylistb'={},
            tempkeylista'={},
            split register={split here ids}{,}{tempcounta,tempkeylistb+},
            split register={split here interjects}{,}{temptoksa,tempkeylista+},
            split here ids'/.register=tempkeylistb,
            split here interjects'/.register=tempkeylista,
            % Sašo Živanović: http://chat.stackexchange.com/transcript/message/28484520#28484520
            for nodewalk={%
                draw tree processing order/.style={%
                    filter={tree}{> ORw+n< OR> & {id}{tempcounta}{########1+1}{id}{tempcountb}}%
                }%
            }{},
            for root'={draw tree},
            TeX/.process={Rw{temptoksa}{\otherhiddenparcommand ####1\hiddenparcommand}},
            tempcountb'/.register=tempcounta,
        },
        for nodewalk={%
            draw tree processing order/.style={%
                filter={tree}{>OR>{id}{tempcountb}}%
            }%
        }{},
        for root'={draw tree},
    },
}%
},
split dir here auto/.style n args=2{%
    split dir tree pre,
    !next node.split dir tree auto post=#2,
    split here ids+/.option=id,
    %     !next node.split resume here ids+/.option=id,
    split={#1}{,}{split here toks,hide commas},
    split here interjects/.register=split here toks,
},
split dir tree auto/.style={%
    split dir tree,
    before drawing tree={%
        tempdima/.max={y}{tree},
        tempdimc/.register=tempdima,
        tempdimd/.min={y}{tree},
        tempdima-/.register=tempdimd,
        tempdimb'=\textheight,
        tmpdima'=10ex,
        tmpdimc'=\pagetotal,
        while={%
            >RR>{tempdima}{tempdimb}%
        }{%
        for nodewalk={%
            root',
            until={%
                > ROw2+d RRw2+d > {tempdimc}{y}{##1-##2} {tmpdima}{tmpdimc}{\textheight-##2-##1}%
            }{next node},
            previous node,
            split dir here auto/.process={R_w2{tmpdima}{continued}{{##2}{##1}}},
            next node,
            tempdima/.option=y,
            tempdimc/.register=tempdima,
            tempdima-/.register=tempdimd,
            tmpdima'=15ex,
            tmpdimc'=0pt
        }{},
    },
},
},
}
%Zeilenumbruch in der tikz Umgebung! Ende

\begin{document} 

    \begin{forest}
        for tree={
            folder,
            grow'=0,
            fit=band,
        },  
        \ifthenelse{\boolean{somevariable}}{split dir tree auto,}{} %IF ABFRAGE FUNKTIONIERT NICHT 
        [ XYZ
        [ XYZ
        [ XYZ,edge label={node[pos=0.75,above,font=\scriptsize]{1}}
        [ XYZ,edge label={node[pos=0.75,above,font=\scriptsize]{1}}
        ]
        ]
        ]
        ]
    \end{forest}

\end{document}

Thank you in advance.

0

1 Answer 1

3

The problem is that the ifthen booleans are not expandable (expandability is a strange concept in TeX and there are different levels of expandability, take a look at What is expansion for example). You need to use a boolean style that is expandable in that context. For example the following doesn't throw an error and is using the toggles provided by etoolbox:

\documentclass[11pt,a4paper,titlepage,bibliography=totoc,numbers=noenddot,abstract=on,multi,dvipsnames,svgnames,x11names]{scrreprt}

\usepackage{storebox}
\usepackage[edges]{forest}
\usepackage{adjustbox}

\usepackage{etoolbox}
\newtoggle{somevariable}
\togglefalse{somevariable}

%Zeilenumbruch in der tikz Umgebung!
% addaswyd o gôd Sašo Živanović: http://tex.stackexchange.com/a/296771/
\def\hiddenparcommand{\par}
\newcommand\otherhiddenparcommand{\par\noindent}
\newcommand\hiddencommacommand{, }
\forestset{%
    declare keylist register={split here ids},% the list of nodes to split the tree at
    split here ids={},
    declare keylist register={split here interjects},% the list of comments to put in between the tree parts
    split here interjects={},
    declare keylist={split here auto siblings}{},% a list to hold the siblings which need edge restoration
    declare toks register=split here toks,
    declare dimen register=tmpdima,
    tmpdima'=0pt,
    declare dimen register=tmpdimb,
    tmpdimb'=0pt,
    declare dimen register=tmpdimc,
    tmpdimc'=0pt,
    to widest/.style={
        tikz+={\path (\forestregister{tempdima}, \forestoption{y}) -- (\forestregister{tempdimb}, \forestoption{y});},
    },
    hide commas/.style={%
        split here toks+={\hiddencommacommand},
        split here toks+={#1},
    },
    split dir tree pre/.style={%
        label={[text=gray, anchor=north, font=\scriptsize]below:{[cont.]}{}},
    },
    split dir tree post/.style={%
        label={[font=\scriptsize, anchor=south, text=gray]above:{[cont.]}{}},
    },
    split dir tree auto post/.style={% this gets applied to the first node after a break
        split dir tree post,
        tempkeylistc'={},
        tmpdimb/.option=y,
        for nodewalk={
            while={
                > ORw2+d _+d < On=! & {y}{tmpdimb}{##2-##1} {\textheight-#1} {n'}{1}%
            }{
            next,
            tempkeylistc/.option=name
        }%
    }{},
    % save the list
    split here auto siblings/.register=tempkeylistc,
    tikz+/.process={% this tries to redraw the edges to the following siblings
        OOw2{edge}{id}%
        {%
            \path [##1] (!u.parent anchor |- .north) ++(\forestregister{folder indent},1ex) coordinate (before ##2) |- (.child anchor);
            \edef\tempa{\foresteoption{split here auto siblings}}
            \foreach \i in \tempa \path [##1] (before ##2) |- ({forest cs:\i.child anchor});
        }%
    },
},
split dir tree/.code={%
    \forestset{%
        draw tree stage/.style={
            for root'={
                tempdima/.min={%
                    >OOw2+d{x}{min x}{####1+####2}%
                }{tree},
                tempdimb/.max={%
                    >OOw2+d{x}{max x}{####1+####2}%
                }{tree},
                for tree={%
                    to widest,
                },
            },
            tempcountb'=-1,
            do until={%
                strequal((split_here_ids),"")
            }{%
            tempkeylistb'={},
            tempkeylista'={},
            split register={split here ids}{,}{tempcounta,tempkeylistb+},
            split register={split here interjects}{,}{temptoksa,tempkeylista+},
            split here ids'/.register=tempkeylistb,
            split here interjects'/.register=tempkeylista,
            % Sašo Živanović: http://chat.stackexchange.com/transcript/message/28484520#28484520
            for nodewalk={%
                draw tree processing order/.style={%
                    filter={tree}{> ORw+n< OR> & {id}{tempcounta}{########1+1}{id}{tempcountb}}%
                }%
            }{},
            for root'={draw tree},
            TeX/.process={Rw{temptoksa}{\otherhiddenparcommand ####1\hiddenparcommand}},
            tempcountb'/.register=tempcounta,
        },
        for nodewalk={%
            draw tree processing order/.style={%
                filter={tree}{>OR>{id}{tempcountb}}%
            }%
        }{},
        for root'={draw tree},
    },
}%
},
split dir here auto/.style n args=2{%
    split dir tree pre,
    !next node.split dir tree auto post=#2,
    split here ids+/.option=id,
    %     !next node.split resume here ids+/.option=id,
    split={#1}{,}{split here toks,hide commas},
    split here interjects/.register=split here toks,
},
split dir tree auto/.style={%
    split dir tree,
    before drawing tree={%
        tempdima/.max={y}{tree},
        tempdimc/.register=tempdima,
        tempdimd/.min={y}{tree},
        tempdima-/.register=tempdimd,
        tempdimb'=\textheight,
        tmpdima'=10ex,
        tmpdimc'=\pagetotal,
        while={%
            >RR>{tempdima}{tempdimb}%
        }{%
        for nodewalk={%
            root',
            until={%
                > ROw2+d RRw2+d > {tempdimc}{y}{##1-##2} {tmpdima}{tmpdimc}{\textheight-##2-##1}%
            }{next node},
            previous node,
            split dir here auto/.process={R_w2{tmpdima}{continued}{{##2}{##1}}},
            next node,
            tempdima/.option=y,
            tempdimc/.register=tempdima,
            tempdima-/.register=tempdimd,
            tmpdima'=15ex,
            tmpdimc'=0pt
        }{},
    },
},
},
}
%Zeilenumbruch in der tikz Umgebung! Ende

\begin{document} 

    \begin{forest}
        for tree={
            folder,
            grow'=0,
            fit=band,
        },  
        \iftoggle{somevariable}{split dir tree auto,}{} %IF ABFRAGE FUNKTIONIERT NICHT 
        [ XYZ
        [ XYZ
        [ XYZ,edge label={node[pos=0.75,above,font=\scriptsize]{1}}
        [ XYZ,edge label={node[pos=0.75,above,font=\scriptsize]{1}}
        ]
        ]
        ]
        ]
    \end{forest}

\end{document}
5
  • Would you also write an answer for texwelt.de/wissen/fragen/23136/…?
    – moewe
    Commented Sep 28, 2018 at 14:21
  • 2
    @moewe I will, but I'm in a hurry now and have to get some things done. Maybe this (late) evening :)
    – Skillmon
    Commented Sep 28, 2018 at 14:25
  • Oh there no need to rush. I just wanted to tell you about the TeXwelt question to ensure that it also gets an answer.
    – moewe
    Commented Sep 28, 2018 at 14:30
  • 1
    @moewe perhaps I won't under the new circumstances :)
    – Skillmon
    Commented Sep 28, 2018 at 16:47
  • 1
    Ah yes, I see. I'm sorry to see that this was handled in such as ... suboptimal way.
    – moewe
    Commented Sep 28, 2018 at 20:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .