Малые заглавные буквы в fontspec на XeLaTeX

Малые заглавные буквы в fontspec на XeLaTeX

Я пытаюсь набрать свой документ в Times с помощью XeLaTeX. Поскольку 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, и результат оказался отличным, без предупреждений.
  • Я заменил Timesна Times New Romanи проблем не возникло.
  • Я добавил Renderer=ICUи предупреждение изменилось на icu-feature-not-exist-in-font. Кажется, что fontspec можно использовать .dfontс ICU?
  • Я заменил Timesна другой .dfontшрифт Helvetica Neueи проблема исчезла. Таким образом, не все .dfontшрифты вызывают проблему....

Я использую MacTeX 2013 на OS X Mountain Lion.

Обновлять

Следуя предложению @KhaledHosny, я попробовал добавить \the\XeTeXfonttype\fontbefore и after \textsc{, и оба вернули 1(шрифт AAT). С Render=ICUними вернули 2(шрифт OpenType), но я не получил маленькие заглавные буквы. Кажется, XeTeX может обрабатывать Times как OpenType, но даже в этом случае это SmallCapsFeaturesне работает.

решение1

Я обнаружил, что этого можно добиться с помощью NFSS.

Сначала Times и TeX Gyre Termes загружаются отдельно. Затем определение малых заглавных букв Times в NFSS перезаписывается так, чтобы оно перенаправляло на малые заглавные буквы 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.

Связанный контент