考虑以下示例,它尝试将一些代码添加到命令的钩子中。如果我将其替换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}