在 etoolbox 中推广 \iftoggle

在 etoolbox 中推广 \iftoggle

我正在使用嵌套循环条件\iftoggleetoolbox还有其他通用条件吗?通常它的工作方式如下:

\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}

相关内容