ファイルから数値を読み取る

ファイルから数値を読み取る

というファイルがあります_runs.ini。その内容に応じて、ドキュメントは異なる方法でコンパイルされます。内容を読み取ろうとし、コマンドを実行しましたが、\ifthenelse成功しませんでした。

これが私の MWE です:

\documentclass{book}
\usepackage{ifthen}

\newcommand\getrun{%
    \newread\tmp
    \openin\tmp=_runs.ini
    \read\tmp to \pruns
    \def\ppruns{\numexpr \pruns\relax}
    \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\equal{\ppruns}{0}}
        {true}{false}
}

\begin{document}

\getrun
\startrun

\end{document}

の内容_runs.iniは です0が、明らかに\equal- コマンドはそれを として認識しません0

何が間違っているのでしょうか?

答え1

そして、オリジナルの答え\ifthenelse

\documentclass{book}
\usepackage{ifthen}

\newcommand\getrun{%
    \newread\tmp
    \openin\tmp=_runs.ini
    \read\tmp to \pruns
    \def\ppruns{\numexpr \pruns\relax}
    \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\equal{\pruns}{0 }}%<-- space!
        {true}{false}
}

\newcommand\startrunb{%
  \ifthenelse{\ppruns=0}
        {true}{false}
}

\begin{document}

\getrun
\startrun

\startrunb
\end{document}

答え2

ファイルに数字が含まれていることが確実な場合は、より単純な戦略をお勧めします。

\documentclass{book}

\newread\tmp
\newcommand\getrun{%
  \openin\tmp=_runs.ini
  \read\tmp to \pruns
  \closein\tmp
}

\newcommand\startrun{%
  \ifnum\pruns=0
    true
  \else
    false
  \fi
}

\begin{document}

\getrun
\startrun

\end{document}

または、次のようにしますcatchfile:

\documentclass{book}
\usepackage{catchfile}

\newcommand{\run}{%
  \CatchFileDef{\pruns}{_runs.ini}{}%
  \ifnum\pruns=0
     true
  \else
     false
  \fi
}

ifthen必要に応じて、を使用することもできます。

\documentclass{book}
\usepackage{ifthen}

\newread\tmp
\newcommand\getrun{%
  \openin\tmp=_runs.ini
  \read\tmp to \pruns
  \closein\tmp
}

\newcommand\startrun{%
  \ifthenelse{\pruns=0}{true}{false}
}

\begin{document}

\getrun
\startrun

\end{document}

答え3

この回答は、readarrayパッケージを使用して、ファイルの単独の文字が「0」であるかどうかを判別するように設定されています。より複雑なテスト (つまり、ファイルが 1 文字以上になる可能性があるかどうか) が必要な場合は、詳細をお知らせください。

この\readdefコマンドはファイルの内容を に配置し\def、それを と直接比較することができます\if(ここでは、ファイルは 1 文字であると想定しています)。

\documentclass{article}
\usepackage{readarray}
\newcommand\getrun{\readdef{_runs.ini}{\mydata}}
\newcommand\startrun{\if0\mydata true\else false\fi}
\begin{document}
\getrun
\startrun
\end{document}

答え4

忘れた\ppruns:

\usepackage{etoolbox}

\newcommand\startrun{%
  \ifnumcomp{\pruns}{=}{0}{true}{false}
}

あるいはもっと良い方法(プレーンな TeX です):

\newcommand\startrun{%
  \ifnum\pruns=0
    true
  \else
    false
  \fi
}

関連情報