我想生成布尔变量(例如\a1_bool
,\a2_bool
等等,这取决于变量的值)。但是当我生成它时,我收到一个错误:
! Missing number, treated as zero.
<to be read again>
}
l.7 ...xist:NTF{\l__b_\int_eval:N{\g__a_int}_bool}
?
\documentclass{article}
\usepackage{expl3}
\pagestyle{empty}
\ExplSyntaxOn
\int_gzero_new:N{\g__a_int}
\bool_if_exist:NTF{\l__b_\int_eval:N{\g__a_int}_bool}{\message{variable exists}}{\bool_new:N{\l__b_\int_eval:N{\g__a_int}_bool}}
\ExplSyntaxOff
\begin{document}
\end{document}
答案1
您使用了错误的变体。一个N
参数只需要一个(通常不带括号的)参数,因此这是正确的:
\bool_if_exist:NTF \l_tmpa_bool { true } { false }
虽然这是错误的:
\bool_if_exist:NTF { l_tmpa_bool } { true } { false } % WRONG!
因为您传递给的第一个(N
)参数\bool_if_exist:NTF
是一个包含 11 个字符标记的列表(l
_
t
m
p
a
_
b
o
o
l
)。
您希望这里的变体从参数标记中c
生成“控制序列名称”:c
% ↓
\bool_if_exist:cTF { l_tmpa_bool } { true } { false }
同样适用于\bool_new:c
,而不是\bool_new:N
。此外,\int_eval:N
不存在。您在此处想要的功能是\int_use:N
:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\int_gzero_new:N \g__kozlovskiy_a_int
\bool_if_exist:cTF { l__kozlovskiy_b_ \int_use:N \g__kozlovskiy_a_int _bool }
{ \iow_term:n { variable~exists } }
{ \bool_new:c { l__kozlovskiy_b_ \int_use:N \g__kozlovskiy_a_int _bool } }
\ExplSyntaxOff
\begin{document}
\end{document}