У меня есть файл с именем _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
package, настроен на то, чтобы распознавать, является ли единственный символ файла "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
}