我正在尝试调试一些 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
打印到屏幕上。
平均能量损失
这个例子实现了我想要的功能,但我想知道的是,是否已经有一个原生的 LaTeX3 命令可以实现与我的相同的功能\__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 }