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 }

В бимере я использую узлы в картинке 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}

введите описание изображения здесь

Связанный контент