![在“boolexpr”中使用“switch”时出现“缺失数字”错误](https://linux22.com/image/244225/%E5%9C%A8%E2%80%9Cboolexpr%E2%80%9D%E4%B8%AD%E4%BD%BF%E7%94%A8%E2%80%9Cswitch%E2%80%9D%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9C%E7%BC%BA%E5%A4%B1%E6%95%B0%E5%AD%97%E2%80%9D%E9%94%99%E8%AF%AF.png)
\pdfoutput=1
\documentclass[12pt]{amsart}
\usepackage{boolexpr}
\def \p{1}
\def \q{1}
\begin{document}
\switch[\p=]
\case{\q}abc
\endswitch
def
\end{document}
编译上述内容时出现以下错误
! Missing number, treated as zero.
<to be read again>
\bex@=0 truepart
l.12 \endswitch
但如果我们把定义改为
\def \q{2}
或者将行改为
\switch[1=]
没问题。但只需将行改为
\case{1}abc
产生同样的错误。
知道为什么会发生这种情况吗?提前谢谢您。
答案1
似乎没有很好的文档记录,但示例显示需要计数器值。您可以使用以下方式欺骗包\numexpr
:
\switch[\numexpr\p\relax=]
\case{\q} abc
\endswitch
问题在于,必须boolexpr
以某种方式“宣布”要进行的测试类型;
\switch[\number\p=]
作品。
答案2
使用计数器代替宏:
\documentclass{amsart}
\usepackage{boolexpr}
\newcounter{p}\setcounter{p}{1}
\newcounter{q}\setcounter{q}{1}
\begin{document}
\switch[\value{p}=]
\case{\value{q}} abc
\endswitch
def
\end{document}