给出这个简单的 LaTeX 代码
\documentclass [spanish] {book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{lmodern}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Hola}
\end{document}
我收到警告Font shape `T1/lmr/bx/sc' undefined(Font) using `T1/lmr/bx/n' instead`
我用西班牙语写作,使用了很多 TikZ,所以我必须小心不要破坏图片。我该如何摆脱它?我在字体方面做错了什么?
答案1
警告是不可避免的,除非使用低级别的代码。
问题是babel-spanish
,默认情况下,要使用小写罗马数字,而不是像英语那样的小写数字。
然而,与欧洲现代字体(T1 编码的默认字体)相反,拉丁现代字体没有粗体小写字体。因此babel-spanish
使用了一个技巧:它使用普通粗体字体中的大写字母来伪造字体,但尺寸要小一些(与下标相对应的尺寸)。
您有三种策略。前两种策略需要在之前添加一些代码\begin{document}
。
策略1
用 European Modern 中对应的字体替换不存在的 Latin Modern 字体。
\sbox0{%
\fontseries{bx}\scshape
\global\expandafter\let\csname T1/lmr/bx/sc/10\expandafter\endcsname\the\font
}
缺点:你需要对每个需要的字体大小都这样做。对于目录,这才是真正的问题,只需10
要这样做(或10.95
使用11pt
选项,或12
为12pt
选项)。
策略2
自从你知道将会使用伪造的小型大写罗马数字,避免只产生恼人警告的检查业务。
\makeatletter
%% lmodern has no boldface small caps and we know it
%% so we avoid all the warnings related to the faking business
\def\es@xlsc#1#2#3{%
\leavevmode
\hbox{\check@mathfonts\fontsize\sf@size\z@\selectfont#1{#3}}%
}
\makeatother
策略 3
使用大写罗马数字。
\usepackage[spanish,es-ucroman]{babel}
答案2
正如@Skillmon 所说,“问题”在于您在某个地方尝试使用套件中lmodern
没有的字体(可能是部分标题中的粗体内容?我不知道),因此进行了替换。
如果您对替换感到满意,您可以将警告隐藏在地毯下。鉴于警告如下:
LaTeX Font Warning: Font shape `T1/lmr/bx/sc' undefined
(Font) using `T1/lmr/bx/n' instead on input line 2.
Package spanish Warning: Replacing `T1/lmr/bx/sc' by
(spanish) faked small caps on input line 2.
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
你可以使用这个前你的\documentclass
:
\RequirePackage{silence}
\WarningFilter{latexfont}{Font shape `T1/lmr/bx/sc'}
\WarningFilter{spanish}{Replacing `T1/lmr/bx/sc'}
% I normally leave that last one alone, as a reminder I am shoving
% things under the carpet, but well...
\WarningFilter{latexfont}{Some font shapes were}
...哈拉,没有警告 ;-)
(但这是作弊行为,因此请谨慎使用,并且只有在您确定的情况下才可使用)。
顺便提一下,PGF-Ti钾z 与此无关!