我有一個名為_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
包來設置,以辨別文件的單個字元是否為“0”。如果您需要更複雜的測試(即文件是否可以超過一個字元),請告訴我具體細節。
該\readdef
命令將文件內容放入 a 中\def
,然後我可以將其直接與 an 進行比較\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
}