![Поместить из внешнего файла?](https://rvso.com/image/281473/%D0%9F%D0%BE%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D0%B8%D0%B7%20%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B5%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3F.png)
Мне нужно написать команду, которая считывает строку из текстового файла и расширяет ее до содержимого этой строки, следующая команда считывает следующую строку и так далее.
...
\command{arg}
...
\command{arg}
...
\command{arg}
...
аргумент макроса не может использоваться в качестве индекса во внешнем файле, и что внешний файл создается скриптом Python.
Ethan:: текстовый файл содержит арабский текст, сгенерированный построчно скриптом Python... в первом проходе LateX (XeLateX) каждая \команда записывает свой аргумент в fileIn.txt (арабский текст)... скрипт Python берет этот файл и создает fileOut.txt... во втором проходе Latex каждая \команда будет считывать соответствующую ей строку из 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
Это может удовлетворить ваши потребности. Я нашел это наВвод и вывод файлов; Я воспроизвожу его здесь (несколько упрощенно):
С помощью этого образца файла Out.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 с арабским текстом.
Редактироватьчтобы ответить на дополнительные вопросы ОП:
Поскольку приведенный здесь пример работает, операторы открытия и закрытия находятся там, где им и положено быть. Хорошая практика программирования (на любом языке) требует проверки того, что файл существует и доступен для чтения. Я этого не делал, поскольку этот ответ — всего лишь доказательство концепции. Если вы полностью контролируете свою среду и знаете, что файл всегда будет там, где его ожидают, вам не о чем беспокоиться.
Я не знаю, что произойдет, если не закрыть открытый файл. Я знаю, что TeX ограничивает количество файлов, которые можно открыть одновременно. Некоторые приложения не очень хорошо освобождают дескрипторы файлов самостоятельно, поэтому хорошей привычкой будет закрывать их самостоятельно.
Мне было любопытно, что произойдет, если я прочитаю за пределами конца файла. Пример показывает, что чтение строки, которой там нет, просто возвращает пустую строку. Вам нужно решить, приемлемо ли это в вашем случае использования. Если нет, проверьте на eof и действуйте соответственно.