LuaLaTeX:将 latex“命令”写入文件

LuaLaTeX:将 latex“命令”写入文件

我制作了一个随机选择的测验机,LuaLaTeX用于beamer观众部分,它产生一个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 图片中的节点来显示问题,如下所示。但我还想在单独的文件 (article 类) 中使用类似的东西:

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}

在此处输入图片描述

相关内容