\g@addto@macro에 매개변수 전달

\g@addto@macro에 매개변수 전달

저는 완전한 초보자이지만 프로그래밍에 대한 배경 지식이 약간 있습니다. 나는 a를 보고 있었다MWE는 여기에 위치에 의해 제공야니스 라자리데스.

매크로 정의에서 우리는

%% add an image to the DB, use the LaTeX macro
%% \g@addto@macro to store them at the DB location
\def\addtoDB#1#2{%
    \ifx\@empty#1
        \g@addto@macro{#1}{#2}
    \else
        \g@addto@macro#1{,#2}
    \fi
}

\g@addto@macro{#1}{#2}이들 그리고 의 차이점은 무엇인가요 \g@addto@macro#1{,#2}?

답변1

매크로는 목록 매크로를 점진적으로 구축하는 것을 목표로 합니다. 문서에서 다음과 같은 것을 찾을 수 있습니다.

\def\alist{fig167,fig168,fig169,fig176,%
  fig180,fig181,fig182,fig183,fig185,fig186,fig187,fig188}

음, 다음과 같은 결과를 얻을 수 있습니다.

\newDB{alist}

그런 다음

\addtoDB\alist{fig167}
\addtoDB\alist{fig168}
\addtoDB\alist{fig169}
\addtoDB\alist{fig176}

등등.

첫 번째 호출 에서 정의된 \addtoDB매크로는 여전히 비어 있으므로 조건은 true이고\alist\newDB

\g@addto@macro\alist{fig167}

실행됩니다. 두 번째 매크로 호출에서는 \alist비어 있지 않으므로

\g@addto@macro\alist{,fig168}

가 실행 \alist되어 fig167,fig168. 연속 호출에 대해서도 마찬가지입니다.

답변2

이 특별한 경우에 나는 두 번째 경우의 두 번째 인수 앞에 추가 쉼표가 추가된다는 점을 제외하면 두 가지 용도가 \g@addto@macro동일하다고 생각합니다. 실제로 첫 번째 인수는 \g@addto@macro단순히 매크로 이름을 의미하므로 첫 번째 경우의 대괄호는 꼭 필요한 것은 아닙니다. 그러나 잠시 후에 살펴보겠지만 이는 좋은 예방책이며 제 생각에는 두 번째 경우에도 사용해야 합니다.

일반적으로 차이점을 설명하기 위해(첫 번째 인수가 반드시 매크로 이름이 아닐 때) 다음 예를 고려해 보겠습니다.

\documentclass{article}

\def\test#1#2{this #1 is #2 a test}
\def\testA#1#2{A \test{#1}{#2} A}
\def\testB#1#2{B \test#1{#2} B}

\begin{document}
 \testA{{1}{2}}{3}

 \testB{{1}{2}}{3}
\end{document}

매크로 \test는 두 개의 인수를 사용하며 첫 번째 경우와 같이 \testA사용하고 \test(대괄호 사용 #1) 두 번째 경우와 같이 \testB사용합니다 .\test

본문에서는 동일한 두 인수인 and 와 함께 \testAand 를 사용합니다 .\testB#1 = {1}{2}#2 = 3

\testA주위에 대괄호를 사용하므로 예상 대로 #1로 확장되어 의 첫 번째 인수에 바인딩됩니다 . , 대신 첫 번째 인수와 두 번째 인수로 사용되는 의미 로 확장됩니다. 에 의해 소비되지 않고 확장된 후에 조판됩니다 .A \test{{1}{2}}{3} A{1}{2}\test\testBB \test{1}{2}{3} B\test12{3}\test\test

따라서 출력은 다음과 같습니다.

A 이번 12는 3입니다. 테스트 A

B 이 1은 2a test3 B이다

관련 정보