LuaLaTeX: Latex-„Befehle“ in eine Datei schreiben

LuaLaTeX: Latex-„Befehle“ in eine Datei schreiben

Ich habe eine Quizmaschine mit zufällig ausgewählten Fragen LuaLaTeXund beamerfür den Zuschauerteil erstellt, die pdfein Bild pro Frage und eine Folie pro Sekunde zum Anzeigen des Countdowns enthält: Es entsteht ein pdfmit mehreren redundanten Seiten.

Ich möchte parallel dazu eine Digest-Form dieses Quiz im A4-Artikelformat erstellen, die nur die Fragen und Antworten enthält. All diese Dinge sind in einer Lua-Tabelle gespeichert, die ich einmal verwende, um das Quiz zu erstellen. Natürlich beamer pdfkann ich sie wiederverwenden, um das Digest zu erstellen, aber soweit ich weiß, kann man pdfimmer nur eines erstellen. Ich möchte das Digest in einer separaten Datei speichern digest.texund später kompilieren.

Was ist der Befehl oder der Trick, um zu einer separaten Datei umzuleiten tex.printoder, pdfwenn möglich, zwei verschiedene Dateien gleichzeitig zu erstellen?

Zusatz

Nehmen wir an, ich habe eine luaTabelle:

t = {"Valeur app. par défaut à l'unité",69841.68, 69841 }

In Beamer verwende ich einen Knoten in einem Tikz-Bild, um die Frage anzuzeigen, siehe unten. Aber ich möchte so etwas auch in einer separaten Datei (Artikelklasse):

tex.print (t[1]..":".."\\num{"..t[2].."}\\hfill"..t[3])

Um eine Zusammenfassung des Quiz zu erhalten.

Bildbeschreibung hier eingeben

Antwort1

Lua hat eine ioBibliothek, die mit LuaLaTeX zu funktionieren scheint. Ich weiß allerdings nicht genau, was die empfohlene Verwendung ist.

% !TeX program = lualatex
\documentclass{article}
\begin{document}
Foo.

\directlua{
out = io.open('somefile.tex','a')
out:write('Hello world. ')
out:write('This is different')
io.close(out)
}

\input{somefile}

\end{document}

Antwort2

TeXEs ist möglich, die Standardroutinen für die Dateibehandlung wie \newwriteund \newreadusw. zu verwenden \openout, sodass LuaLaTeXder Code so in die Datei geschrieben wird, als ob er „in“ die aktuelle Datei geschrieben werden sollte (also die TeX-Eingabeverarbeitungs-Assembly-Line ;-)).

\documentclass{article}
\usepackage{luacode}

\newwrite\luageneratedfile

\begin{document}  
\immediate\openout\luageneratedfile=foolua.tex
\immediate\write\luageneratedfile{%
\directlua{%
  tex.print("Hello World")
  }
}
\immediate\closeout\luageneratedfile
\end{document}

Dieses Beispiel generiert foolua.tex, der einzige Inhalt ist hier „Hallo Welt“.

Antwort3

Nur der Backslash muss maskiert werden:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{luacode}
\begin{luacode}
    function OpenFile(mode,name) out=io.open(name,mode) return end
    function CloseFile() io.close(out) return end
\end{luacode}   
\newcommand\OpenFile[2][a]{\luaexec{OpenFile('#1','#2')}}
\def\CloseFile{\luaexec{CloseFile()}}
\def\WriteLn#1{\luaexec{out:write('\string#1'.."\string\n")}}
\def\Write#1{\luaexec{out:write('\string#1')}}

\begin{document}
    Foo.

    \OpenFile[w]{somefile.tex}
    \WriteLn{Hello world from \\LaTeX. }
    \WriteLn{This is different}%
    \Write{Hello world $\\sqrt{1+x}$. }
    \Write{This is different}
    \CloseFile

    \VerbatimInput{somefile}

    \OpenFile{somefile.tex}
    \WriteLn{Hello world from \\LaTeX. }
    \WriteLn{This is different}%
    \Write{Hello world $\\sqrt{1+x}$. }
    \Write{This is different}
    \CloseFile
%   
    \VerbatimInput{somefile}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen