[Tex/LaTex] Undefined font shape with lualatex

fontsfontspeclatin-modernluatexpolyglossia

I know that this is a quite common question, but looking for many threads about undefined font shape I didn't find any solution…

When I compile my document with lualatex I get 5 different warnings related to undefined font shapes substituted.

LaTeX Font Warning: Font shape `TU/lmr/bx/sc' undefined
(Font)              using `TU/lmr/bx/n' instead on input line 14.
--
LaTeX Font Warning: Font shape `TU/lmroman12-italic.otf(0)/bx/n' undefined
(Font)              using `TU/lmroman12-italic.otf(0)/m/n' instead on input line
--
LaTeX Font Warning: Font shape `TU/lmroman12-italic.otf(0)/m/it' undefined
(Font)              using `TU/lmroman12-italic.otf(0)/m/n' instead on input line
--
LaTeX Font Warning: Font shape `TU/lmroman12-italic.otf(0)/bx/it' undefined
(Font)              using `TU/lmroman12-italic.otf(0)/bx/n' instead on input lin
--
LaTeX Font Warning: Font shape `TU/cmr/m/n' undefined
(Font)              using `TU/lmr/m/n' instead on input line 25.
--
LaTeX Font Warning: Some font shapes were not available, defaults substituted.

Below is the minimal working example with my five warnings. Actually, I think there are 3 different error sources:

  • a first one related to lmodern package: I believed that lmr includes maaaaany font shapes, in particular, all variations with lf/md/bf and up/it/sl/sc shapes ;
  • the second one related to the way I define the font used for foreign language (maybe it's not the right place for this problem) ;
  • a third one related to the use of cmr by the gnuplot cairolatex output.

Well, I'm interested in any idea to solve any of these problems.

\documentclass{memoir}

% Font packages
\usepackage{lmodern} % serif

% Define language
\usepackage{polyglossia}
\setmainlanguage[]{french}
\setotherlanguage[]{english}
% Define english font
\newfontfamily{\englishfont}{lmroman12-italic.otf} % Use italic font for foreign language

\begin{document}
  \textsc{\textbf{TU/lmr/bx/sc $\to$ TU/lmr/bx/n}}

  \textenglish{\textbf{TU/lmroman12-italic.otf(0)/bx/n $\to$ TU/lmroman12-italic.otf(0)/m/n}}

  \textenglish{\textit{TU/lmroman12-italic.otf(0)/m/it $\to$ TU/lmroman12-italic.otf(0)/m/n}}

  \textenglish{\textit{\textbf{TU/lmroman12-italic.otf(0)/bx/it $\to$ TU/lmroman12-italic.otf(0)/bx/n}}}

  % Used including gnuplot cairolatex plots
  \begingroup
    \fontfamily{cmr}%
    \selectfont
    TU/cmr/m/n $\to$ TU/lmr/m/n
  \endgroup
\end{document}

Best Answer

Loading lmodern along with fontspec does nothing relevant for text fonts, because all it does in this respect is

\renewcommand{\rmdefault}{lmr}
\renewcommand{\sfdefault}{lmss}
\renewcommand{\ttdefault}{lmtt}

which is done anyway by fontspec. It can make sense to load it nonetheless, because it also sets Latin Modern as the math font.

The warning

LaTeX Font Warning: Font shape `TU/lmr/bx/sc' undefined
(Font)              using `TU/lmr/bx/n' instead on input line 17.

is due to Latin Modern lacking boldface small caps. The last warning is due to cmr lacking a font definition file for TU, so LaTeX does the default substitution in this case, that is, changing the family name to \familydefault, which expands to \rmdefault and so to lmr.

The other three warnings derive from you defining \englishfont in an incorrect way.

\documentclass{memoir}

% Font packages
\usepackage{lmodern} % serif

% Define language
\usepackage{polyglossia}
\setmainlanguage[]{french}
\setotherlanguage[]{english}
% Define english font
\newfontfamily{\englishfont}{lmroman}[
  Ligatures=TeX,
  UprightFont=*10-italic,
  ItalicFont=*10-italic,
  BoldFont=*10-bolditalic,
  BoldItalicFont=*10-bolditalic,
  SmallCapsFont=*caps10-oblique,
]

\begin{document}

\textsc{\fontname\font}

\textsc{\textbf{\fontname\font}}

\textenglish{\textbf{\fontname\font}}

\textenglish{\textit{\fontname\font}}

\textenglish{\textit{\textbf{\fontname\font}}}

\textenglish{\textsc{\fontname\font}}

\end{document}

This will only raise one warning about the missing boldface small caps font.

enter image description here