lualatex でコールバックを登録するにはどうすればいいですか?

lualatex でコールバックを登録するにはどうすればいいですか?

luatex でコールバックを登録する方法を教えてください。たとえば、ドキュメントのページがいつ開始または終了したか、およびそのページの印刷番号*2 を決定する必要があります。luatex のドキュメントでは、ページの終了をキャッチする方法しか見つかりませんでしたが、うまくいきません。これが私のコードです:

\documentclass{article}
\usepackage{luacode}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true]{russian}
\setmainfont{Times New Roman}
\pagestyle{empty}
\thispagestyle{empty}
\begin{luacode}
function f()
tex.print("page "..\thepage*2)
end
id,error=callback.register("finish_pdfpage",f)
tex.sprint(error," ",id)
\end{luacode}
\begin{document}
test
\newpage
new test
\end{document}

しかし、このドキュメントを lualatex でコンパイルすると、次のエラーが発生します。

C:/Program Files/MiKTeX 2.9/tex/latex/base/ltluatex.lua:109:
Module luatexbase Error: Attempt to use callback.register() directly
(luatexbase)             on input line 14

stack traceback:
        [C]: in function 'error'
        C:/Program Files/MiKTeX 2.9/tex/latex/base/ltluatex.lua:109: in function 'modu
le_error'
        C:/Program Files/MiKTeX 2.9/tex/latex/base/ltluatex.lua:116: in function 'luat
exbase_error'
        C:/Program Files/MiKTeX 2.9/tex/latex/base/ltluatex.lua:320: in function 'regi
ster'
        [\directlua]:4: in main chunk.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }

l.14 \end{luacode}
?

また、新しいページが開始されたときにイベントをキャッチする方法、たとえばこのページの番号*2 やこのページの単純な番号を印刷する方法についても教えてください。ご協力くださった皆様、ありがとうございます。

答え1

を使用する必要がありますluatexbase.add_to_callback。ただし、 で何かを印刷しようとしないでくださいfinish_pdfpage。以下は、ログに書き込む例です。

\documentclass{article}
\usepackage{luacode}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true]{russian}
\setmainfont{Times New Roman}
\pagestyle{empty}
\thispagestyle{empty}
\begin{luacode}
function f()
texio.write_nl("HELLO: page "..tex.count["c@page"]*2)
end
id,error=luatexbase.add_to_callback("finish_pdfpage",f,"finish")
\end{luacode}
\begin{document}
test
\newpage
new test
\end{document}

関連情報