我知道这是一个相当常见的问题,但是寻找许多关于未定义字体形状的线程后我没有找到任何解决方案......
当我用编译我的文档时,lualatex
我收到 5 个与未定义的字体形状替换相关的不同警告。
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.
下面是包含 5 个警告的最小工作示例。实际上,我认为有 3 个不同的错误来源:
- 第一个与
lmodern
包相关的:我相信它lmr
包括许多字体形状,特别是所有带有lf/md/bf
和up/it/sl/sc
形状的变体; - 第二个问题与我定义外语字体的方式有关(也许这不是解决这个问题的正确地方);
cmr
第三个与 gnuplot cairolatex 输出的使用有关。
嗯,我对解决这些问题的任何想法都很感兴趣。
\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}
答案1
加载lmodern
与fontspec
文本字体无关,因为它在这方面所做的只是
\renewcommand{\rmdefault}{lmr}
\renewcommand{\sfdefault}{lmss}
\renewcommand{\ttdefault}{lmtt}
无论如何, 都会这样做fontspec
。无论如何,加载它都是有意义的,因为它还将 Latin Modern 设置为数学字体。
警告
LaTeX Font Warning: Font shape `TU/lmr/bx/sc' undefined
(Font) using `TU/lmr/bx/n' instead on input line 17.
是因为 Latin Modern 缺少粗体小写字母。最后一个警告是由于cmr
缺少 TU 的字体定义文件,因此 LaTeX 在这种情况下会进行默认替换,即将字体家族名称更改为\familydefault
,然后扩展为 ,\rmdefault
并因此扩展为lmr
。
其他三个警告源于您\englishfont
以错误的方式定义。
\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}
这只会引发一个关于缺少粗体小型大写字体的警告。
答案2
使用这个定义:
\documentclass{memoir}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}[
SmallCapsFont=Latin Modern Roman Caps,
SmallCapsFeatures = { Letters=SmallCaps},
ItalicFeatures = {SmallCapsFont=LMRomanCaps10-Oblique}
]
% Define language
\usepackage{polyglossia}
\setmainlanguage[]{french}
\setotherlanguage[]{english}
% Define english font
\let\englishfont\itshape
\begin{document}
\textsc{\textbf{TU/lmr/bx/sc $\to$ TU/lmr/bx/n}}
\textenglish{\textbf{TU/lmroman12-italic.otf(0)/bx/n}}
\textenglish{TU/lmroman12-italic.otf(0)/m/it}
\textenglish{\textbf{TU/lmroman12-italic.otf(0)/bx/it}}
\textenglish{\textsc{TU/lmroman12-italic.otf(0)/bx/it}}
\end{document}
据我所知,拉丁现代字体没有粗体小写字母