访问 TeX 插入的 expl3 方法是什么?

访问 TeX 插入的 expl3 方法是什么?

是否有既定的expl3方法来处理 TeX 中定义的插入?我在尝试修改时遇到了这个问题\footins。除了重命名的 TeX 基元之外,我在文档中看不到任何其他内容。

我已经开始推出自己的功能,如下面的 MWE 所示,但到目前为止,我所拥有的绝对不适合通用,如果给出错误的输入就会中断。

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\cs_new:Npn \insert_to_int:N #1 {\tex_count:D #1 \scan_stop:}
\cs_new:Npn \insert_to_dim:N #1 {\tex_dimen:D #1 \scan_stop:}
\cs_new:Npn \insert_to_skip:N #1 {\tex_skip:D #1 \scan_stop:}

\cs_new_protected:Npn \insert_set_int:Nn #1#2 {\tex_count:D #1 \int_eval:n {#2}}
\cs_new_protected:Npn \insert_set_dim:Nn #1#2 {\tex_dimen:D #1 \dim_eval:n {#2}}
\cs_new_protected:Npn \insert_set_skip:Nn #1#2 {\tex_skip:D #1 \skip_eval:n {#2}}

\NewDocumentCommand{\dumpvals}{}
{
  Magnification~factor~--~before:~\int_use:N \insert_to_int:N \footins

  \insert_set_int:Nn \footins {2 * \insert_to_int:N \footins}~

  after:~\int_use:N \insert_to_int:N \footins\par

  Maximum~insertion~size~--~before:~\dim_use:N \insert_to_dim:N \footins

  \insert_set_dim:Nn \footins {-100pt + \insert_to_dim:N \footins}~

  after:~\dim_use:N \insert_to_dim:N \footins\par

  Extra~space~--~before:~\skip_use:N \insert_to_skip:N \footins

  \insert_set_skip:Nn \footins {6pt plus 1pt minus .5pt + \insert_to_skip:N \footins}~

  after:~\skip_use:N \insert_to_skip:N \footins\par
}
\ExplSyntaxOff

\begin{document}
  \dumpvals
\end{document}

答案1

Yiannis 引用的包采用了使用技巧\cs_new...来为 tex 序列\count\footins等创建别名,并赋予它们常规expl3变量名。例如:

\cs_new:Npn \g_test_footins_box  {\footins}
\cs_new:Npn \g_test_footins_int  {\tex_count:D\footins}
\cs_new:Npn \g_test_footins_dim  {\tex_dimen:D\footins}
\cs_new:Npn \g_test_footins_skip {\tex_skip:D\footins}

我将其推广到任意插入,但显然生产代码应该有 if-exists 测试来检查问题:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\cs_new_protected:Npn \test_insert_init:N #1
{
  \cs_new:cpn {g_test_ \cs_to_str:N #1 _box}  {#1}
  \cs_new:cpn {g_test_ \cs_to_str:N #1 _int}  {\tex_count:D #1}
  \cs_new:cpn {g_test_ \cs_to_str:N #1 _dim}  {\tex_dimen:D #1}
  \cs_new:cpn {g_test_ \cs_to_str:N #1 _skip} {\tex_skip:D #1}
}

\test_insert_init:N \footins

\NewDocumentCommand{\dumpvals}{}
{
  Magnification~factor~--~before:~\int_use:N \g_test_footins_int

  \int_gset:Nn \g_test_footins_int {2 * \g_test_footins_int}~

  after:~\int_use:N \g_test_footins_int\par

  Maximum~insertion~size~--~before:~\dim_use:N \g_test_footins_dim

  \dim_gset:Nn \g_test_footins_dim {\g_test_footins_dim / 2}~

  after:~\dim_use:N \g_test_footins_dim\par

  Extra~space~--~before:~\skip_use:N \g_test_footins_skip

  \skip_gset:Nn \g_test_footins_skip {\g_test_footins_skip + 6pt plus 1pt minus .5pt}~

  after:~\skip_use:N \g_test_footins_skip\par
}
\ExplSyntaxOff

\begin{document}
  \dumpvals
\end{document}

相关内容