具体发生了什么:
\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 而不是宏进行存储是有原因的。但是,大多数时候您可以愉快地使用宏:它们在很多方面都更方便。