Я пытаюсь набрать свой документ в 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\font
before и 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
.