下面的示例是在 2016 年对 fontspec 进行更改之前处理字体、加载 polyglossia 与 babel 等的一种可接受的方法:
\usepackage{ifxetex}
\usepackage{ifluatex}
\ifxetex% uses fontspec
\usepackage{fontspec}% check package docs
\defaultfontfeatures{Mapping=tex-text}
\usepackage{xunicode}% check if outmoded
\usepackage{xltxtra}% check if outmoded
\else
\ifluatex% also uses fontspec
\usepackage{fontspec}% check package docs
\defaultfontfeatures{Ligatures=TeX}
\else% traditional NFSS
\usepackage[utf8]{inputenc}
\usepackage[TS1,T1]{fontenc}
\fi
\fi
那么是否还应该尝试测试 2016 年之前的版本?是否应该放弃 xunicode 和 xltxtra(鉴于 fontspec doc 引用了 euenc)?是否应该用 {Ligatures=TeX} 替换 {Mapping=tex-text},因为它们在功能上是等效的?
我的目标是提供一个通用框架,用于制作(相对)与引擎无关的文档。我可能会将语言支持纳入此示例中。我还有其他结构,用于测试 pdf 或 dvi 模式下的 xetex、pdftex、luatex 以及常规 tex dvi 模式。
答案1
你不需要(很长时间了,不仅仅是去年)加载 xunicode、xltxtra,
或者指定 tex 映射(自 2014 年以来为默认设置),因此您所需要的只是
\ifx\Umathchardef\undefined
\usepackage[utf8]{inputenc}
\usepackage[TS1,T1]{fontenc}
\else
\usepackage{fontspec}
\fi