为什么不能在带有下划线的命令名称上添加钩子?

为什么不能在带有下划线的命令名称上添加钩子?

考虑以下示例,它尝试将一些代码添加到命令的钩子中。如果我将其替换g__mytest_tl为 simply mytest,则一切正常。这是否意味着钩子系统不支持带下划线的命令名称?

\documentclass{article}

\begin{document}

\ExplSyntaxOn

\tl_new:N \g__mytest_tl

\hook_gput_code:nnn { cmd/g__mytest_tl/after } { test }
  {
    Test~text
  }

\tl_use:c { g__mytest_tl }

\ExplSyntaxOff

\end{document}

答案1

如果您输入h错误消息,您将获得更多信息:

! LaTeX hooks Error: Generic hooks cannot be added to '\g__mytest_tl'.

For immediate help type H <return>.
 ...                                              
                                                  
l.66   }
        
? h

You tried to add a hook to '\g__mytest_tl', but LaTeX was unable to patch the
command because it is a private expl3 macro.

您的命令以 开头\g__,这标志着它是私有的。通用 cmd-hook 是一种用于更改来自另一个包的命令的工具,因此根据设计,它不会触及私有命令。

如果变量来自您的包,您不需要较慢的钩子系统,您只需附加代码即可:

\documentclass{article}
\begin{document}

\ExplSyntaxOn

\tl_new:N \g__mytest_tl
\tl_gput_right:Nn\g__mytest_tl  { Test~text }
\tl_use:c { g__mytest_tl }

\ExplSyntaxOff

\end{document}

相关内容