Eu tenho um arquivo chamado _runs.ini
. Dependendo do seu conteúdo, o documento é compilado de forma diferente. Tentei ler o conteúdo e executei um\ifthenelse
comando sem sucesso.
Aqui está meu 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}
O conteúdo de _runs.ini
is, 0
mas obviamente o \equal
-command não o reconhece como 0
.
O que estou fazendo de errado?
Responder1
E uma resposta com o 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}
Responder2
Se você tiver certeza de que o arquivo contém um número, recomendo uma estratégia mais simples.
\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}
Ou com catchfile
:
\documentclass{book}
\usepackage{catchfile}
\newcommand{\run}{%
\CatchFileDef{\pruns}{_runs.ini}{}%
\ifnum\pruns=0
true
\else
false
\fi
}
Você também pode usar ifthen
, se quiser:
\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}
Responder3
Esta resposta, usando readarray
package, é configurada para discernir se o único caractere do arquivo é "0" ou não. Se você precisar de um teste mais complexo (ou seja, se o arquivo puder ter mais de um caractere), informe-me os detalhes.
O \readdef
comando coloca o conteúdo do arquivo em a \def
, que posso comparar diretamente com an \if
(aqui presumo que o arquivo seja um único caractere).
\documentclass{article}
\usepackage{readarray}
\newcommand\getrun{\readdef{_runs.ini}{\mydata}}
\newcommand\startrun{\if0\mydata true\else false\fi}
\begin{document}
\getrun
\startrun
\end{document}
Responder4
Esquecido \ppruns
:
\usepackage{etoolbox}
\newcommand\startrun{%
\ifnumcomp{\pruns}{=}{0}{true}{false}
}
Ou melhor (TeX simples!):
\newcommand\startrun{%
\ifnum\pruns=0
true
\else
false
\fi
}