Versalete em fontspec no XeLaTeX

Versalete em fontspec no XeLaTeX

Estou tentando compor meu documento com Times com XeLaTeX. Como o Times não inclui versaletes, quero usar o TeX Gyre Termes apenas para versaletes. tenteieste método, mas não funcionou. Um aviso é emitido e a saída não é minúscula.

A questão:

  • O que está errado?
  • Como posso fazer isso?

Aqui está um MWE:

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

e o aviso:

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

O que eu tentei:

  • Tentei compor com LuaLaTeX e o resultado foi bom, sem avisos.
  • Troquei Timespor Times New Romane não houve problema.
  • Eu adicionei Renderer=ICUe o aviso mudou para icu-feature-not-exist-in-font. Parece que o fontspec pode ser usado .dfontcom ICU?
  • Troquei Timespor outra .dfontfonte Helvetica Neuee o problema desapareceu. Portanto, nem todas .dfontas fontes causam o problema....

Estou usando o MacTeX 2013 no OS X Mountain Lion.

Atualizar

Seguindo uma sugestão de @KhaledHosny, tentei adicionar \the\XeTeXfonttype\fontbefore e after \textsc{e ambos retornaram 1(fonte AAT). Com Render=ICUeles retornaram 2(fonte OpenType), mas não recebi versalete. Parece que o XeTeX pode tratar o Times como OpenType, mas mesmo assim SmallCapsFeaturesnão funciona.

Responder1

Descobri que isso pode ser alcançado com NFSS.

Primeiro, Times e TeX Gyre Termes são carregados separadamente. Em seguida, a definição de versalete de Times no NFSS é sobrescrita para que redirecione para versalete 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}

Responder2

Talvez a maneira mais fácil seja a seguinte:

No exemplo,Texto Carmesimnão tem smallcaps, masCarmesimfaz. (A escala usada aqui tem apenas a ver com resultados mais bonitos neste caso.)

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

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

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

ATUALIZAR conforme observadoaqui, \newfontinstancenão funciona mais, substituído por \newfontfamily.

informação relacionada