![lualatex で数学オブジェクトをテキストモードで印刷するにはどうすればいいですか?](https://rvso.com/image/391706/lualatex%20%E3%81%A7%E6%95%B0%E5%AD%A6%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
lua の lualatex のコールバックの 1 つ (build_filter) で、関数の最初の引数を出力します。
\begin{luacode}
function f(a)
tex.print(a)
end
luatexbase.add_to_callback("buildpage_filter",f,"build_filter")
\end{luacode}
しかし、コンパイル中にエラーが発生します:
! Missing $ inserted.
<inserted text>
$
変数にはa
おそらく数式モードで使用される文字が含まれていることはわかっていますが、それをテキスト モードで印刷するにはどうすればよいでしょうか?
答え1
フラグメントではなく、常に使用可能なテスト ファイルを提供してください。
buildpage_filter
固定された文字列リストの 1 つを引数として取得します。その一部には、after_output
アンダースコアなどが含まれます。そのため、 を介してその文字列をドキュメントに挿入する場合は、tex.print
デフォルト以外の catcode テーブルを使用する必要があります。
のサインとして考えられるのtex.print
は
tex.print(<number> n, <string> s, ...)
ここで、 はn
文字列を印刷するために使用される catcode テーブルの番号ですs
。負の数で識別される 2 つの特別な catcode テーブルがあります。
n = -1
: 現在有効なcatcode制度を使用するn = -2
: と同じ catcode を使用します\the\toks
。つまり、catcode が 10 であるスペースを除くすべての文字の catcode は 12 です。