考虑输入
\documentclass{article}
\usepackage{fontspec}
\usepackage[french,main=american]{babel}
% \usepackage{fontspec}%%% Doesn't matter where you use fontspec
\begin{document}
Nothing.
\end{document}
无论启用了包含 fontspec 包的哪一行,都会出现警告
Package frenchb.ldf Warning: Add \usepackage{fontspec} to the
(frenchb.ldf) preamble of your document, on input line 5.
使用 xelatex 或者 lualatex 编译时打印到日志中。
输出文件似乎没有问题。警告是假的吗?
版本:
- XeTeX 3.14159265-2.6-0.99996 (TeX Live 2016)
- LuaTeX 版本 0.95.0(TeX Live 2016)
- LaTeX2e <2017/01/01> 补丁级别 1
- Babel 2016/04/23 3.9r
- 字体规格 2017/01/24 v2.5d
答案1
fontspec
这是最近的更改导致默认停止加载的结果xunicode
。中的相关代码frenchb.ldf
是
\ifFBunicode
\ifdefined\DeclareUTFcharacter
\else
\@ifpackageloaded{luainputenc}{}%
{\PackageWarning{frenchb.ldf}%
{Add \protect\usepackage{fontspec} to the\MessageBreak
preamble of your document,}%
}%
\fi
\else
[...irrelevant part...]
\fi
\ifBunicode
当使用的引擎是 XeTeX 或 LuaTeX 时,条件为真;在这种情况下,如果定义了,则不执行任何操作,假设\DeclareUTFcharacter
这意味着fontspec
已加载。这是错误的测试,因为它只检查是否xunicode
已加载,而不是fontspec
。由于此包不再加载它,测试返回 false,因此发出警告,因为您luainputenc
当然没有加载。
您可以使用该silence
包来摆脱这个虚假警告,直到babel-french
更新以查找,比如说\setmainfont
。
更新
2017 年 1 月 30 日发布的 3.2g版本babel-french
应该已经修复了这个问题。在文件的注释中,.dtx
我们可以看到
\changes{v3.2g}{2017/01/24}{fontspec defines TU encoding now and
no longer loads xunicode.sty. Test changed.}
这表明维护人员已经意识到了这个问题。现在测试
\ifFBunicode
\@ifpackageloaded{fontspec}{}%
{\@ifpackageloaded{luainputenc}{}%
{\PackageWarning{frenchb.ldf}%
{Add \protect\usepackage{fontspec} to the\MessageBreak
preamble of your document, reported}%
}%
}
\else
[...irrelevant part...]
\fi
fontspec
因此要专门检查的加载。
但是,这不允许(像以前一样)fontspec
在之后加载babel
。