從外部文件放入?

從外部文件放入?

我需要編寫一個命令,從文字檔案中讀取一行並擴展到該行的內容,下一個命令讀取下一行,依此類推。

...
\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 並採取相應措施。

相關內容