
LuaLaTeX
我使用和beamer
for 觀眾部分製作了一個隨機選擇的測驗機,它產生pdf
每個問題包含一幀的內容,每秒一張幻燈片來顯示倒數計時:它製作了一個pdf
具有多個冗餘頁面的頁面。
我想同時產生此測驗的摘要形式,採用 A4 文章格式,僅包含問題和答案。所有這些東西都儲存在一個lua表中,我使用一次來創建beamer
pdf
自然,我可以重用它來生成摘要,但據我所知,一次只能生成一個pdf
,我想存儲摘要放在一個單獨的digest.tex
文件中並稍後編譯。
將重定向到一個單獨的文件,或者如果可能的話,一次tex.print
產生兩個不同的文件的命令或技巧是什麼?pdf
添加
假設我有一張lua
桌子:
t = {"Valeur app. par défaut à l'unité",69841.68, 69841 }
在 Beamer 中,我使用 tikz 圖片中的節點來顯示問題,請參見下文。但我也想在一個單獨的文件(文章類)中添加類似的內容:
tex.print (t[1]..":".."\\num{"..t[2].."}\\hfill"..t[3])
對測驗進行摘要。
答案1
Lua 有一個io
庫似乎可以與 LuaLaTeX 一起使用。我真的不知道推薦的用法是什麼。
% !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}
答案2
可以使用標準TeX
文件處理例程,例如\newwrite
和\newread
等\openout
,將LuaLaTeX
程式碼寫入文件,就像應該寫入“到”當前文件一樣(好吧,TeX 輸入處理裝配線;-))
\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}
本例生成foolua.tex
,這裡唯一的內容是「Hello World」。
答案3
只有反斜線需要轉義:
\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}