xparse를 사용하여 이름이 인수를 사용하는 명령을 정의하는 명령 정의

xparse를 사용하여 이름이 인수를 사용하는 명령을 정의하는 명령 정의

xparse다른 명령을 정의하는 명령을 만들고 싶습니다 . 그러나 나는 보조 명령이 텍스트와 첫 번째 명령에 대한 인수로 구성되기를 원합니다. 예를 들어

예를 들어 다음과 같습니다.

\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은 명령을 받도록 설계되었습니다.이름첫 번째 주장으로. 현재 이름을 구성하려면 다음을 사용해야 합니다.\expandafter

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

현재 내부적으로 이를 수행하는 '변형'이 없는 이유는 '동적' 명령이 개념적 관점에서 문제가 있기 때문입니다. 의 구문은 xparse문서에 대해 어떤 새 명령이 생성되기 시작하는지 코드 내에서 명확하게 하기 위한 것이므로 '즉시' 명령을 구성하는 것은 실제로 목표가 아닙니다. 그러나 이는 여전히 실제 사용 사례의 좋은 예를 바탕으로 논의가 필요한 영역이라고 생각합니다.

관련 정보