我需要编写一个命令,从文本文件中读取一行并扩展到该行的内容,下一个命令读取下一行,依此类推。
...
\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 并采取相应措施。