Преобразование строк в числа

Преобразование строк в числа

Я считываю число (как текст) из 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}

Связанный контент