法文:將 \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
  • 通天塔 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 時,條件為 true ;在這種情況下,如果\DeclareUTFcharacter已定義,則不執行任何操作,假設方法fontspec已載入。這是錯誤的測試,因為它只是檢查是否xunicode已加載,而不是fontspec。由於該套件不再加載它,因此測試返回 false,因此會發出警告,因為您luainputenc當然沒有加載。

您可以使用該silence套件來消除此虛假警告,直到babel-french更新為查找,例如,\setmainfont.


更新

babel-french在2017年1月30日發布的3.2g版本中,該問題應該得到解決。在文件的註解中.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

相關內容