Ich versuche, Text aus einer externen Datei (someexternalfile.txt) zu extrahieren und ihn mit einer gegebenen Zeichenfolge ( sometext
) zu vergleichen, aber es wird angezeigt, dass der externe Text und die gegebene Zeichenfolge nicht identisch sind (obwohl sie es sein sollten).
Latex:
\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}
eineexterneDatei.txt:
sometext
Wie kann ich das lösen?
Antwort1
\ifx
vergleicht die Bedeutungen zweier Token,\ifx{\myreadline
vergleicht also die Bedeutung des Tokens mit der Bedeutung des Tokens . Die Bedeutungen dieser Token sind unterschiedlich, daher springt TeX weiter, bis es auf das Token direkt hinter der Übereinstimmung stößt, die — - - - Übereinstimmung ist unabhängig von Gruppenübereinstimmung.{1\myreadline\else}2\if..
\else
\fi
- Der Leseapparat von TeX befindet sich nach dem Lesen und Tokenisieren der Phrase im Zustand M (Zeilenmitte),
sometext
wobei der Kategoriencode des Wagenrücklaufzeichens 5 (Zeilenende) ist. Das durch den\endlinechar
-Mechanismus angehängte Wagenrücklaufzeichen ergibt also ein Leerzeichen, das ebenfalls in den Ersetzungstext des Makros gelangt . Sie können den -Mechanismus über\myreadline
abschalten .\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}
Antwort2
Sie müssen am Ende auch ein Leerzeichen hinzufügen. Es ist eine gute Idee, den Catcode mit zu überprüfen \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}