
Я создал машину для случайно выбранных тестов, используя 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}