Прочитать номер из файла

Прочитать номер из файла

У меня есть файл с именем _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

Этот ответ, использующий readarraypackage, настроен на то, чтобы распознавать, является ли единственный символ файла "0" или нет. Если вам нужен более сложный тест (например, может ли файл быть более чем одним символом), сообщите мне подробности.

Команда \readdefпомещает содержимое файла в \def, которое затем я могу напрямую сравнить с \if(здесь я предполагаю, что файл представляет собой один символ).

\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
}

Связанный контент