xparse を使用して、名前が引数を使用するコマンドを定義するコマンドを定義する

xparse を使用して、名前が引数を使用するコマンドを定義するコマンドを定義する

xparse他のコマンドを定義するコマンドを作成したいのですが、2番目のコマンドはテキストと最初のコマンドの引数で構成したいです。例えば

例えば次の

\documentclass{article}
\usepackage{xparse}
\begin{document}

\ExplSyntaxOn
\DeclareDocumentCommand{\DeclareTest}{m}{%
%
\DeclareDocumentCommand{\csname test#1\endcsname}{}{This is a #1 test}
}
\ExplSyntaxOff

\DeclareTest{work}
\testwork

\end{document}

\testworkと評価されるコマンドにしたいと思いますThis is a work test。ただし、これを行うと"xparse/bad-arg-spec"エラーが発生し、その理由がわかりません。

答え1

の場合と同様に\newcommand\DeclareDocumentCommandおよび相対はtaコマンドを実行するように設計されています名前最初の引数として。現在、名前を構築したい場合は、\expandafter

\DeclareDocumentCommand\DeclareTest{m}{%
  \expandafter\DeclareDocumentCommand\csname test#1\endcsname{}{This is a test}%
}

現時点でこれを内部的に実行する「バリアント」が利用できない理由は、「動的」コマンドが概念的な観点から問題があるためです。 の構文は、xparseドキュメントに対してどのような新しいコマンドが作成されるかをコード内で明確にすることを目的としており、したがって、それらを「オンザフライ」で構築することは実際には目的ではありません。ただし、これは実際の使用例からの優れた例に基づいて議論する必要がある領域であると私は考えています。

関連情報