LaTeX3 함수 생성 방법의 차이점

LaTeX3 함수 생성 방법의 차이점

모듈 에는 l3basics각 명령 생성 기능에 대해 두 가지 방법이 제공됩니다. 하나는 함수 서명을 제공해야 하지만 두 번째는 그렇지 않습니다.

두 번째 방법이 더 간결하므로 다른 방법보다 하나를 사용하면 어떤 이점이 있나요? (물론 가상의 경우와 같이 하나의 토큰을 완전히 제거해야 하고 \removefirstoftwo두 번째 방법을 적용할 수 없는 명백한 경우는 제외됩니다.)

나는 두 가지 접근 방식을 설명하는 MWE를 제공합니다.

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
  \cs_new:Npn \exampleone:nn #1 #2 {#1 #2}
  \cs_new:Nn \exampletwo:nn{#1 #2}
  \exampleone:nn {one~}{two~}
  \exampletwo:nn {three~}{four}
\ExplSyntaxOff
\end{document}

답변1

정의되는 함수에 서명이 추가되면 두 메서드는 완벽하게 동일합니다.

\cs_new:Nn방법은 매개변수 텍스트를 작성해야 하므로 효율성이 떨어집니다.

귀하의 예에 뭔가를 추가하면 정체성이 더 명확해집니다.

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
  \cs_new:Npn \exampleone:nn #1 #2 {#1 #2}
  \cs_new:Nn \exampletwo:nn{#1 #2}

\texttt{\cs_meaning:N \exampleone:nn}\par

\texttt{\cs_meaning:N \exampletwo:nn}\par

\ExplSyntaxOff
\end{document}

여기에 이미지 설명을 입력하세요

후자의 방법이 간결해서 더 선호할 수도 있지만, 본질적으로 개인 취향의 문제입니다.

일반적으로 나는 명시적인 매개변수 텍스트를 보는 것을 선호하지만 그게 바로 나입니다.

둘 다 제공되는 이유는 무엇입니까? 아마도 이 방법이 선택적 인수에서 매개변수 텍스트가 작성되고 여기서는 정의되는 매크로의 시그니처로 대체되는 :Nn전통적인 와 유사하기 때문일 것입니다.\newcommand

경고.서명 없이 함수를 정의할 수 있지만 이 경우 :Npn메서드는 필수입니다. 서명이 "표준"이 아닌 경우 N, n즉 지정자만 사용 T하는 경우에도 마찬가지입니다 F. w지정자가 있는 함수~ 해야 하다사용 :Npn.

관련 정보