Я считываю число (как текст) из aux-файла и хочу провести \ifnum
над ним числовой тест ( ). Я могу использовать его с помощью \setcounter
и \value
, но я действительно не хочу создавать счетчик только для того, чтобы провести паршивый тест. Есть ли более простой способ?
Использовать pgfmath ничуть не проще.
\documentclass{article}
\newcount\test
\newcounter{test}
\begin{document}
\def\temp{1}
\setcounter{test}{\temp}
\ifnum\value{test}>0 Yea!
\else Boo!
\fi
\test=\temp
\ifnum\test>0 Yea!
\else Boo!
\fi
\end{document}
Оглядываясь назад, моя ошибка очевидна. В выражении типа
\test=1
конец строки завершает как добавление цифр, так и преобразование "1" в число. Но с
\test=\temp
конец строки потребляется, завершая имя макроса. Я подозреваю, что окончательное расширение этого на самом деле
\test=1 Boo!
что законно, но слишком поздно. Самое простое решение
\test=\temp\relax
используется \relax
для принудительного завершения выражения.
решение1
Как я указал в своем комментарии, вы можете обойтись без счетчиков. Просто используйте \def
в качестве аргумента. Если вам нужен более сложный расчет, вы можете использовать \numexpr
, как в моем 2-м примере.
\documentclass{article}
\begin{document}
\def\temp{1}
\def\X{2}
\ifnum\temp>0 Yea!
\else Boo!
\fi
\ifnum\numexpr\temp-\X\relax>0 Yea!
\else Boo!
\fi
\end{document}
В ответ на комментарий автора поста о сложности смешивания токенов и счетчиков я опубликую этот MWE, который работает с этой смесью:
\documentclass{article}
\newcounter{mycount}
\setcounter{mycount}{0}
\begin{document}
\def\temp{1}
\ifnum\value{mycount}>\temp Yea!
\else Boo!
\fi
\end{document}