我使用简单的 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}