# Fontspec: Is there any practical difference between \setmainfont and \newfontfamily + \def\rmfamily{…}

As the title of this question suggested. Is there any practical difference between

\setmainfont{font name}


and

\newfontfamily\familyname{font name}
\def\rmfamily{\familyname}


I had a look into the source of font spec. I believe the above two are practically the same. However, I am still not quite familiar with the latex3 syntax, so I may miss something.

Usually \rmdefault should expand to a string representing the font name; with your definition it expands to \familyname, whose expansion is not a string: for example, with \newfontfamily\familyname{Hoefler Text}, the expansion of \familyname is \protect\familyname  (with a space at the end, as usual with "robusted" commands. The expansion of \familyname  is

\fontencoding {EU1}\fontfamily {HoeflerText(0)}\selectfont


The expansion of \rmdefault after \setmainfont{Hoefler Text} is

HoeflerText(0)


So they are quite different.

Also using \rmfamily instead of \rmdefault does not give equivalent results: first of all, \rmfamily should be a robust command; its expansion results in \protect\rmfamily  and then in

\not@math@alphabet\rmfamily\mathrm\fontfamily\rmdefault\selectfont


So, again, also \DeclareRobustCommand{\rmfamily}{\familyname} won't work the same.

• Many thanks for the answer. But, what if I use \def\rmfamily\familyname? I modified the question. – Yan Zhou Aug 30 '11 at 19:54
• See updated answer – egreg Aug 30 '11 at 20:01
• N.B. if you do want to get access to the NFSS family defined when fontspec loads a new font family, you can use the \fontspec_set_family:Nnn command. – Will Robertson Aug 31 '11 at 1:11