在由 \newif 定义的条件测试中,“或”之类的东西可以接受吗?

在由 \newif 定义的条件测试中,“或”之类的东西可以接受吗?

我在文件中使用条件测试.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‎
‎\@‎final‎false‎
‎\DeclareOption{‎final‎}{\@‎final‎true}‎
‎\newif\if@‎draft‎‎
‎\@‎draft‎false‎
‎\DeclareOption{‎draft‎}{\@‎draft‎true}‎‎
‎‎\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真值表:

enter image description here

通过使用通过以下方式定义的布尔值获得可比较的输出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文档

相关内容