Я пытаюсь извлечь текст из внешнего файла (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}
someexternalfile.txt:
sometext
Как мне решить эту проблему?
решение1
\ifx
сравнивает значения двух токенов, таким образом\ifx{\myreadline
сравнивает значение токена со значением токена . Значения этих токенов различаются, поэтому TeX пропускает вперед, пока не встретит токен сразу за сопоставлением, что является — - - -сопоставление не зависит от группового сопоставления.{1\myreadline\else}2\if..
\else
\fi
- Читающий аппарат TeX находится в состоянии M (середина строки) после чтения и токенизации фразы,
sometext
в то время как код категории символа возврата каретки равен 5 (конец строки). Таким образом, символ возврата каретки, добавленный благодаря -механизму,\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}