\ifeof의 부정

\ifeof의 부정

파일의 줄을 조판하려고 합니다:

\openin0=MyFile

\loop
  \read0to\linein
  \linein
  \ifeof0              % Fails here
\repeat

분명히, 나는 테스트하고 싶다~ 아니다\ifeof, 하지만 TeXBook의 Ch 20에는 부울 부정 연산자가 표시되지 않습니다. 일반 TeX으로 이 작업을 수행할 수 있나요?

답변1

일반 TeX가 무엇을 의미하는지에 따라 약간 다릅니다.

cmhughes가 방금 주석에서 언급했듯이 e-TeX unless명령을 사용하여 표현식을 부정하거나 LaTeX 정의를 복사하여 \loop다음을 수행할 수 있습니다.

\openin0=MyFile

\loop
  \read0to\linein
  \linein
  \ifeof0              % Fails here
  \else
\repeat

확장되지 않은 TeX로 작업할 수 있도록 말이죠.

평원 \loop

\def\loop#1\repeat{\def\body{#1}\iterate}
\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
\let\repeat=\fi 

LaTeX는 다음 정의를 사용하므로 \else작동합니다.

\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
  \iterate \let\iterate\relax}
\let\repeat\fi

답변2

이론을 좋아한다면 David Kastrup의 \ifnot매크로는 다음과 같습니다.

\def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}

이것은 다음과 같이 사용될 수 있습니다.

\loop ... \ifnot{\ifeof\stream} ... \repeat

보다빅터 에이크후트(Victor Eijkhout), TUGBoat.

관련 정보