消除警告的最佳方法(最合适和最通用的解决方案)是什么
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
通过明确设置在编辑的文档中应该使用哪种字体来表示特定的系列+系列+形状组合?
粗体小写字母在字体方面并不广泛使用。例如,它们在 CM-Super(T1 编码的默认字体)中可用,但在总体上更好的 Latin Modern 中不可用。
假设我使用 Latin Modern 作为默认字体 ( \usepackage{lmodern}
)。在出现粗体小型大写字母时,应该怎么做才能让 LaTeX 回退到 CM-Super?(并且只有在出现粗体小型大写字母时,中型小型大写字母才应继续使用 Latin Modern 输入。)
答案1
据我所知,您只需使用 声明该字体形状即可\DeclareFontShape
。您只需声明字体形状即可使用标准字体的字体形状。这应该会导致与之前相同的结果,只是没有警告。
Using `lmodern` with `T1` font encoding you get the following warning with `\scshape\bfseries`:
LaTeX Font Warning: Font shape `T1/lmr/bx/sc' undefined
(Font) using `T1/lmr/bx/n' instead on input line 19.
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
因此,您需要声明字体形状T1/lmr/bx/sc
。正如 Ulrike 指出的那样,您可以使用以下代码替换另一种字体:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern} \normalfont %to load T1lmr.fd
\DeclareFontShape{T1}{lmr}{bx}{sc} { <-> ssub * cmr/bx/sc }{}
\begin{document}
{\normalfont normal font}
{\scshape small caps}
{\ttfamily tt family}
{\bfseries bold font}
{\scshape\bfseries bold small caps}% works and uses `cmr` font instead of `lmr`
\end{document}
答案2
我试图使用上一条评论中的技巧,直到我意识到我使用的是无字体和 CM 字体没有‘无衬线’粗体小型大写字母...
为了解决这个问题,我使用了包含它们的 helvet 包。还有一个额外的技巧,因为您必须重新加载 \sfdefault 的声明,因为 \usepackage{helvet} 会覆盖它!然后它默认为 lmodern,除了您使用 helvet 的 sans small caps 之外......
只需在这里发布代码,以防它对某人有用!
\documentclass[a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\sffamily %to load T1lmss.fd
% Load 'sans small caps' from helvet:
\usepackage{helvet}
\sffamily %to load T1phvss.fd
% Substitute non-existing lmss/bx/sc with phv/bx/sc
\DeclareFontShape{T1}{lmss}{bx}{sc} { <-> ssub * phv/bx/sc }{}
% Can also pick the sans small caps:
\DeclareFontShape{T1}{lmss}{m}{sc} { <-> ssub * phv/m/sc }{}
% Use lmodern to override helvet:
\renewcommand{\rmdefault}{lmr}
\renewcommand{\sfdefault}{lmss}
\renewcommand{\ttdefault}{lmtt}
\begin{document}
This is lmodern roman (lmr) -- default
{\sffamily This is lmodern sans (lmss)}
{\scshape This is small caps from lmodern (lmr)}
{\sffamily \scshape This is sans small caps from helvet (phv)}
{\sffamily \bfseries \scshape This is sans bold small caps from helvet (phv)}
\end{document}