Estoy intentando extraer texto de un archivo externo (someexternalfile.txt) y compararlo con una cadena determinada ( sometext
) pero dice que el texto externo y la cadena dada no son iguales (aunque deberían serlo).
Látex:
\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}
algún archivo externo.txt:
sometext
¿Como puedo resolver esto?
Respuesta1
\ifx
compara los significados de dos tokens, por lo tanto\ifx{\myreadline
compara el significado del token con el significado del token . Los significados de estos tokens difieren, por lo que TeX avanza hasta encontrar el token justo detrás de la coincidencia, que es — - - -la coincidencia es independiente de la coincidencia de grupo.{1\myreadline\else}2\if..
\else
\fi
- El aparato de lectura de TeX está en el estado M (mitad de línea) después de leer y tokenizar la frase,
sometext
mientras que el código de categoría del carácter de retorno de carro es 5 (final de línea). Por lo tanto, el carácter de retorno de carro agregado debido al\endlinechar
mecanismo produce un token de espacio que también lo convierte en el texto de reemplazo de la macro\myreadline
. Puede desactivar el\endlinechar
mecanismo mediante\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}
Respuesta2
También necesitas agregar un espacio al final. Es una buena idea comprobar el código cat usando \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}