在每页开头设置宏的值

在每页开头设置宏的值

我正在尝试使用钩子在每个页面的开头设置宏的值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}

在此处输入图片描述

相关内容