为什么 expl3 布尔值被打印为 Γ 和 ∆(或 ` 和 ́ )?

为什么 expl3 布尔值被打印为 Γ 和 ∆(或 ` 和 ́ )?

下面的 MWE 指出expl3布尔值被打印为 Γ 和 ∆(或者,如果\usepackage[T1]{fontenc}使用,则打印为前后引号 ` 和 ́),取决于它们是假还是真:

\documentclass{article}
\usepackage{xparse}
\usepackage[T1]{fontenc}
\ExplSyntaxOn
\bool_new:N \falsebool
\bool_new:N \truebool
\bool_set_true:N \truebool
\cs_new_protected:Nn \_boolean_value:n
{
  A~\bool_if:NTF {#1}{true~($=1$)}{false~($=0$)}~ boolean~ is~ printed~ as:~#1
}
\NewDocumentCommand { \displaybooleans } { m }
{
  \_boolean_value:n{#1}
}
\ExplSyntaxOff
\begin{document}
\begin{itemize}
\item \displaybooleans{\falsebool}
\item \displaybooleans{\truebool}
\end{itemize}
\end{document}

你知道为什么吗?为什么在外部测试中,他们的值不是打印例如 0 和 1?

编辑

这是背景,真正的用例:在我的一个包中,该包由 编写expl3,我提供了一些(实际上很多)选项,让用户修复浮点变量、标记列表变量、布尔变量等。我考虑提供一个宏来显示所有正在使用的选项(默认选项和用户定义的选项)。浮点变量和标记列表变量可以以相当直接的方式打印:

  • The nice floating point variable is set to: \fp_use:N\g_a_nice_floating_point_variable_fp(尽管人们可以期望在排版环境中,与计算环境相反,The nice floating point variable is set to: \g_a_nice_floating_point_variable_fp它是足够的,即\fp_use:N多余的),
  • The nice token list variable is set to: \g_a_nice_token_list_variable_tl

我的问题是:为了打印布尔变量的当前值,是否需要经过测试\bool_if:NTF \g_a_nice_boolean_variable_bool { ... } { ... }来打印其当前值,或者是否有更直接的方法?

答案1

这就引出了一个非常古老的问题:“真理是什么?”(约翰福音 18:38)。

不幸的是,这个问题没有答案:真理(至少在数学中)可以是任何事物,只要它不同于谬误。真理只有相对于模型才有意义。

LaTeX3 对真假的思考方式与 Perl 相同:0 为假,1 为真。或者反过来。但是,我们不应该依赖于特定的实现,只要确保假永远相同,真不会改变即可。

错误条件的实现是返回常数 0,同样,正确条件的实现是返回常数 1,但这只是执行。诸如您的条件语句\falsebool应仅用于布尔表达式的上下文中,而不能单独使用。

与 TeX 中通常的情况一样,常量是通过 定义的\chardef,因此当在排版上下文中找到它时,\falsebool将排版插槽 0 中的字符和\truebool插槽 1 中的字符。

在 OT1 编码字体中,它们分别是 Gamma 和 Delta。在 T1 编码字体中,它们是重音符和尖音符。更一般地,它们将打印当前字体的 0 和 1 号槽中的字符。

如果你尝试\show\falsebool,你就会得到

> \falsebool=\char"0.

在终端上。

相关内容