LuaLaTeX : LaTeX の「コマンド」をファイルに書き込む

LuaLaTeX : LaTeX の「コマンド」をファイルに書き込む

私は、質問ごとに 1 つのフレーム、カウント ダウンを表示するために 1 秒あたり 1 つのスライドを含むを生成する、ランダムに選択されるクイズ マシンを視聴者部分に使用しLuaLaTeXて作成しました。これにより、複数の冗長なページが作成されます。beamerpdfpdf

同時に、このクイズのダイジェスト形式を、質問と回答のみの A4 記事形式で作成したいと思います。このすべての内容は、beamer pdf当然のことながら、作成時に一度使用する lua テーブルに保存され、ダイジェストを作成するために再利用できます。ただし、私の知る限り、一度に作成できるのは 1 つだけです。ダイジェストを別のファイルに保存し、後でコンパイルしたいpdfと思います。digest.tex

tex.print別々のファイルにリダイレクトするコマンドやトリック、またはpdf可能であれば一度に 2 つの異なるファイルを生成するコマンドやトリックは何ですか?

追加

たとえば、次のような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

Luaioには 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の標準ファイル ハンドル ルーチンを使用して、現在のファイル (つまり、TeX 入力処理アセンブリ ライン) に書き込むかのようにファイルにコードを書き込むことができます。\newwrite\newread\openoutLuaLaTeX

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

ここに画像の説明を入力してください

関連情報