![处理 \ifnum 的“!缺少数字,视为零。”](https://linux22.com/image/251016/%E5%A4%84%E7%90%86%20%5Cifnum%20%E7%9A%84%E2%80%9C%EF%BC%81%E7%BC%BA%E5%B0%91%E6%95%B0%E5%AD%97%EF%BC%8C%E8%A7%86%E4%B8%BA%E9%9B%B6%E3%80%82%E2%80%9D.png)
假设我有一个变量,它可能是也可能不是数字;当它不是数字时,我该如何处理,而不会因“!缺少数字,视为零”而崩溃。?
从实际角度来看,请考虑以下 MWE:
\documentclass{book}
\begin{document}
\def\mytestvar{4}
\ifnum\mytestvar=2 %
\typeout{Test 1 true} %
\else %
\typeout{Test 1 false (as expected)} %
\fi
\def\mytestvar{2}
\ifnum\mytestvar=2 %
\typeout{Test 2 true (as expected)} %
\else %
\typeout{Test 2 false} %
\fi
\def\mytestvar{ mistake}
\ifnum\mytestvar=2 %
\typeout{Test 3 true} %
\else %
\typeout{Test 3 false (as expected)} %
\fi
\def\mytestvar{2}
\ifnum\mytestvar=2 %
\typeout{Test 4 true (as expected)} %
\else %
\typeout{Test 4 false} %
\fi
\end{document}
输出结果如下:
Test 1 false (as expected)
Test 2 true (as expected)
! Missing number, treated as zero.
<to be read again>
m
l.23 \ifnum\mytestvar
=2 %
?
我怎样才能使测试 3 以错误通过(而不是崩溃),以便测试 4 在同一次运行中也能表现良好?希望不包括任何额外的软件包?
答案1
您可以使用\ifnum2=0\mytestvar
。如果\mytestvar
扩展为数字,则前导 0 无关紧要,但如果不是数字,则至少会有一个数字,这也会触发错误的分支。