\if_true 的示例:\fi:\else \reverse_if:N

\if_true 的示例:\fi:\else \reverse_if:N

看来expl3语言还不是很流行,我甚至找不到这个测试的一个例子。我试过了,但失败了。我的理解是,\reverse_if:N <primitive conditional>将检查其参数是否为True或,并适当地运行在或旁边False定义的。\if_false:\else:

\documentclass{beamer}

\mode<presentation>
{    \usetheme{metropolis}    }

\geometry{verbose,papersize={160mm,90mm}}
\setlength{\parindent}{0pt}

\ExplSyntaxOn
\NewDocumentCommand\ifelsetest{ m o }{
  Ltroiscommand~test \\
  optional~parameter~:~#2
  \if_false:
  false
  \else:
  else
  \fi:
  \reverse_if:N { #2 }
}
\ExplSyntaxOff

\begin{document}
\begin{frame}
\ifelsetest{test} % #2 should be -NoValue-, therefore I suppose 'False'

\ifelsetest{test}[optarg~shouldtesttrue] % Anything elsethan -NoValue- should
                                         % be 'True' I suppose

\end{frame}
\end{document}

答案1

具有参数规范的函数:N期望接收单个标记作为参数,因此\reverse_if:N { #1 }不合法。

实际上,\reverse_if:N是原始的别名\unless。如果你在中查看它interface3,你会看到

在此处输入图片描述

这意味着\reverse_if:N 必须是第 4.6.2 节中描述的原始条件之一,即

\if_true:  \if_false:  \if_meaning:w  \if:w  \if_catcode:w  \if_charcode:w
\if_cs_exist:N  \if_cs_exist:w  \if_mode_(...)

(最后包含用于测试排版模式的四个条件)以及

\if_int_compare:w  \if_dim:w

随后的任何其他操作\reverse_if:N都将产生错误。

另一方面,\reverse_if:N不鼓励直接使用这些条件和 of 来编写函数,而建议使用更高级的编程。这些原始条件无疑速度更快,但它们只应在必须简化代码以提高效率时使用,而这种情况并不常见。

因此,很少看到带有\else:或的代码。请查看有关布尔变量和函数的部分。\fi:

如果您希望\ifelsetest在存在可选参数时打印“true”,则应使用以下xparse功能:

\NewDocumentCommand{\ifelsetest}{mo}{%
  \IfNoValueTF{#2}{False}{True}%
}

\ifelsetest{text} % prints False

\ifelsetest{text}[whatever] % prints True

答案2

\reverse_if:N反转原始条件。也就是说,其\reverse_if:N \if_true:行为类似于\if_false:和。\reverse_if:N \if_false:\if_true:

\documentclass{article}

\begin{document}
\ExplSyntaxOn

\if_true: true~branch \else: false~branch \fi:

\par

\reverse_if:N \if_true: true~branch \else: false~branch \fi:

\end{document}

MWE 输出

您可以在 eTeX 中搜索\unless非 LaTeX3 语法的示例。

相关内容