如何声明一个名称中带有数字的新布尔变量?

如何声明一个名称中带有数字的新布尔变量?

我想生成布尔变量(例如\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}

相关内容