
Я готовлю документ, который облегчает пакет fontspec
для определения основного и sans-шрифта. В этом документе я хотел бы сравнить этот основной шрифт с Computer Modern или, если быть точным, с его преемником Latin Modern.
Я был убежден, что написание
\newfontfamily\lmfont{Latin Modern Roman}
включил бы полное семейство со всеми его 70+ файлами шрифтов. Но это не правильно.
Например, когда я говорю
{\lmfont\scshape{}abcd} {\scshape{}abcd}
Я понимаю это:
С левой стороны — современный латинский шрифт, но без заглавных букв :-(, с правой стороны — шрифт документа по умолчанию («mainfont»), как он должен выглядеть.
Для сравнения я хотел бы представить большую подборку/комбинацию шрифтов этого семейства, т. е. шрифты roman, sans и mono, дополненные такими формами и начертаниями, как -italic, -italic-bold, -slated, -slated-bold, -bold, -smallcaps.
К сожалению, мое решение загружает только шрифты LMRoman10-Regular
и LMSans10-Regular
, но не LMRomanCaps10-Regular
. Вот почему \lmfont\scshape
(или \lmfont\ttfamily
) не сработало.
Итак, есть ли возможность определить, \newfamily
что он содержит все современные латинские шрифты?
Любое решение, которое позволит мне иметь простой макрос для сравнения двух семейств шрифтов бок о бок, было бы приемлемым.
Вот MWE:
\documentclass{scrbook}
\usepackage{fontspec}
\setmainfont{Times New Roman} % and other definitions
\newfontfamily\lmfont{Latin Modern Roman} % this is not complete!!
%% New command to compare.
%% #1 defines the family/shape/series
\newcommand{\compare}[1]{%
{#1%
ABCD \dots{} XYZ, abcd \dots{} xyz\\
\lmfont{}ABCD \dots{} XYZ, abcd \dots{} xyz\par
}
}
\begin{document}
\compare{\upshape}
\compare{\itshape}
\compare{\itshape\bfseries}
\compare{\scshape}
\end{document}
решение1
Нет, это так не работает и не может работать.
Не существует соглашения об именовании шрифтов, и различные шрифты выполняют очень разные функции. У некоторых шрифтов есть функция smcp
, у других ее нет, и нужно указать шрифт, который будет использоваться для малых заглавных букв.
С Latin Modern Roman ситуация совершенно иная: в нем около 70 файлов шрифтов, и fontspec
их анализ для выполнения всех необходимых заданий не входит в наши задачи.
Однако для конкретного случая .fd
файлы доступны, так что вы можете их использовать.
\documentclass{article}
\usepackage{fontspec}
\setmainfont{EB Garamond}
\newfontfamily\lmodern{Latin Modern Roman}[
NFSSFamily=lmr
]
\begin{document}
Abc\textsc{Abc}
\lmodern
Abc\textsc{Abc}
\end{document}
решение2
В качестве дополнения к превосходному ответу egreg: для пользовательского шрифта, который хранит малые заглавные буквы в отдельном файле, например, с именами SomeFont-RegularSC.otf
и SomeFont-BoldSC.otf
, вы должны загрузить их с помощью
\newfontfamily\somefont{SomeFont}[
UprightFont = *-Regular ,
SmallCapsFont = *-RegularSC ,
BoldFont = *-Bold ,
BoldFeatures = { SmallCapsFont = *-BoldSC },
% Etc.
Extension = .otf ]
Вы также можете поместить эту команду в файл с таким именем SomeFont.fontspec
, чтобы вы могли писать \newfontfamily\somefont{SomeFont}
в своих документах. Это позволяет избежать зависимости от одной конкретной версии шрифта во всех ваших документах.