というファイルがあります_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
}