XeLaTeX 上的字体规格中的小型大写字母

XeLaTeX 上的字体规格中的小型大写字母

我正在尝试使用 XeLaTeX 用 Times 排版我的文档。由于 Times 不包含小型大写字母,因此我只想使用 TeX Gyre Termes 来排版小型大写字母。我试过此方法,但不起作用。发出警告,并且输出不是小写字母。

问题:

  • 怎么了?
  • 我怎样才能做到这一点?

以下是 MWE:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[
  SmallCapsFont={TeX Gyre Termes},
  SmallCapsFeatures={Letters=SmallCaps},
]{Times}
\begin{document}
Hello!
\textsc{Hello!}
\end{document}

并发出警告:

*************************************************
* fontspec warning: "aat-feature-not-exist-in-font"
* 
* AAT feature 'Letters=SmallCaps' (3,3) not available in font 'TeX Gyre
* Termes'.
*************************************************

我尝试过的:

  • 我尝试使用 LuaLaTeX 排版,结果很好,没有任何警告。
  • 我替换TimesTimes New Roman,没有问题。
  • 我添加了Renderer=ICU,警告改为icu-feature-not-exist-in-font。看来 fontspec 可以.dfont与 ICU 一起使用?
  • 我换了Times另一种.dfont字体Helvetica Neue,问题就消失了。因此不是所有.dfont字体都会导致问题……

我在 OS X Mountain Lion 上使用 MacTeX 2013。

更新

根据@KhaledHosny的建议,我尝试\the\XeTeXfonttype\font在 之前和之后添加\textsc{,结果都返回了1(AAT 字体)。Render=ICU添加 后它们返回了2(OpenType 字体),但没有得到小写字母。看来 XeTeX 可以将 Times 视为 OpenType,但即便如此也SmallCapsFeatures不起作用。

答案1

我发现这可以通过 NFSS 实现。

首先,Times 和 TeX Gyre Termes 是分开加载的。然后 NFSS 中 Times 的小写字母定义被覆盖,从而重定向到 TeX Gyre Termes 的小写字母。

\documentclass{article}

\usepackage{fontspec}
\setmainfont{Times}

\newfontfamily\tgtermes{TeX Gyre Termes}
\makeatletter
  \begingroup
    \tgtermes
    \DeclareFontShape{\f@encoding}{\rmdefault}{m}{sc}{%
      <-> ssub * \f@family/m/sc}{}
    \DeclareFontShape{\f@encoding}{\rmdefault}{bx}{sc}{%
      <-> ssub * \f@family/bx/sc}{}
  \endgroup
\makeatother

\begin{document}

Hello!
\textsc{Hello!}

\end{document}

答案2

也许最简单的方法如下:

在示例中,深红文字没有小型大写字母,但是赤红确实如此。(此处使用的比例仅与本例中更好看的输出有关。)

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Crimson Text}

\newfontinstance\scshape[Letters=SmallCaps,Scale=1.15]{Crimson}

\begin{document}
Text \textsc{Text}
\end{document}

更新如前所述这里\newfontinstance不再起作用,已替换为\newfontfamily

相关内容