我希望能够依赖文档类中的代码来正确响应它是使用 pdfLaTeX 还是 XeTeX 引擎进行渲染。我使用的编辑器 (LyX) 使用通过文档属性对话框建立的几个设置来实现这一点,但我希望有一个文档类能够正确配置自身以响应活动引擎独自的,无需额外的(编辑器特定的)设置。
例如,我希望能够编写类似以下内容的内容:
\@ifundefined{XeTeXversion}{
% (1) Ensure that fontspec is not loaded
\usepackage[T1]{fontenc} % (*) In LyX, this is set in document properties, by un-checking Fonts > Use non-Tex fonts
\usepackage[latin9]{inputenc}
%...
\usepackage{tgpagella}
%...
\usepackage[protrusion=true]{microtype}
% (2) Possible additional engine-sepcifc packages and options
}{%
% (1) Ensure that fontenc is not loaded
\usepackage{fontspec} % (*) In LyX, this is set in document properties, by checking Fonts > Use non-Tex fonts
%...
\defaultfontfeatures{Mapping=tex-text}
\setromanfont[Ligatures=TeX]{Palatino}
%...
\usepackage{xunicode}
% (2) Possible additional engine-sepcifc packages and options
}
虽然,如果我在 LyX UI (*) 中明确切换fontspec
并使用 LyX 的设置,我可以让它工作,但我还剩下两个问题:fontenc
- 检查是否是
XeTeXversion
确定 XeTeX 正在使用的可靠方法? - 有没有办法(1)禁用或“卸载”
fontspec
或fontenc
使用像上面示例这样的代码来覆盖 LyX 在 UI 中没有特定(*)设置的情况下可能执行的操作? - 在 pdfLaTeX 和 XeTeX (2) 之间切换时,是否有我应该使用(或避免)的通用引擎特定包或包选项。
答案1
首先,要获取可通过 LaTeX 和 XeLaTeX 处理的文档,请仅使用 UTF-8 编码。
\RequirePackage{ifxetex}
\ifxetex
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\else
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tgpagella}
\usepackage[protrusion=true]{microtype}
\fi
如何让 LyX 能够消化这一点又是另一回事。
请注意,xunicode
不应加载(它由 自动加载fontspec
),并且选项Mapping=tex-text
已更改为Ligatures=TeX
,因此您指定了两次。
常用的软件包例如color
、、和必须根据所xcolor
使用的引擎调整其行为,自动检测引擎以及要使用的特殊驱动程序。graphicx
geometry
hyperref
注意:截至撰写本文时,microtype
不适用于 XeLaTeX。仅支持字符突出的测试版可在以下位置安装:
http://tlcontrib.metatex.org/cgi-bin/package.cgi/action=view/id=569