파일에서 번호 읽기

파일에서 번호 읽기

이라는 파일이 있습니다 _runs.ini. 내용에 따라 문서가 다르게 컴파일됩니다. 내용을 읽으려고 시도했지만 \ifthenelse성공하지 못한 채 -command를 실행했습니다.

내 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-command는 로 인식하지 않습니다 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
}

관련 정보