외부 파일(someexternalfile.txt)에서 텍스트를 추출하여 주어진 문자열( )과 비교하려고 하는데 sometext
외부 텍스트와 주어진 문자열이 동일해야 함에도 불구하고 동일하지 않다는 메시지가 나타납니다.
유액:
\documentclass[12pt,a4paper]{article}
\newread\myread
\openin\myread=someexternalfile.txt
\begin{document}
\read\myread to \myreadline
\ifx{\myreadline}{sometext}{Same.}\else{Not same.}\fi
\end{document}
일부외부파일.txt:
sometext
이 문제를 어떻게 해결할 수 있나요?
답변1
\ifx
두 토큰의 의미를 비교하여\ifx{\myreadline
토큰의 의미를 토큰의 의미와 비교합니다 . 이러한 토큰의 의미는 다르기 때문에 TeX는 일치 바로 뒤에 있는 토큰을 만날 때까지 건너뜁니다. 즉 — - - - 일치는 그룹 일치와 독립적입니다.{1\myreadline\else}2\if..
\else
\fi
- TeX의 읽기 장치는 구문을 읽고 토큰화한 후 M(줄 중간) 상태이고
sometext
캐리지 리턴 문자의 범주 코드는 5(줄 끝)입니다. 따라서 -mechanism으로 인해 추가된 캐리지 리턴 문자는\endlinechar
매크로의 대체 텍스트가 되는 공백 토큰을 생성합니다\myreadline
.\endlinechar
를 통해 -메커니즘을 끌 수 있습니다\endlinechar=-1\relax
.
\begin{filecontents*}{someexternalfile.txt}
sometext
\end{filecontents*}
\documentclass[12pt,a4paper]{article}
\newread\myread
\openin\myread=someexternalfile.txt
\begin{document}
\begingroup
\endlinechar=-1\relax
\global\read\myread to \myreadline
\endgroup
\def\sometext{sometext}
\def\someothertext{someothertext}
\ifx\myreadline\sometext Same.\else Not same.\fi
\ifx\myreadline\someothertext Same.\else Not same.\fi
\end{document}
답변2
또한 끝에 공백을 추가해야 합니다. 를 사용하여 catcode를 확인하는 것이 좋습니다 \meaning
.
\begin{filecontents*}{someexternalfile.txt}
sometext
\end{filecontents*}
\documentclass[12pt,a4paper]{article}
\newread\myread
\openin\myread=someexternalfile.txt
\begin{document}
\read\myread to\myreadline
(\myreadline)
\def\test{sometext }%
\ifx\myreadline\test\relax Same.\else Not same.\fi
\end{document}