从字符串到命令

从字符串到命令

具体发生了什么:

\newcommand{\mystring}[1]{\gdef\@mystring{#1}}

文档后面什么时候\mystring{mystring}会用到?众所周知,mystring会用到,\mystring但我想知道在 Latex 中如何使用。

编辑:更多信息如下。我的编程技能一般,尤其是我的 Latex 编程技能相当低。我想准备一个会议论文集模板,其中特定信息应存储在适当的字符串中,以便以后使用。通常,作者姓名可以存储在一个变量我们将调用\AuthorNames它,以便\AuthorNames(或者更准确地说,\@AuthorNames正如 Ulrike 所指出的那样)可以在论文的右页脚中显示。由于我了解不多,我决定模仿现有的 Latex 类(可能是文章类)。通过浏览类示​​例,我发现:

\newcommand{\AuthorNames}[1]{\gdef\@AuthorNames{#1}}

正在做的正是我需要的。我可以通过与 FORTRAN 的比较来重新表述我的问题。什么是 LaTeX 版本:

 CHARACTER :: AuthorNames

或者换句话说,是否有一个 LaTeX 指南说:“如果您想在 LaTeX 中声明一串字符”,请使用这个:[blablabla]。我应该读“texbytopic”,仅此而已。

答案1

TeX 是一种宏替换语言。这意味着当我们

\def\foo{bar}

TeX 只是将其存储bar替换文本\foo。因此,当我们使用 时\foo,TeX 会将其精确替换为bar,并继续工作。宏的内容是不是一个字符串:它是一个标记列表:因此我们可以这样做

\def\fooa{\foob}
\def\foob{bar}

并看到相同的结果(TeX\fooa用替换\foob,然后\foob用 替换bar)。LaTeX\newcommand是 的包装器\def,因此原理是相同的(尽管如果已经存在\newcommand则会抱怨,但不会)。\foo\def

\gdef基元的工作方式与 相同,\def只是它是全局应用的(\def是局部的,遵循 TeX 的分组系统)。因此

\newcommand{\AuthorNames}[1]{\gdef\@AuthorNames{#1}}

通过定义\@AuthorNames为宏来工作,该宏将被替换为作为参数给出的任何内容\AuthorNames。正如评论中提到的,这种方法意味着用户有一个简单的界面

\AuthorNames{whatever}

而不需要知道\gdef为什么在这里使用它。

TeX 还有另一种形式的标记存储:标记寄存器或“toks”。在某些情况下,选择 toks 而不是宏进行存储是有原因的。但是,大多数时候您可以愉快地使用宏:它们在很多方面都更方便。

相关内容