将字符串转换为计数

将字符串转换为计数

我正在从辅助文件中读取一个数字(作为文本),我想\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,如我的第二个示例所示。

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

在此处输入图片描述


为了跟进 OP 关于混合代币和计数器难度的评论,我将发布适用于该混合的 MWE:

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

相关内容