# What does triple at (@@@) mean in LaTeX?

I was trying to make my own customization letter class and searching for the definition of the \toname command, I found this.

A triple at several times, but I wasn't able to find information so I decided to ask.

When you do

\begin{letter}{
M. Y. Friend \\
42 Some Rd \\
Someplace
}


LaTeX does

\@processto{\leavevmode\ignorespaces #1}}


which in the example case becomes

\@processto{\leavevmode\ignorespaces M. Y. Friend \\ 42 Some Rd \\ Someplace }


This will first execute

\@xproc \leavevmode\ignorespaces M. Y. Friend \\ 42 Some Rd \\ Someplace \\@@@


According to the definition of \@xproc, LaTeX will take as #1 everything up to the first \\ and #2 everything up to \\@@@ and so it will do

\def\toname{\leavevmode\ignorespaces M. Y. Friend }
\def\toadddress{ 42 Some Rd \\ Someplace \\}


\begin{letter}{M. Y. Friend}


The same process will lead to the call

\@xproc \leavevmode\ignorespaces M. Y. Friend \\@@@


In this case #1 is again everything up to the first (and unique) \\, and #2 is everything from \\ (excluded) up to @@@, so it's empty.

The interesting case is therefore when \toaddress is not empty: a call to \@yproc is necessary in order to remove the trailing \\ and indeed the call is

\@yproc #1@@@


which will become

\@yproc  \leavevmode\ignorespaces M. Y. Friend \\ 42 Some Rd \\ Someplace @@@


so it will end up in

\def\toaddress{ 42 Some Rd \\ Someplace }


Note that leading and trailing spaces are not omitted. They will “disappear” when \opening is executed, because \toname and \toaddress are typeset in the scope of \raggedright, precisely (line 192)

{\raggedright \toname \expandafter\\\toaddress \par}%


so in the example case we'll get

{\raggedright \leavevmode\ignorespaces M. Y. Friend \\ 42 Some Rd \\ Someplace \par}


Since \\ also does \par, in this context, trailing spaces are suppressed by the implicit \unskip.

Why the strange \expandafter? Because a user might like some separation between the addressee's name and the address, so typing in something like

\begin{letter}{
M. Y. Friend \\[1ex]
42 Some Rd \\
Someplace
}


Apply the same reasoning as above to see that in this case LaTeX does

\def\toaddress{[1ex] 42 Some Rd \\ Someplace }


and without the \expandafter the following \\ would not see [1ex].

The documentation indeed says

A better fix would be to do a proper parsing but…

Look at the next line where \@xproc is defined.

\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}

There are #1 separated by \\ and #2 separated by @@@. So @@@ is simply separetor of the second parameter. The usage of \@xproc text\\@@@ (used in \@processto) does following: if text includes \\ then #2 is nonempty because #2 includes the rest of text followed by \\. If text does not include \\ then #2 is empty because #1 is whole text and we see nothing between \\ and @@@. This behavior can be broken if someone write a text including \\@@@ but macro programmer supposed that this has less probability.