LaTeX @(at)符号

LaTeX @(at)符号

可能重复:
为什么 LaTeX 内部命令中带有 @?

LaTeX 中的符号是什么@意思?我正在查看的源代码apa.cls,其中有一个声明:

\newsavebox\gr@box

后来

\sbox\gr@box{\includegraphics[width=\linewidth]{#2}}.

它似乎不像@一个正常的角色,但我无法弄清楚它到底在做什么,经过谷歌搜索后也没有找到任何东西(我多么希望谷歌有正则表达式功能!)谢谢。

编辑:谢谢你的帮助;在我浏览的链接中,我发现http://www.tug.org/pipermail/tugindia/2002-January/000178.html非常有用且简洁。总而言之,该@字符通常不允许出现在宏的名称中,因此作为范围界定的一种技巧,LaTeX 软件包在内部将其声明为有效的名称字符并将其用于宏。您可以\makeatletter在文档中使用这些宏,但显然必须非常小心,因为您现在可以覆盖必要的 LaTeX 内核宏;使用\makeatother来恢复。

答案1

每个字符都有从 0 到 15 的类别代码。

  • 0 - 转义字符;这表示控制序列的开始。反斜杠\(Unicode 代码点 U+005C)是默认转义字符。
  • 1 - 组开始;这样的字符使 TeX 进入新的分组层级。左括号{是组开始字符。
  • 2 - 组结束;TeX 关闭当前分组级别。TeX 将右括号}作为组结束字符。
  • 3 – 数学移位;TeX 使用美元符号$来表示这一点。
  • 4 – 对齐选项卡;TeX 使用与符号&
  • 5——行尾;TeX 认为该字符表示输入行的结束。
  • 6 - 参数字符;这表示宏的参数。在 TeX 中,这是井号#
  • 7 - 上标;默认上标是脱字符^
  • 8 – 下标;默认上标是下划线_
  • 9 - 忽略;此类别的字符将从输入中删除。
  • 10 - 空格;空格字符会受到特殊处理。TeX 将此类别分配给空格(Unicode 代码点 U+0020)和制表符(U+0009)。
  • a..z11 - 字母;在 TeX 中,只有字符A..Z属于此类别。宏包通常会将某些“秘密”字符(例如@)变成字母,见下文。
  • 12 - 其他;TeX 将其他类别中没有的所有内容都归入此类别。例如,数字、标点符号和@
  • 13 - 活动;活动字符用作 TeX 命令,但前面无需转义字符。tie 字符~属于此类。
  • 14 – 注释字符;默认注释字符是%
  • 15 - 无效字符;此类别指不应出现在输入中的字符。如果出现此类字符,TeX 会引发错误。

宏名称仅由字母组成(代码 11)。@符号的类别代码为 12,因此不能包含在宏名称中。但是,您可以更改任何符号的类别

\catcode`\@ = 11 % Macro \makeatletter does the same

现在您可以@在宏名称中使用字母。所有 LaTeX 包都会将 catcode 更改为@11,并在最后将其返回为 12。

\catcode`\@ = 12 % Macro \makeatother does the same

注意,您可以将 catcode 更改为任何字符,而不仅仅是 @。例如,如果您想使用[]作为打开和关闭组符号,请写

\catcode`\[ = 1
\catcode`\] = 2

答案2

宏名称中的 @ 字符只是将宏标记为包的内部宏,请参阅 https://texfaq.org/FAQ-atsigns

答案3

已解答这里

LaTeX 命令是使用带有 @ 符号的命令构建的。为了防止这些命令被修改,@ 通常被重新定义为特殊符号。偶尔,如果您知道自己在做什么,您可以“make at letter”(\makeatletter)进行一些微调,然后在完成后再次“make at other”(\makeatother)。

相关内容