我在文件中使用条件测试.cls
,其中有两个选项“ final
”和“ draft
”。我对条件测试相当熟悉,但我只是好奇想知道如何or
在以下代码中定义“ ”。
\if@final OR \if@draft FINAL TEST \else NO TEST \fi\fi
编辑:
我尝试了以下代码并获得了所需的结果,所以我只想知道我是否可以\or
在条件中使用类似“”之类的东西\newif
。换句话说,这样的命令(我的意思是\or
)是否存在?
\documentclass[draft]{article}
\makeatletter
\newif\if@final
\@finalfalse
\DeclareOption{final}{\@finaltrue}
\newif\if@draft
\@draftfalse
\DeclareOption{draft}{\@drafttrue}
\ProcessOptions
\newcommand{\mytest}{\if@final FINAL TEST \else \if@draft FINAL TEST \else NO TEST \fi\fi}
\makeatother
\begin{document}
\mytest
\end{document}
答案1
您的陈述的基础OR
如下:
\if@final TRUE\else\if@draft TRUE\else FALSE\fi\fi
以下最小示例说明了这一点:
\documentclass{article}
\begin{document}
\makeatletter
\newif\if@final \newif\if@draft
\newcommand{\test}{\if@final TRUE\else\if@draft TRUE\else FALSE\fi\fi}
% final = false; draft = false
\@finalfalse \@draftfalse \test
% final = true; draft = false
\@finaltrue \@draftfalse \test
% final = false; draft = true
\@finalfalse \@drafttrue \test
% final = true; draft = true
\@finaltrue \@drafttrue \test
\end{document}
得出OR
真值表:
通过使用通过以下方式定义的布尔值获得可比较的输出etoolbox
:
\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\makeatletter
%\newif\if@final \newif\if@draft
\newbool{@final} \newbool{@draft}
\newcommand{\test}{\ifboolexpr{bool {@final} or bool {@draft}}{TRUE}{FALSE}}
% final = false; draft = false
\boolfalse{@final} \boolfalse{@draft} \test
% final = true; draft = false
\booltrue{@final} \boolfalse{@draft} \test
% final = false; draft = true
\boolfalse{@final} \booltrue{@draft} \test
% final = true; draft = true
\booltrue{@final} \booltrue{@draft} \test
\end{document}
当然,你可以将TRUE
/FALSE
输出更改为任何你想要的内容。
正如 Marco 所说,etoolbox
的布尔标志为 LaTeX 的 提供了一个前端\newif
。因此,您可以使用\newbool
或来定义它们\newif
。请参阅部分3.5 布尔标志(第 12 页起)etoolbox
文档。