![在 etoolbox 中推广 \iftoggle](https://linux22.com/image/261938/%E5%9C%A8%20etoolbox%20%E4%B8%AD%E6%8E%A8%E5%B9%BF%20%5Ciftoggle.png)
我正在使用嵌套循环条件\iftoggle
,etoolbox
还有其他通用条件吗?通常它的工作方式如下:
\newtoggle{name}
\settoggle{name}{true}
\iftoggle{name}{do if name is true}{do if name is false}
现在,我想要类似这样的东西:
\newtoggle{name} % with 5 options, for example
\settoggle{name}{option3} % all the other option are false
\iftoggle{name}{do if option1 is true}{do if option2 is true}{do if option3 is true}{do if option4 is true}{do if option5 is true}
我知道有一种嵌套条件的解决方案,但也许还有其他直接的解决方案。有什么想法吗?
答案1
这是一个键值接口,正如约瑟夫赖特所说,它似乎是解决问题的方法。
\documentclass{article}
\usepackage{keyreader}
\makeatletter
\def\msg#1{\ifkrdindef\else Option chosen: #1\endgraf\fi}
\krddefinekeys{gitano}{%
choice/name/option1/{
option1.do=\msg{1},
option2.do=\msg{2},
option3.do=\msg{3},
option4.do=\msg{4},
option5.do=\msg{5}
}
;
}
% Example command, to reformat the list, process the keys, and print the results:
\newcommand\gitanooptions[1][]{%
\krdifblank{#1}{%
\krdsetkeys{gitano}{name=option1}%
}{%
\def\tempa##1=##2=##3\@nil{\unexpanded{##2}}%
\edef\tempa{\tempa#1==\@nil}%
\ifx\tempa\@empty
\krdsetkeys{gitano}{name=option1}%
\else
\def\tempb{}%
\@for\tempa:=\tempa\do{%
\edef\tempb{%
\unexpanded\expandafter{\tempb}%
\ifx\tempb\@empty\else,\fi
name=\unexpanded\expandafter{\tempa}%
}%
}%
\krdexpanded{\noexpand\krdsetkeys{gitano}{\tempb}}%
\fi
}%
}
\makeatother
% Examples:
\begin{document}
\gitanooptions[name={option1,option2}]
\gitanooptions[name]
\gitanooptions[name=option3]
\gitanooptions[name=option4]
\gitanooptions[name={option2,option5}]
\gitanooptions
\end{document}