這個犧牲命令是個好主意嗎?

這個犧牲命令是個好主意嗎?

我有這個指令:

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

您首先將其稱為 in \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命令實際上應該是\setauthorand \settitle,因為實際的排版僅在您發出命令時發生\maketitle

答案2

當然,為什麼不呢。您的使用,您的選擇。

根據特定的應用程序,您可能會考慮使用\xdeftake 使(擴展的)重新定義全局或\protected@xdef適應名稱中的“奇怪的結構”...

相關內容