如何为不同的引擎配置字体和包选项?

如何为不同的引擎配置字体和包选项?

我希望能够依赖文档类中的代码来正确响应它是使用 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

  1. 检查是否是XeTeXversion确定 XeTeX 正在使用的可靠方法?
  2. 有没有办法(1)禁用或“卸载”fontspecfontenc使用像上面示例这样的代码来覆盖 LyX 在 UI 中没有特定(*)设置的情况下可能执行的操作?
  3. 在 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使用的引擎调整其行为,自动检测引擎以及要使用的特殊驱动程序。graphicxgeometryhyperref

注意:截至撰写本文时,microtype不适用于 XeLaTeX。仅支持字符突出的测试版可在以下位置安装:

http://tlcontrib.metatex.org/cgi-bin/package.cgi/action=view/id=569

相关内容