从 lua 查询布尔值的状态

从 lua 查询布尔值的状态

我可以毫无问题地在 lua 中查询和使用计数状态。但现在我想知道如何最好地使用布尔值来实现这一点。我一直在查看令牌库,但它似乎不允许获取和比较命令的内容。有人有什么好主意吗?

\documentclass[parskip=half-]{scrartcl}
\usepackage{expl3}

\ExplSyntaxOn
\bool_new:N \g_uf_some_bool
\int_new:N  \g_uf_some_int
\ExplSyntaxOff

\usepackage{luacode}
\begin{luacode}
local catlatex       = luatexbase.registernumber("catcodetable@latex")

function printifzero ()
 if tex.count["g_uf_some_int"]==0  then
  tex.sprint(catlatex,"int is zero")
 else
  tex.sprint(catlatex,"int is " .. tex.count["g_uf_some_int"])
 end
end

function printifbool ()
 -- if g_uf_some_bool  then --???
 tex.sprint(catlatex,"bool is true")
 -- else
 tex.sprint(catlatex,"bool is false")  
 --end
end

\end{luacode}
\begin{document}
\minisec{Integers}
\ExplSyntaxOn
\directlua{printifzero()}

\par
\int_gset:Nn\g_uf_some_int{42}
\directlua{printifzero()}

\minisec{booleans}
\bool_set_true:N \g_uf_some_bool
\directlua{printifbool()}
\par

\bool_set_false:N \g_uf_some_bool
\directlua{printifbool()}
\par

\ExplSyntaxOff
\end{document}

在此处输入图片描述

答案1

我似乎找到了答案。但是 luatex 手册中没有记录 used 字段,我只是在上下文代码中偶然发现它。所以我不知道它到底包含什么,也不知道它是否会在下一个版本中存在。

\documentclass[parskip=half-]{scrartcl}
\usepackage{expl3}
\ExplSyntaxOn
\bool_new:N \g_uf_some_bool
\int_new:N  \g_uf_some_int
\ExplSyntaxOff

\usepackage{luacode}
\begin{luacode}
local catlatex       = luatexbase.registernumber("catcodetable@latex")
local tbool =token.create("g_uf_some_bool")
local ttrue =token.create("c_true_bool")

function printifzero ()
 if tex.count["g_uf_some_int"]==0  then
  tex.sprint(catlatex,"int is zero")
 else
  tex.sprint(catlatex,"int is " .. tex.count["g_uf_some_int"])
 end
end

function printifbool ()
 if tbool.mode == ttrue.mode  then 
  tex.sprint(catlatex,"bool is true")
 else
  tex.sprint(catlatex,"bool is false")
 end
end


\end{luacode}
\begin{document}
\minisec{Integers}
\ExplSyntaxOn

\directlua{printifzero()}

\par
\int_gset:Nn\g_uf_some_int{42}
\directlua{printifzero()}

\minisec{booleans}
\bool_set_true:N \g_uf_some_bool
\directlua{printifbool()}
\par

\bool_set_false:N \g_uf_some_bool
\directlua{printifbool()}
\par

\bool_set_true:N \g_uf_some_bool
\directlua{printifbool()}
\par
\ExplSyntaxOff
\end{document}

在此处输入图片描述

相关内容