文字列をカウントに変換する

文字列をカウントに変換する

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

コメントで述べたように、カウンターは不要です。 を引数として使用します。より複雑な計算が必要な場合は、 2 番目の例のように を\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}

関連情報