LaTeX3의 새로운 매크로/함수 정의 문제

LaTeX3의 새로운 매크로/함수 정의 문제

나는 LaTeX3를 멍청하게 여기고 이 언어를 이해하려고 노력합니다. 내가 읽으면서여기 다음을 사용하여 새 매크로를 정의할 수 있습니다.\cs_new:

\cs_new:Npn \SayHello #1
 { \prg_replicate:nn {#1} { Hello~World!~ } }

, --- 에 그리고 --- N에 관하여\SayHellop#1n{...}

좋아요, 어떤 숫자의 제곱을 표시하는 함수를 만들어 보겠습니다.

\cs_new:Npn \Show #1 
{
\int_eval:n {#1*#1}
}

매크로는 \Show{number}잘 작동합니다. 하지만 매크로를 정의하려고 하면 \Show정수가 표시됩니다.

\cs_new:Nn \Show 
{
\int_eval:n {2+2}
}

나는 LaTeX error: "kernel/missing-colon".

좋습니다. 그런 다음 콜론을 추가합니다.

\cs_new:Nn \Show:n 
{
\int_eval:n {2+2}
}

오류가 발생했는데 지금은 ! Undefined control sequence.

이 동작은 나에게 명확하지 않습니다.내가 어디에서 규칙을 어겼나요?

아래 MWE.

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new:Nn \Show:n 
{
\int_eval:n {2+2}
}
\ExplSyntaxOff

\begin{document}
\Show{}
\end{document}

답변1

\cs_new:Nn다음을 갖는 함수(매크로)만 정의할 수 있습니다 .서명, 이는 콜론 뒤의 인수 유형 목록입니다.

매개변수 텍스트( 서명의 의미) 를 명시적으로 입력해야 하기 때문에 \cs_new:Npn이러한 제한이 없습니다 .p

예를 들어 에는 \cs_new:Nn단일 토큰 인수( N)와 중괄호 인수( n)가 필요합니다. 반대로, \cs_new:Npn단일 토큰 인수인 "매개변수 인수"를 기대합니다(토론 참조).매개변수 텍스트TeXbook 또는 TeX에서는 주제별로) 뒤에 중괄호로 묶인 인수가 옵니다.

코드

\cs_new:Nn \sergio_show:n { \int_eval:n { #1+#1 } }

그리고

\cs_new:Npn \sergio_show:n #1 { \int_eval:n { #1+#1 } }

\cs_new:Nn서명에서 적합한 매개변수 텍스트를 작성할 수 있으므로 완전히 동일합니다 .

정의하려는 명령에 서명이 없으면~ 해야 하다\cs_new:Npn또는 로 정의하십시오 \cs_new_protected:Npn.

또는 다음을 수행할 수 있습니다.

\cs_new:Nn \sergio_show:n { \int_eval:n { #1+#1 } }
\cs_set_eq:NN \Show \sergio_show:n

그러나 사용자 공간 명령의 경우 xparse인터페이스를 사용하는 것이 좋습니다.

당신은 할 수 없습니다

\cs_new:Nn \Show:n { \int_eval:n { #1+#1 } }

\Show을 정의한 적이 없기 때문에 문서에서 사용하세요 \Show.

코드에 확장할 수 없는 기능(설명서에 빨간색으로 가득 찬 별표 또는 속이 빈 별표가 없는 기능)이 포함되어 있을 때마다 \cs_new_protected:Npn또는 (동일한 규칙이 적용됨) 을 사용해야 한다는 점에 유의하세요 . 완전히 확장 가능하기 \cs_new_protected:Nn때문에 여기서는 그렇지 않습니다 .\int_eval:n

관련 정보