Aus externer Datei einfügen?

Aus externer Datei einfügen?

Ich muss einen Befehl schreiben, der eine Zeile aus einer Textdatei liest und den Inhalt dieser Zeile erweitert, der nächste Befehl liest die nächste Zeile und so weiter.

...
\command{arg}
...
\command{arg}
...
\command{arg}
...

Das Makroargument kann nicht als Index in der externen Datei verwendet werden und die externe Datei wird von einem Python-Skript erstellt.

Ethan:: die Textdatei enthält arabischen Text, der zeilenweise vom Python-Skript generiert wird... in einem ersten Durchgang von LateX (XeLateX) schreibt jeder \Befehl sein Argument in eine Datei „fileIn.txt“ (arabischer Text)... das Python-Skript nimmt diese Datei und erstellt „fileOut.txt“... im zweiten Durchgang von Latex liest jeder \Befehl seine entsprechende Zeile aus „fileOut.txt“... Die beiden Textdateien enthalten einfachen zeilenweisen arabischen Text...

line one
line two
.
.
.
last line

hier ist ein MnWE:

usepackage{}
...
...
\newcommand{\command}[1]{....#1...}
...
\begin{document}
...
...
\command{arg0}
...
...
\command{arg1}
...
...
...
\command{arg2}
...
...
\command{arg3}
...

\end{document}

im ersten Durchgang verhält sich \command{..} typischerweise wie \index{..}, das Inhalt in eine externe Datei SCHREIBT... aber im zweiten Durchgang habe ich keine Ahnung von dem Befehl in ()TeX, der Inhalt aus einer externen Datei EINFÜGT... hoffe, jetzt ist alles klar.

Antwort1

Das könnte Ihren Anforderungen entsprechen. Ich habe es gefunden beiDateieingabe und -ausgabe; Ich gebe es (etwas vereinfacht) hier wieder:

Mit diesem Beispiel fileOut.txt:

first line, with a \TeX{} macro to expand
second line
third line

der Code

\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}

produziert

Bildbeschreibung hier eingeben

Ich hoffe, dass dies für Sie in XeTeX mit arabischem Text funktioniert.

Bearbeitenum die weiteren Fragen des OP zu beantworten:

Da das Beispiel hier funktioniert, sind die Anweisungen „open“ und „close“ dort, wo sie hingehören. Gute Programmierpraxis (in jeder Sprache) würde erfordern, dass überprüft wird, ob die Datei existiert und lesbar ist. Das habe ich nicht getan, da diese Antwort nur ein Proof of Concept ist. Wenn Sie die vollständige Kontrolle über Ihre Umgebung haben und wissen, dass die Datei immer dort ist, wo sie erwartet wird, brauchen Sie sich keine Sorgen zu machen.

Ich weiß nicht, was passiert, wenn Sie eine geöffnete Datei nicht schließen. Ich weiß, dass TeX die Anzahl der Dateien begrenzt, die Sie gleichzeitig geöffnet haben können. Einige Anwendungen sind nicht gut darin, Dateihandles selbst freizugeben, daher ist es eine gute Angewohnheit, sie selbst zu schließen.

Ich war neugierig, was passieren würde, wenn ich über das Ende der Datei hinaus lese. Das Beispiel zeigt, dass das Lesen einer Zeile, die nicht vorhanden ist, nur eine leere Zeichenfolge zurückgibt. Sie müssen entscheiden, ob dies in Ihrem Anwendungsfall akzeptabel ist. Wenn nicht, testen Sie auf EOF und handeln Sie entsprechend.

verwandte Informationen