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
ドキュメントに対してどのような新しいコマンドが作成されるかをコード内で明確にすることを目的としており、したがって、それらを「オンザフライ」で構築することは実際には目的ではありません。ただし、これは実際の使用例からの優れた例に基づいて議論する必要がある領域であると私は考えています。