我正在尝试使用钩子在每个页面的开头设置宏的值shipout
。请考虑以下示例:
\documentclass{article}
\ExplSyntaxOn
\tl_new:N \g_mymodule_test_tl
\hook_gput_code:nnn { shipout/firstpage } { mymodule }
{
\tl_gset:Nn \g_mymodule_test_tl { BEGIN-OF-PAGE }
}
\hook_gput_code:nnn { shipout/before } { mymodule }
{
\tl_gset:Nn \g_mymodule_test_tl { BEGIN-OF-PAGE }
}
\ExplSyntaxOff
\begin{document}
Text
\ExplSyntaxOn
\tl_use:N \g_mymodule_test_tl
\tl_gset:Nn \g_mymodule_test_tl { RESET }
\ExplSyntaxOff
\clearpage
\ExplSyntaxOn
\tl_use:N \g_mymodule_test_tl
\ExplSyntaxOff
\end{document}
我认为我的代码存在一些错误,例如,第一页上的宏没有分配给定值BEGIN-OF-PAGE
。请问正确的做法是什么?
答案1
您可以在开始文档时(使用钩子)设置变量end
,然后在 处设置shipout/after
。
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{lipsum}
\ExplSyntaxOn
\tl_new:N \g_mymodule_test_tl
\int_new:N \g_mymodule_test_int
\hook_gput_code:nnn { begindocument/end } { mymodule }
{
\int_gincr:N \g_mymodule_test_int
\tl_gset:Ne \g_mymodule_test_tl { BEGIN-OF-PAGE~\int_eval:n { \g_mymodule_test_int } }
}
\hook_gput_code:nnn { shipout/after } { mymodule }
{
\int_gincr:N \g_mymodule_test_int
\tl_gset:Ne \g_mymodule_test_tl { BEGIN-OF-PAGE~\int_eval:n { \g_mymodule_test_int }}
}
\NewExpandableDocumentCommand{\showhook}{}{\tl_use:N \g_mymodule_test_tl}
\ExplSyntaxOff
\begin{document}
Text \showhook
\lipsum[1-2]
\showhook
\end{document}