我有一个名为的文件_runs.ini
。根据其内容,文档的编译方式不同。我尝试读取内容并执行 -command,\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
命令将文件内容放入\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
}