从外部文件放入?

从外部文件放入?

我需要编写一个命令,从文本文件中读取一行并扩展到该行的内容,下一个命令读取下一行,依此类推。

...
\command{arg}
...
\command{arg}
...
\command{arg}
...

宏参数不能用作外部文件中的索引,并且外部文件是由 Python 脚本生成的。

Ethan:: 文本文件包含由 python 脚本逐行生成的阿拉伯文本...在 LateX(XeLateX)的第一遍中,每个 \command 将其参数写入 fileIn.txt(阿拉伯文本)中...python 脚本获取此文件并生成 fileOut.txt...在 Latex 的第二遍中,每个 \command 将从 fileOut.txt 中读取其对应的行...这两个文本文件包含简单的逐行阿拉伯文本...

line one
line two
.
.
.
last line

这是一个 MnWE:

usepackage{}
...
...
\newcommand{\command}[1]{....#1...}
...
\begin{document}
...
...
\command{arg0}
...
...
\command{arg1}
...
...
...
\command{arg2}
...
...
\command{arg3}
...

\end{document}

在第一遍中 \command{..} 通常类似于 \index{..} 它将内容写入外部文件...但在第二遍中我对 ()TeX 中的命令从外部文件放入内容一无所知...希望现在一切都清楚了。

答案1

这可能满足您的需求。我在文件输入和输出;我在这里重现它(稍微简化了):

使用这个示例fileOut.txt:

first line, with a \TeX{} macro to expand
second line
third line

代码

\documentclass{article}

\newread\file
\openin\file=fileOut.txt

\newcommand{\getnextline}{%
 \read\file to\fileline % Reads a line of the file into \fileline
 \fileline % display it
}

\begin{document}

First line of fileOut.txt: 

\getnextline{}

More text here, then second line: \getnextline{}

Third line: \getnextline{}

Read past end of file? \getnextline{}
\closein\file

\end{document}

生产

在此处输入图片描述

我希望这对您在 XeTeX 中使用阿拉伯语文本有帮助。

编辑回答 OP 的进一步问题:

由于此处的示例有效,因此 open 和 close 语句应放在它们应在的位置。良好的编程习惯(使用任何语言)都要求检查文件是否存在且可读。我没有这样做,因为这个答案只是一个概念证明。如果您完全控制您的环境并且知道文件将始终位于预期的位置,则无需担心。

我不知道如果不关闭打开的文件会发生什么。但我知道 TeX 限制了可以同时打开的文件数量。有些应用程序不擅长自行释放文件句柄,因此最好自己关闭它们。

我很好奇如果我读到文件末尾会发生什么。示例显示,读取不存在的行只会返回一个空字符串。您需要确定这在您的用例中是否可以接受。如果不可以,请测试 eof 并采取相应措施。

相关内容