Versalitas en fontspec en XeLaTeX

Versalitas en fontspec en XeLaTeX

Estoy intentando componer mi documento con Times con XeLaTeX. Debido a que Times no incluye versalitas, quiero usar TeX Gyre Termes solo para versalitas. Lo intentéeste método, pero no funcionó. Se emite una advertencia y el resultado no es versalitas.

La pregunta:

  • ¿Lo que está mal?
  • ¿Cómo puedo hacer esto?

Aquí hay un MWE:

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

y la advertencia:

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

Lo que he probado:

  • Intenté componer con LuaLaTeX y el resultado fue bueno sin advertencias.
  • Lo reemplacé Timespor Times New Romany no hubo problema.
  • Agregué Renderer=ICUy la advertencia cambió a icu-feature-not-exist-in-font. ¿Parece que fontspec se puede usar .dfontcon ICU?
  • La reemplacé Timescon otra .dfontfuente Helvetica Neuey el problema desapareció. Por lo tanto, no todas .dfontlas fuentes causan el problema...

Estoy usando MacTeX 2013 en OS X Mountain Lion.

Actualizar

Siguiendo una sugerencia de @KhaledHosny, intenté agregar \the\XeTeXfonttype\fontantes y después \textsc{, y ambos regresaron 1(fuente AAT). Con Render=ICUellos regresaron 2(fuente OpenType), pero no obtuve versalitas. Parece que XeTeX puede tratar Times como OpenType, pero aun así SmallCapsFeaturesno funciona.

Respuesta1

Descubrí que esto se puede lograr con NFSS.

Primero, Times y TeX Gyre Termes se cargan por separado. Luego, la definición de versalitas de Times en NFSS se sobrescribe para que redirija a versalitas de 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}

Respuesta2

Quizás la forma más sencilla sea la siguiente:

En el ejemplo,Texto carmesíno tiene versalitas, perocarmesíhace. (La escala utilizada aquí sólo tiene que ver con una mejor apariencia en este caso).

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

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

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

ACTUALIZAR como se indicaaquí, \newfontinstanceya no funciona, se reemplazó con \newfontfamily.

información relacionada