基于宏的森林树木标志

基于宏的森林树木标志

我使用简单的 y/n 宏作为文档中的标志来包含或排除整个文档的某些部分(这些通常位于单独的“config.tex”文件中,以方便使用)。使用 forest 包时,我使用此方法(使用 pdftex)得到了奇怪的结果。插入的文本似乎被解释为文本,而不是添加或未添加的叶子。

我做错了什么?提前感谢您的帮助。

最小工作示例:

\documentclass[]{scrreprt}

\usepackage{ifthen}
\usepackage[edges]{forest}

\newcommand{\AddIf}[3]{\ifthenelse{\equal{#1}{y}}{#2}{#3}}

\newcommand{\hasOptionOne}{y}
\newcommand{\hasOptionFour}{y}

\begin{document}

The user has the following options:
\begin{itemize}
    \AddIf{\hasOptionOne}{\item Option One}{}
    \item Option Two
    \item Option Three
    \AddIf{\hasOptionFour}{\item Option Four}{}
\end{itemize}

\begin{figure}
    \centering
    \caption{Available Options}
    \label{fig-available-options}
    \begin{forest}
        for tree={draw,align=center},
        forked edges,
        [Main item
            \AddIf{\hasOptionOne}{[Option One]}{}
            [Option Two]
            [Option Three]
            \AddIf{\hasOptionFour}{[Option Four]}{}
        ]
    \end{forest}
\end{figure}

\end{document}

结果:

结果

答案1

既然你要求了...我\AddIf用某个可以适当扩展的版本替换了你的命令。然后使用了一个技巧,它也有一些应用pgfplots等等。它确保树的内容首先得到扩展,然后再传递到森林。

\documentclass[]{scrreprt}

% \usepackage{ifthen} % no longer used here
\usepackage[edges]{forest}
\newcommand{\Yes}{y}
\newcommand{\AddIf}[3]{\ifx#1\Yes%
#2%
\else
#3%
\fi}

\newcommand{\hasOptionOne}{y}
\newcommand{\hasOptionFour}{y}

\begin{document}

The user has the following options:
\begin{itemize}
    \AddIf{\hasOptionOne}{\item Option One}{}
    \item Option Two
    \item Option Three
    \AddIf{\hasOptionFour}{\item Option Four}{}
\end{itemize}

\begin{figure}
    \centering
    \caption{Available Options}
    \label{fig-available-options}
    \edef\temp{\noexpand\begin{forest}
        for tree={draw,align=center},
        forked edges,
        [Main item
            \AddIf{\hasOptionOne}{[Option One]}{}
            [Option Two]
            [Option Three]
            \AddIf{\hasOptionFour}{[Option Four]}{}
        ]
    \noexpand\end{forest}}
    \temp
\end{figure}

\end{document}

在此处输入图片描述

相关内容