나는 LaTeX3를 멍청하게 여기고 이 언어를 이해하려고 노력합니다. 내가 읽으면서여기 다음을 사용하여 새 매크로를 정의할 수 있습니다.\cs_new:
\cs_new:Npn \SayHello #1
{ \prg_replicate:nn {#1} { Hello~World!~ } }
, --- 에 그리고 --- N
에 관하여\SayHello
p
#1
n
{...}
좋아요, 어떤 숫자의 제곱을 표시하는 함수를 만들어 보겠습니다.
\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