Загрузите дополнительные шрифты с помощью lualatex

Загрузите дополнительные шрифты с помощью lualatex

Я готовлю документ, который облегчает пакет 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}в своих документах. Это позволяет избежать зависимости от одной конкретной версии шрифта во всех ваших документах.

Связанный контент