Convertendo strings em contagens

Convertendo strings em contagens

Estou lendo um número (como texto) do arquivo aux e quero fazer um teste numérico ( \ifnum) nele. Posso fazer isso usando \setcounterand \value, mas realmente não quero criar um contador apenas para fazer um teste ruim. Existe uma maneira mais simples?

Usar o pgfmath não é nem um pouco mais simples.

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

Em retrospecto, meu erro é óbvio. Numa expressão como

\test=1

o fim da linha encerra a adição de dígitos e a conversão de "1" em uma contagem. Mas com

\test=\temp

o fim de linha é consumido encerrando o nome da macro. Eu suspeito que a expansão final disso seja na verdade

\test=1 Boo!

o que é legal, mas é tarde demais. A solução mais simples

\test=\temp\relax

usa \relaxpara forçar a conclusão da expressão.

Responder1

Como indiquei no meu comentário, você pode dispensar os contadores. Basta usar o \defcomo argumento. Se precisar de um cálculo mais complexo, você pode usar \numexpr, como no meu segundo exemplo.

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

insira a descrição da imagem aqui


Para acompanhar o comentário do OP sobre a dificuldade de misturar tokens e contadores, postarei este MWE que funciona com essa mistura:

\documentclass{article}
\newcounter{mycount}
\setcounter{mycount}{0}
\begin{document}
\def\temp{1}
\ifnum\value{mycount}>\temp Yea!
\else Boo!
\fi
\end{document}

informação relacionada