考虑以下代码:
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{babelbib}
\usepackage{lipsum}
\usepackage{adforn}
\pdfmapfile{+OrnementsADF.map}
\begin{document}
\part{Part}
\lipsum
\end{document}
当包含该包时babelbib
,它会抛出以下警告:
如果没有babelbib
,则不会引发任何警告。
如何解决这个问题?
答案1
正如 egreg 所说,警告并不表示任何问题。它们只是告诉您该字体在特定编码中不可用,因此 LaTeX 已替换了后备字体。这很好,因为预计该字体在该编码中不可用,因此它正在替换一些合适的字体。
这是一个简单的例子:
\documentclass[french]{book}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{babelbib}
\usepackage{adforn}
\begin{document}
ABC
\end{document}
请注意,您无需手动添加地图文件,除非您手动安装了软件包但未能正确更新地图文件。也就是说,如果您需要手动添加地图文件,则说明您的安装存在问题。(修复起来可能相对简单,但无论如何都是有问题。)
例外:如果您使用与.tex
文档位于同一目录中的所有包文件,则在文档中添加地图文件可能是可行的方法。但我无法想象您为什么要这样做,而且我非常确定在这种情况下您需要在加载包之前添加地图。
奇怪的是,警告仅在第二次及后续编译运行时生成。删除该.aux
文件会删除后续编译的警告。没有理由这样做,因为警告并不表示有什么问题,但我只是好奇。
事实上,这个例子还可以更简洁。下面这个就足够了:
\documentclass[french]{book}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{babelbib}
\newcommand{\Pifont}[1]{\fontfamily{#1}\fontencoding{U}%
\fontseries{m}\fontshape{n}\selectfont}
\Pifont{OrnementsADF}
\begin{document}
ABC
\end{document}
事实上,以下内容就足够了:
\documentclass[french]{book}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{babelbib}
\newcommand{\Pifont}[1]{\fontfamily{#1}\fontencoding{U}%
\fontseries{m}\fontshape{n}\selectfont}
\Pifont{pzd}
\begin{document}
ABC
\end{document}
因此不存在问题是在 之前adforn
调用的结果。\Pifont
\begin{document}
虽然警告不是问题,但我不确定这是否是我不应该做的事情,即我不确定它在某些情况下是否真的会导致问题。
我也不确定为什么这似乎只是某些语言的问题。这不是babelbib
问题本身。如果我使用british
而不是french
,则不会收到警告。
因为\Pifont{}
之前已经调用过,所以我认为文档开头的活动字体是装饰字体。但我不完全确定在文档开头执行的代码在babelbib
做什么。例如,它似乎正在执行类似的东西\AtBeginDocument{... \AtBeginDocument{...}...}
,我不知道嵌套有什么用处。在文档开头还有它执行的代码,french
但没有执行其他语言的代码。但它在第一次和第二次运行时都执行了所有这些操作,所以在这种情况下我预计会出现一致的警告。
恐怕这包含的问题比答案还多。如果 egreg 不那么确定,我会忍不住说不adforn
应该\Pifont{}
在之前调用\begin{document}
。不是因为您看到的警告是个问题,而是因为我担心这样做会影响用于排版数字的编码,并且可能产生其他不良副作用。(LaTeX 正在寻找 OT1 而不是 T1。更改包加载顺序会以我不喜欢的方式更改它正在寻找的编码。虽然我不确定这是否是造成adforn
其不忠诚的原因。)
但既然 Egreg 如此确定,那么我的担心肯定是没有根据的……?