
ドキュメントに「要件」を記述するためのコマンドを定義しました。このコマンドは、自動的にスタイルと番号を設定し、番号を取得するために参照できるラベルを作成します。非常に便利です。ただし、参照するときに要件の全文を繰り返したい場合があります。そうすれば、読者はドキュメント内を戻らなくても済みます。もちろん、1 か所を変更するとエラーが発生しやすくなるため、書き直したくはありません。コマンドを使用してテキストを繰り返すにはどうすればよいですか?
現在のコマンド定義の形式は次のとおりです。
\newcommand{\requirement}[2]{
\vspace{10pt}
\noindent
\textbf{
\refstepcounter{reqnum}
\label{req:#2}
R\thereqnum: #1
}
}
私は次のようなさまざまな試みを試しましたが、うまくいきませんでした。
\newcommand{\requirement}[2]{
\vspace{10pt}
\noindent
\textbf{
\refstepcounter{reqnum}
\label{req:#2}
R\thereqnum: #1
}
\newcommand{\req{#2}}{#1}
}
答え1
\csname <string>\endcsname
コマンド を作成する があります\<string>
。また、非常に便利な etoolbox のマクロを使用することもできます。
\newcommand{\req{#2}}{#1}
を に置き換えると\expandafter\def\csname req#2\endcsname {#1}
動作するはずです。
\def\name
はマクロ を定義します\name
。 とは異なり、 がすでに存在するかどうかは尋ねません。したがって、 がすでに存在する場合は\newcommand
を上書きします。これは便利な場合もありますが、通常は有害です。\name
\name
とだけ記述すると、 が 1 つしかない(および が欠落している) ため、\def\csname req#2\endcsname {<definition>}
再定義が試行され\csname
、エラーが発生します。\endcsname
\
\expandafter
の前に置くと\def
、
\expandafter\def\csname req#2\endcsname {<definition>}
なる
\def\req<argument2> {<definition>}
そして、定義されました。\expandafter
次のトークンの展開を遅らせます (コマンド シーケンスにすることができます)。2 つの expandafter は 2 サイクル遅延します。