I'm a complete newbie but have a little background in programming. I've been looking at a MWE located here provided by Yiannis Lazarides.

In the macro definition, we have

%% add an image to the DB, use the LaTeX macro
%% \g@addto@macro to store them at the DB location

What is the difference between \g@addto@macro{#1}{#2} and \g@addto@macro#1{,#2} ?

  • Welcome to TeX.SX! I believe that the macro is aimed to build a comma separated list of items. When the first item is added, no comma is wanted.
    – egreg
    Jan 2, 2014 at 20:18
  • @egreg Did you mean 'when the first item is empty'?
    – cfr
    Jan 2, 2014 at 20:33
  • @cfr No, it's what I wrote: #1 is a macro name, that corresponds to the list to which some item has to be added.
    – egreg
    Jan 2, 2014 at 21:15
  • @egreg Ah, now I see. Thanks. It is when the first argument is empty, where the first argument is the existing list...
    – cfr
    Jan 2, 2014 at 21:22
  • @cfr If the first argument is empty, \@empty would be compared to \g@addto@macro, resulting in a disaster.
    – egreg
    Jan 2, 2014 at 21:25

2 Answers 2


The macro is aimed to incrementally build a list macro; in the document you find something like


Well, one can obtain the same result by


and then


and so on.

At the first \addtoDB call, the macro \alist defined by \newDB is still empty, so the conditional is true and


is executed. At the second macro call, \alist is not empty, so


is executed, resulting in \alist expanding to fig167,fig168. And so on for the successive calls.


In this particular case I think the two uses of \g@addto@macro are meant to be the same apart from the extra comma prepended to the second argument in the second case. In fact since the first argument of \g@addto@macro is meant to be simply the name of a macro, the brackets of the first case are not strictly necessary. However, for reasons we'll see in a second, they are a good precaution and, in my opinion, should be used in the second case as well.

To illustrate the difference they make in general (when the first argument is not necessarily a macro name) let's consider the following example:


\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}



The \test macro takes two arguments, \testA uses \test as in your first case (with brackets around #1) while \testB uses \test as in your second case.

In the body we use \testA and \testB with the same two arguments: #1 = {1}{2} and #2 = 3.

Since \testA uses brackets around #1, it expands to A \test{{1}{2}}{3} A, as expected, binding {1}{2} to the first argument of \test. \testB, instead, expands to B \test{1}{2}{3} B which means that \test will get 1 as first argument and 2 as second argument; {3} is not consumed by \test and gets typeset after \test is expanded.

Hence the output is

A this 12 is 3 a test A

B this 1 is 2 a test3 B

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .