Tengo un archivo llamado _runs.ini
. Dependiendo de su contenido, el documento se redacta de forma diferente. Intenté leer el contenido y ejecuté un \ifthenelse
comando sin éxito.
Aquí está mi 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}
El contenido de _runs.ini
es 0
pero obviamente el \equal
comando no lo reconoce como 0
.
¿Qué estoy haciendo mal?
Respuesta1
Y una respuesta con el 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}
Respuesta2
Si está seguro de que el archivo contiene un número, le recomiendo una estrategia más sencilla.
\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}
O con catchfile
:
\documentclass{book}
\usepackage{catchfile}
\newcommand{\run}{%
\CatchFileDef{\pruns}{_runs.ini}{}%
\ifnum\pruns=0
true
\else
false
\fi
}
También puedes usar ifthen
, si lo deseas:
\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}
Respuesta3
Esta respuesta, utilizando readarray
el paquete, está configurada para discernir si el único carácter del archivo es un "0" o no. Si necesita una prueba más compleja (es decir, si el archivo puede tener más de un carácter), déjeme saber los detalles.
El \readdef
comando coloca el contenido del archivo en a \def
, que luego puedo comparar directamente con an \if
(aquí asumo que el archivo es de un solo carácter).
\documentclass{article}
\usepackage{readarray}
\newcommand\getrun{\readdef{_runs.ini}{\mydata}}
\newcommand\startrun{\if0\mydata true\else false\fi}
\begin{document}
\getrun
\startrun
\end{document}
Respuesta4
Olvidó \ppruns
:
\usepackage{etoolbox}
\newcommand\startrun{%
\ifnumcomp{\pruns}{=}{0}{true}{false}
}
O mejor (¡texto simple!):
\newcommand\startrun{%
\ifnum\pruns=0
true
\else
false
\fi
}