このコマンドがあります:
\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
(拡張された)再定義をグローバルにしたり、\protected@xdef
名前の「奇妙な構造」に対応したりするために take を使用することを検討してください...