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

\setmainfont{font name}


\newfontfamily\familyname{font name}

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.

1 Answer 1


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


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


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, 2011 at 19:54
  • See updated answer
    – egreg
    Aug 30, 2011 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. Aug 31, 2011 at 1:11

You must log in to answer this question.

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