在自定义文档类编写中,已知单个option对应实现单个命令的语句如下:
\if@classname@option
%为真时运行的命令
\else
%为假时运行的命令
\fi
那么,怎么编写条件语句,使得有限多个自定义option的添加对应运行同一命令呢?类似于用到“同或(or)”逻辑关系。
<若\if@classname@optionI, \if@classname@optionII, ..., 其中一者为真>
% 运行命令1
\else
% 运行命令2
\fi
拓展:如果是“与(and)”(这么多个option激活才能运行某一命令)、“非(or)”(不是某一option激活就能运行某一命令)的逻辑关系,那该如何实现呢?
\begin{filecontents*}[overwrite]{myclass.cls}
\ProvidesClass{myclass}
\LoadClass{article}
\RequirePackage[margin = 2cm]{geometry}
\newif\if@classname@option@i
\newif\if@classname@option@ii
\DeclareOption{option-i}{
\@classname@option@itrue
}
\DeclareOption{option-ii}{
\@classname@option@iitrue
}
\ProcessOptions*\relax
\if@classname@option@i%
\def\cmd{Y}%
\else%
\if@classname@option@ii%
\def\cmd{Y}%
\else
\def\cmd{N}%
\fi
\fi
\end{filecontents*}
\documentclass{myclass}
% \documentclass[option-i]{myclass}
% \documentclass[option-ii]{myclass}
\begin{document}
\cmd
\end{document}
扩展问题,可以看看 expl3
, 会方便很多.
已明白,感谢解惑。
为什么在其它语言中比较常见的多条件分支而在
Plain-TeX
中我只找到了如下的一些命令:似乎在
latex2e
中提供的原始提供的\ifthenelse
命令也不适合太处理这类多分支命令,感觉处理一个小小的问题遇到的障碍却不是很小,而且不是特别方便。