LuaLaTeX: escreve "comandos" de látex no arquivo

LuaLaTeX: escreve "comandos" de látex no arquivo

Fiz uma máquina de quiz escolhida aleatoriamente usando LuaLaTeXe beamerpara a parte do público que produz um pdfquadro por pergunta, um slide por segundo para mostrar a contagem regressiva: faz uma máquina pdfcom várias páginas redundantes.

Gostaria de produzir paralelamente um resumo deste quiz, em formato de artigo A4, apenas com as perguntas e as respostas. Todo esse material é armazenado em uma tabela lua que uso uma vez para criar beamer pdfnaturalmente, posso reutilizá-la para produzir o resumo, mas até onde eu sei, só se pode produzir um pdfpor vez, gostaria de armazenar o resumo em um digest.texarquivo separado e compile-o mais tarde.

Qual é o comando ou truque que redirecionará tex.printpara um arquivo separado ou produzirá dois pdfarquivos diferentes ao mesmo tempo, se possível?

Adição

Digamos que eu tenha uma luamesa:

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

No beamer eu uso nós em uma imagem tikz para mostrar a questão, veja abaixo. Mas também quero algo assim em um arquivo separado (classe de artigo):

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

Para ter um resumo do questionário.

insira a descrição da imagem aqui

Responder1

Lua tem uma iobiblioteca que parece funcionar com LuaLaTeX. Eu realmente não sei qual é o uso recomendado.

% !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}

Responder2

É possível usar as TeXrotinas padrão de manipulação de arquivos, como \newwritee \newreade \openoutetc., permitindo LuaLaTeXgravar o código no arquivo como se devesse ser gravado 'no' arquivo atual (bem, a linha de montagem de processamento de entrada do 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}

Este exemplo gera foolua.tex, o único conteúdo é "Hello World" aqui.

Responder3

Apenas a barra invertida precisa ser escapada:

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

insira a descrição da imagem aqui

informação relacionada