这个牺牲命令是个好主意吗?

这个牺牲命令是个好主意吗?

我有这个命令:

\newcommand{\name}[1]{\edef\name{#1}}

您首先按 调用它\name{Don},然后可以使用 引用 Don \name这是表达只需设置一次的常数的可接受方式吗?

答案1

我会使用不同的命令,一个用于保存名称,另一个用于设置名称。

在包中,使用命令的外部版本(\name)来设置内部宏的值(\@name)是一种常见的做法。这就是类中的工作\author方式。\titlearticle

\makeatletter
\newcommand{\name}[1]{\gdef\@name{#1}}
\makeatother

但如果使用不同类型的命令来表示不同的行为,会更清晰、更简单。因此\name扩展为名称,并\setname定义 的值\name

\newcommand{\setname}[1]{\gdef\name{#1}}

区分指示要排版材料的命令和定义常量的命令是很好的。在我看来,LaTeX 中的默认\author\title命令实际上应该是\setauthor\settitle,因为实际排版仅在您给出命令时发生\maketitle

答案2

当然可以。您可自行决定用途。

根据具体的应用,您可以考虑使用\xdeftake 使(扩展的)重新定义全局化或\protected@xdef适应名称中的“奇怪的结构”......

相关内容