Ich habe eine Datei namens _runs.ini
. Je nach Inhalt wird das Dokument unterschiedlich zusammengestellt. Ich habe versucht, den Inhalt zu lesen und habe einen \ifthenelse
-Befehl ausgeführt, ohne Erfolg.
Hier ist mein 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}
Der Inhalt von _runs.ini
ist 0
, aber der \equal
-Befehl erkennt ihn offensichtlich nicht als 0
.
Was mache ich falsch?
Antwort1
Und eine Antwort mit dem Original\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}
Antwort2
Wenn Sie sicher sind, dass die Datei eine Nummer enthält, empfehle ich eine einfachere Strategie.
\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}
Oder mit catchfile
:
\documentclass{book}
\usepackage{catchfile}
\newcommand{\run}{%
\CatchFileDef{\pruns}{_runs.ini}{}%
\ifnum\pruns=0
true
\else
false
\fi
}
Sie können ifthen
bei Bedarf auch Folgendes verwenden:
\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}
Antwort3
Diese Antwort, die readarray
ein Paket verwendet, ist so eingerichtet, dass sie erkennt, ob das einzelne Zeichen der Datei eine „0“ ist oder nicht. Wenn Sie einen komplizierteren Test benötigen (d. h. wenn die Datei mehr als ein einzelnes Zeichen enthalten kann), teilen Sie mir die Einzelheiten mit.
Der \readdef
Befehl platziert den Dateiinhalt in eine \def
, die ich dann direkt mit einer vergleichen kann \if
(hier gehe ich davon aus, dass die Datei ein einzelnes Zeichen ist).
\documentclass{article}
\usepackage{readarray}
\newcommand\getrun{\readdef{_runs.ini}{\mydata}}
\newcommand\startrun{\if0\mydata true\else false\fi}
\begin{document}
\getrun
\startrun
\end{document}
Antwort4
Vergessen \ppruns
:
\usepackage{etoolbox}
\newcommand\startrun{%
\ifnumcomp{\pruns}{=}{0}{true}{false}
}
Oder besser (einfaches TeX!):
\newcommand\startrun{%
\ifnum\pruns=0
true
\else
false
\fi
}