我可以毫无问题地在 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}