\makeatletter(不带 \makeatother)

\makeatletter(不带 \makeatother)

我知道可以使用\makeatletter\makeatother来修改 LaTeX 包内部。我一直认为你必须先打开修改器块,再关闭它,但我发现这个

\makeatletter
\def\bbibitem#1{\item[]\if@filesw\immediate\write\@auxout{\string \bibcite {#1} {\the\value{\@listctr }}}\fi\ignorespaces}
\makeatletter  % !

正在工作。

这不应该失败吗?为什么它有效?

答案1

如果您制作了@一封“信件”但没有将其恢复为“其他”,那么就会发生两三件事。

  • 您可以@在文档中使用名称访问内部命令。

  • \@变成控制字而不是控制符号,因此foo\@ .空格被删除,而通常foo\@ .会显示空格(就像在 之后不会删除空格一样\$

  • 由非字母分隔的分隔参数@或显式\ifcat测试的 catcode 测试@将失败(但这些可能只发生在人工测试文档中)

相关内容