法语:将 \usepackage{fontspec} 添加到文档的序言中

法语:将 \usepackage{fontspec} 添加到文档的序言中

考虑输入

\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

相关内容