![这个牺牲命令是个好主意吗?](https://linux22.com/image/310076/%E8%BF%99%E4%B8%AA%E7%89%BA%E7%89%B2%E5%91%BD%E4%BB%A4%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B8%BB%E6%84%8F%E5%90%97%EF%BC%9F.png)
我有这个命令:
\newcommand{\name}[1]{\edef\name{#1}}
您首先按 调用它\name{Don}
,然后可以使用 引用 Don \name
。这是表达只需设置一次的常数的可接受方式吗?
答案1
我会使用不同的命令,一个用于保存名称,另一个用于设置名称。
在包中,使用命令的外部版本(\name
)来设置内部宏的值(\@name
)是一种常见的做法。这就是类中的工作\author
方式。\title
article
\makeatletter
\newcommand{\name}[1]{\gdef\@name{#1}}
\makeatother
但如果使用不同类型的命令来表示不同的行为,会更清晰、更简单。因此\name
扩展为名称,并\setname
定义 的值\name
:
\newcommand{\setname}[1]{\gdef\name{#1}}
区分指示要排版材料的命令和定义常量的命令是很好的。在我看来,LaTeX 中的默认\author
和\title
命令实际上应该是\setauthor
和\settitle
,因为实际排版仅在您给出命令时发生\maketitle
。
答案2
当然可以。您可自行决定用途。
根据具体的应用,您可以考虑使用\xdef
take 使(扩展的)重新定义全局化或\protected@xdef
适应名称中的“奇怪的结构”......