\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}