这些命令具体起什么作用?

这些命令具体起什么作用?
\makeatletter
\providecommand*{\input@path}{}
\g@addto@macro\input@path{{./level1//}{./level1/level2//}{./level2//}}
\makeatother

我明白:

\makeatletter
\makeatother

只是重新定义宏或者其他东西所必需的。

\providecommand

仅获取当前宏input@path并将其清除。

\g@addto@macro

我不完全明白这是什么意思。

{./level1//}{./level1/level2//}{./level2//}}

也不是这个。它是否告诉输入路径这些都是可以直接调用的目录?

答案1

您对各种命令的功能提供了几种解释。

\makeatletter并且\makeatother只是重新定义宏或者其他东西所必需的。

不完全是。默认情况下,@不允许该字符出现在 TeX 或 LaTeX 宏的名称中;相反,有效的多字符宏名称必须仅由大写和小写字母组成,或者更准确地说,由类别代码为“字母”的字符组成。(默认情况下,类别代码为“字母”的字符只有大写和小写字母,您猜对了。)该指令\makeatletter将类别代码@从“其他”更改为“字母”,使在多字符宏名称中使用该@字符在语法上合法。

为什么要执行这些步骤?由于目前主要的历史原因,LaTeX 内部命令通常(但不完全)使用一个或多个@字符;这可能使“普通”用户意外执行它们的可能性大大降低。\makeatletter让您克服这个(诚然不是很高)的障碍,并\makeatother恢复默认的 catcode @

\providecommand仅获取当前宏\input@path并将其清除。

不!(你可能想到了\renewcommand{<some existing command>}{}。)\providecommand就像\newcommand如果第一个参数不是有效的宏名称一样,并且它确实没有什么如果该名称的宏已经存在。

\providecommand*{\input@path}{}

是为了确保下一个操作说明,如果尚未定义同名的宏,则,\g@addto@macro\input@path{{./level1//}{./level1/level2//}{./level2//}}不会崩溃。\input@path

最后,让我们谈谈

\g@addto@macro\input@path{{./level1//}{./level1/level2//}{./level2//}}

\g@addto@macro——请注意两个 [2!]@字符——是一个低级 LaTeX 内核命令,它接受两个参数:第一个是现有宏的名称(此处:)\input@path;第二个是要附加到第一个参数中命名的宏的一些附加材料。

我们假设该宏\input@path为空(因为它是由前面的\providecommand指令创建的)或包含语法有效的路径。该\g@addto@macro指令附加

{./level1//}{./level1/level2//}{./level2//}

到该宏。

不知道您从哪里获得此代码片段或它应该做什么,恐怕我无法在解释或解释方面添加任何内容。

相关内容