![Colocar de arquivo externo?](https://rvso.com/image/281473/Colocar%20de%20arquivo%20externo%3F.png)
Preciso escrever um comando que leia uma linha de um arquivo de texto e expanda para o conteúdo desta linha, o próximo comando leia a próxima linha e assim por diante.
...
\command{arg}
...
\command{arg}
...
\command{arg}
...
o argumento macro não pode ser usado como índice no arquivo externo e que o arquivo externo é produzido por um script python.
Ethan:: o arquivo de texto contém texto em árabe gerado linha por linha pelo script python... em uma primeira passagem de LateX (XeLateX) cada comando escreve seu argumento em um arquivoIn.txt (texto em árabe)... o script python pega este arquivo e produz fileOut.txt... na segunda passagem do Latex cada \command lerá sua linha correspondente de fileOut.txt... Os dois arquivos de texto contêm texto árabe simples linha por linha...
line one
line two
.
.
.
last line
aqui está um MnWE:
usepackage{}
...
...
\newcommand{\command}[1]{....#1...}
...
\begin{document}
...
...
\command{arg0}
...
...
\command{arg1}
...
...
...
\command{arg2}
...
...
\command{arg3}
...
\end{document}
na primeira passagem \command{..} normalmente é como \index{..} que ESCREVE conteúdo em um arquivo externo... mas na segunda passagem não tenho ideia sobre o comando em ()TeX que COLOCA um conteúdo de um arquivo externo... espero que tudo esteja claro agora.
Responder1
Isso pode atender às suas necessidades. Eu encontrei emEntrada e saída de arquivo; Estou reproduzindo (um tanto simplificado) aqui:
Com este exemplo fileOut.txt:
first line, with a \TeX{} macro to expand
second line
third line
o código
\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}
produz
Espero que funcione para você em XeTeX com texto em árabe.
Editarpara responder às outras perguntas do OP:
Como o exemplo aqui funciona, as instruções de abertura e fechamento estão onde pertencem. Boas práticas de programação (em qualquer linguagem) exigiriam verificações de que o arquivo existe e é legível. Não fiz isso porque esta resposta é apenas uma prova de conceito. Se você tem controle total do seu ambiente e sabe que o arquivo estará sempre onde é esperado, não precisa se preocupar.
Não sei o que acontece se você não fechar um arquivo aberto. Eu sei que o TeX limita o número de arquivos que você pode abrir ao mesmo tempo. Alguns aplicativos não são bons em liberar identificadores de arquivos sozinhos, por isso é um bom hábito fechá-los você mesmo.
Fiquei curioso para saber o que aconteceria se eu lesse além do final do arquivo. O exemplo mostra que ler uma linha que não existe apenas retorna uma string vazia. Você precisa decidir se isso é aceitável no seu caso de uso. Caso contrário, teste eof e aja de acordo.