
Ich habe eine Quizmaschine mit zufällig ausgewählten Fragen LuaLaTeX
und beamer
für den Zuschauerteil erstellt, die pdf
ein Bild pro Frage und eine Folie pro Sekunde zum Anzeigen des Countdowns enthält: Es entsteht ein pdf
mit 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
pdf
kann ich sie wiederverwenden, um das Digest zu erstellen, aber soweit ich weiß, kann man pdf
immer nur eines erstellen. Ich möchte das Digest in einer separaten Datei speichern digest.tex
und später kompilieren.
Was ist der Befehl oder der Trick, um zu einer separaten Datei umzuleiten tex.print
oder, pdf
wenn möglich, zwei verschiedene Dateien gleichzeitig zu erstellen?
Zusatz
Nehmen wir an, ich habe eine lua
Tabelle:
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.
Antwort1
Lua hat eine io
Bibliothek, 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
TeX
Es ist möglich, die Standardroutinen für die Dateibehandlung wie \newwrite
und \newread
usw. zu verwenden \openout
, sodass LuaLaTeX
der 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}