![從外部文件放入?](https://rvso.com/image/281473/%E5%BE%9E%E5%A4%96%E9%83%A8%E6%96%87%E4%BB%B6%E6%94%BE%E5%85%A5%EF%BC%9F.png)
我需要編寫一個命令,從文字檔案中讀取一行並擴展到該行的內容,下一個命令讀取下一行,依此類推。
...
\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 並採取相應措施。