[Tex/LaTex] XeLaTeX & fontspec can not use Seravek’s small caps

fontsfontspecopentypesmall-capsxetex

I am using XeLaTeX & fontspec in TexLive on OS X Yosemite.

The problem is I could not use font Seravek's small caps. However, if I define a font family "Seravek ExtraLight" directly, small caps will work.

It has been confirmed that Seravek and the version on my Mac supports small caps.

Here is a simplified code:

\documentclass{article}
\usepackage{fontspec}
\newfontfamily \seravek[BoldFont = * ExtraLight]{Seravek}
\newfontfamily \seravekEL{Seravek ExtraLight}
\newfontfamily \avenir{Avenir Next}

\begin{document}
\seravek \scshape Small Caps Testing

\seravek \scshape \textbf{Small Caps Testing}

\seravekEL \scshape Small Caps Testing

\avenir \scshape Small Caps Testing

\end{document}

The output:
PDF output

As you could see, no small caps for Seravek. With the normal way to define font family, no small caps for different font weight, either.

The log info about fontspec indicated that fontspec failed to load small caps for Seravek, as pasted here:

. fontspec info: "defining-font"
. 
. Font family 'Seravek(0)' created for font 'Seravek' with options [].
. 
. This font family consists of the following shapes:
. 
. * 'normal' with NFSS spec.:
. <->"Seravek/ICU:"
. 
. * 'bold' with NFSS spec.:
. <->"Seravek ExtraLight/ICU:"
. 
. * 'italic' with NFSS spec.:
. <->"Seravek/I/ICU:"
. 
. * 'bold italic' with NFSS spec.:
. <->"Seravek ExtraLight/I/ICU:"
.................................................
\g_fontspec_family_Seravek ExtraLight_int=\count124
.................................................
. fontspec info: "defining-font"
. 
. Font family 'SeravekExtraLight(0)' created for font 'Seravek ExtraLight'
. with options [].
. 
. This font family consists of the following shapes:
. 
. * 'normal' with NFSS spec.:
. <->"Seravek ExtraLight/ICU:script=latn;language=DFLT;"
. 
. * 'small caps' with NFSS spec.:
. <->"Seravek ExtraLight/ICU:script=latn;language=DFLT;+smcp;"
. 
. * 'bold' with NFSS spec.:
. <->"Seravek ExtraLight/B/ICU:script=latn;language=DFLT;"
. 
. * 'italic' with NFSS spec.:
. <->"Seravek ExtraLight/I/ICU:script=latn;language=DFLT;"
. 
. * 'italic small caps' with NFSS spec.:
. <->"Seravek ExtraLight/I/ICU:script=latn;language=DFLT;+smcp;"
. 
. * 'bold italic' with NFSS spec.:
. <->"Seravek ExtraLight/BI/ICU:script=latn;language=DFLT;"
.................................................
\g_fontspec_family_Avenir Next_int=\count125
.................................................
. fontspec info: "defining-font"
. 
. Font family 'AvenirNext(0)' created for font 'Avenir Next' with options [].
. 
. This font family consists of the following shapes:
. 
. * 'normal' with NFSS spec.:
. <->"Avenir Next/ICU:script=latn;language=DFLT;"
. 
. * 'small caps' with NFSS spec.:
. <->"Avenir Next/ICU:script=latn;language=DFLT;+smcp;"
. 
. * 'bold' with NFSS spec.:
. <->"Avenir Next/B/ICU:script=latn;language=DFLT;"
. 
. * 'bold small caps' with NFSS spec.:
. <->"Avenir Next/B/ICU:script=latn;language=DFLT;+smcp;"
. 
. * 'italic' with NFSS spec.:
. <->"Avenir Next/I/ICU:script=latn;language=DFLT;"
. 
. * 'italic small caps' with NFSS spec.:
. <->"Avenir Next/I/ICU:script=latn;language=DFLT;+smcp;"
. 
. * 'bold italic' with NFSS spec.:
. <->"Avenir Next/BI/ICU:script=latn;language=DFLT;"
. 
. * 'bold italic small caps' with NFSS spec.:
. <->"Avenir Next/BI/ICU:script=latn;language=DFLT;+smcp;"
.................................................

Where is the problem? How could I solve this? Thanks!

Best Answer

This does look like a possible fontspec problem, since loading the font manually does allow small caps to be selected. (I didn't realise Seravek was bundled with Mavericks.) It might take me a little while to get around to fixing this.

In the meantime you can use an ugly form of font loading:

\documentclass[a4paper]{article}
\usepackage{fontspec}
\begin{document}
\fontspec[SmallCapsFont=Seravek,SmallCapsFeatures={RawFeature=+smcp}]{Seravek}
regular \textsc{small caps}
\end{document}

The problem must lie in the code that checks whether a font feature exists; this could partially be a XeTeX bug as well.