我试图从外部文件(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
比较两个 token 的含义,从而\ifx{\myreadline
将 token 的含义与 token 的含义进行比较。这些 token 的含义不同,因此 TeX 会跳过前面的步骤,直到遇到匹配后的 token ,也就是 ——匹配与组匹配无关。{1\myreadline\else}2\if..
\else
\fi
- TeX 的读取装置在读取并标记短语后处于状态 M(行中),
sometext
而回车符的类别代码为 5(行尾)。因此,由于 -mechanism 而附加的回车符\endlinechar
会产生一个空格标记,该标记也会成为宏的替换文本。您可以通过\myreadline
关闭-mechanism 。\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}