# Small Caps using fontspec with bilingual document (xelatex)

A weird problem in fontspec. In the MWE and the image below, you see that fontspec renders Greek small caps when Script=Greek but it doesn't render Latin small caps and conversely, when Script=Latin. What is wrong with it and how to fix it?

Note: I don't want to have to let LaTeX know which language am I using, I want a global solution, if possible.

Thanks a lot, beforehand.

\documentclass{minimal}

\usepackage{fontspec}
\newfontfamily{\greek}[Script=Greek]{CMU Serif}
\newfontfamily{\latin}[Script=Latin]{CMU Serif}

\begin{document}
\noindent
{\greek\scshape Παράξενο Aυτό, Don't You Think?} \\
{\latin\scshape Παράξενο Αυτό, Don't You Think?}
\end{document}


• CMU Serif has no small caps Greek letters. Feb 3 '18 at 14:18
• @egreg If it hasn't, how do you explain the picture? Feb 3 '18 at 14:24
• It doesn't have them when the script is set to Latin (and conversely). Feb 3 '18 at 14:29

It is not fontspec but the font. It has implemented the small caps feature so that it is disabled for other scripts.

With xelatex there is nothing that can done (apart from correctly selecting the language which imho you should do as it would also set the correct hyphenation patterns).

With lualatex you can try to patch the font. The following works but I'm really not sure if this the correct way to declare the feature and if some other values need a change too.

\documentclass{article}

\usepackage{fontspec}

\usepackage{luacode}

\begin{luacode}

local patch_cmuserif = function (fontdata)
if fontdata.psname == "CMUSerif-Roman"
then
for i, v in ipairs(fontdata.resources.sequences) do
if
fontdata.resources.sequences[i].features.name==s_s_1
or
fontdata.resources.sequences[i].features.name==s_s_3
then
fontdata.resources.sequences[i].features.smcp={
["dflt"]={["dflt"]=true,},
["cyrl"]={["dflt"]=true,},
["latn"]={["dflt"]=true,},
["grek"]={["dflt"]=true,},
}
end
end
end
end

(
patch_cmuserif,
"change_cmuserif"
)
\end{luacode}

\newfontfamily{\greek}[Script=Greek]{CMU Serif}
\newfontfamily{\latin}[Script=Latin]{CMU Serif}

\begin{document}

\noindent
{\greek\scshape Παράξενο Aυτό, Don't You Think?} \\
{\latin\scshape Παράξενο Αυτό, Don't You Think?}
\end{document}


• Thanks. Do you happen to know if there is a way to patch the font in FontForge instead, so that I can use it with xelatex too? Feb 3 '18 at 17:47
• I'm rather certain that you can adapt such open type features in fontforge. Feb 3 '18 at 23:14