在不停止 latex 的情况下将布尔值打印到终端

在不停止 latex 的情况下将布尔值打印到终端

我正在尝试调试一些 LaTeX3 代码。为此,我想将内部生成的布尔值写入终端,但我不想停止 LaTeX 运行的工作流程。

为了解释起见,我们假设布尔值被称为

\l__my_private_boolean_bool

我不想做以下事情:

\bool_show:N \l__my_private_boolean_bool

因为那会阻止一切。

相反,我想做如下的事情:

\msg_term:x { Boolean~value~is:~~\use:c {l__my_private_boolean_bool}} 

但发送到终端的是

Boolean value is: \__my_private_boolean_bool

我期待(并希望)看到

Boolean value is:  false

或者

Boolean value is:  true

有什么建议么?

编辑

我也尝试过:

\msg_term:x { Boolean~value~is:~~\cs_meaning:c {l__my_private_boolean_bool}} 

但后来我得到了一个神秘的

\char"0

打印到屏幕上。

平均能量损失

这个例子实现了我想要的功能,但我想知道的是,是否已经有一个原生的 La​​TeX3 命令可以实现与我的相同的功能\__ace_show_bool:N

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\bool_new:N \l__ace_test_bool
\cs_new:Npn \__ace_show_bool:N #1 {
    \bool_if:nTF { #1 }
        { true }{ false }
}

\NewDocumentCommand{\testsetbool}{ m }{
    \str_if_eq:nnTF {true}{#1}
        {
            \bool_gset_true:N \l__ace_test_bool
        }
        {
            \bool_gset_false:N \l__ace_test_bool
        }
    \msg_term:x { Boolean~is:~~\__ace_show_bool:N \l__ace_test_bool }
}

\ExplSyntaxOff
\begin{document}

First \testsetbool{true}

Second \testsetbool{false}

Third \testsetbool{true}
\end{document}

答案1

LaTeX3 的bool数据类型不是通过简单地将true或存储false在宏中来实现的,因此您不能简单地插入变量名并期望它打印出来。事实上,随着时间的推移,底层实现已经发生了变化,因为存在具有细微不同优点/问题的替代方法。因此,使用它们的唯一“正确”方法是在条件语句中:在里面\bool_show:N就是这样发生的。因此,如果您想打印 的值bool,或将其存储在其他变量中,您需要一个条件

\bool_if:NTF \l_my_bool
  { TRUE }
  { FALSE }

相关内容