
저는 완전한 초보자이지만 프로그래밍에 대한 배경 지식이 약간 있습니다. 나는 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 와 함께 \testA
and 를 사용합니다 .\testB
#1 = {1}{2}
#2 = 3
\testA
주위에 대괄호를 사용하므로 예상 대로 #1
로 확장되어 의 첫 번째 인수에 바인딩됩니다 . , 대신 첫 번째 인수와 두 번째 인수로 사용되는 의미 로 확장됩니다. 에 의해 소비되지 않고 확장된 후에 조판됩니다 .A \test{{1}{2}}{3} A
{1}{2}
\test
\testB
B \test{1}{2}{3} B
\test
1
2
{3}
\test
\test
따라서 출력은 다음과 같습니다.
A 이번 12는 3입니다. 테스트 A
B 이 1은 2a test3 B이다