Возникли проблемы с включением лигатур в шрифте Mercury Text OpenType от HF&J

Возникли проблемы с включением лигатур в шрифте Mercury Text OpenType от HF&J

Я уверенэтот шрифтподдерживает лигатуры, но я не могу заставить их отображаться.

Пример с Roboto для сравнения:

\documentclass[
  11pt,
  a4paper
]{scrartcl}

\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}

\begin{document}

\setmainfont[
  ExternalLocation,
  Extension=.ttf,
  UprightFont=*-Regular,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  Ligatures=Common
]{Roboto}

roboto fight flight has ligatures

\setmainfont[
  ExternalLocation,
  Extension=.otf,
  Ligatures=Common
]{Mercury-TextG4Roman}

mercury fight flight no ligatures

\end{document}

мве

Список лигатур на сайте HF&J включает fi:

список лигатур

А Charmap в Windows отображает этот символ в этом шрифте:

карта персонажей

Обновлять:

Вывод otfinfo:

otfinfo

Обновление 2:

Изменено на LuaLatex, добавлен файл функций:

\documentclass[
  11pt,
  a4paper
]{scrartcl}

\usepackage{filecontents}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures={Common,Rare,Historic}}

\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
    sub \f \i by \fi;
    sub \f \l by \fl;
} liga;
\end{filecontents*}

\begin{document}

\setmainfont[
  ExternalLocation,
  Extension=.ttf,
  UprightFont=*-Regular,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  Ligatures=Common
]{Roboto}

roboto fight flight has ligatures

\setmainfont[
  FeatureFile=mercury.fea,
  ExternalLocation,
  Extension=.otf,
  Ligatures=Common
]{Mercury-TextG4Roman}

mercury fight flight no ligatures

\end{document}

А лигатуры показывают:

введите описание изображения здесь

решение1

С любезной помощью @cfr вы установили, что:

  • Шрифт содержит лигатурные глифы.

  • fontspecневозможно использовать информацию о лигатуре ААТ, даже если она доступна.

  • В шрифте отсутствуют данные функций OpenType, необходимые для автоматической поддержки лигатур.

Так что же можно сделать? Вы можете либо добавить недостающие данные сопоставления к шрифту, либо создать внешний файл функций OpenType (поддерживается только LuaTeX) и указать fontspec использовать его. Ни то, ни другое не сложно.

Добавление таблиц Opentype ligaс помощью FontForge

Примечание:Сначала ознакомьтесь с условиями лицензирования вашего шрифта и т. д.

  1. Откройте файл шрифта в Fontforge.
  2. Откройте Element->Font Infoдиалоговое окно из меню: Диалоговое окно информации о шрифте Перечисленные записи соответствуют различным «функциям» OpenType. Та, которая вам нужна, в списке называется «Стандартные лигатуры», а liga в спецификации и выводе она называется функцией. otfinfoВы уже знаете, что она отсутствует в вашем шрифте, поэтому сначала нам нужно создать таблицу, а затем заполнить ее недостающими данными.
  3. Нажмите кнопку «Добавить поиск» и выберите тип «стандартные лигатуры».
  4. Нажмите кнопку «Добавить подтаблицу», чтобы создать фактическую таблицу сопоставления. Дважды щелкните по новой записи подтаблицы, чтобы открыть ее редактор.
  5. Теперь вы должны увидеть диалоговое окно редактирования, в котором вы можете настроить сопоставления между последовательностями символов и лигатурными глифами: Редактор субтаблицы лигатур Используйте кнопку «заполнить», чтобы FontForge вывел лигатуры, поддерживаемые шрифтом, и автоматически создал записи для вас. В зависимости от шрифта вам может потребоваться редактировать/добавлять записи вручную. Левый столбец содержит имя глифа для лигатуры, а правый столбец содержит отдельные символы, разделенные пробелами.
  6. Закончив, нажмите Okдважды, чтобы вернуться в главное окно.
  7. Сохраните обновленный файл шрифта с помощью File->Generate Fonts, убедившись, что тип dropbox установлен на OpenType(CFF). Помните, что сгенерированный шрифт имеет то же внутреннее имя шрифта, что и оригинал (хотя его легко изменить), поэтому вам нужно либо перезаписать оригинал (не забудьте сделать резервную копию), чтобы избежать загрузки старой версии, либо вам следует явно указать путь к файлу шрифта при его загрузке с помощью fontspec.
  8. Готово.

Добавление таблиц OpenType ligaс использованием файла функций OpenType (только LuaTeX)

В fontspecруководстве естьразделна файлах функций (со ссылкой наСпецификация) и он включает пример, который показывает именно то, что вам нужно, например, как определить сопоставления лигатур. Поэтому вам нужно только создать файл функций, а затем использовать опцию, FeatureFileчтобы указать, что нужно fontspecзагрузить его:

Файл:another_league.tex

\documentclass{article}
\usepackage{filecontents}
\usepackage{fontspec}

% Alternatively, place this in a `mercury.fea` file in the same directory
\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
    sub \f \i by \fi;
    sub \f \l by \fl;
} liga;
\end{filecontents*}
    
\setmainfont[
FeatureFile=mercury.fea,
%Ligatures={Common} % on by default
]{Mercury-TextG4Roman}

\begin{document}
    fi \symbol{"FB01} 
    
    fl \symbol{"FB02} 
\end{document}

В этом примере предполагается, что лигатурные глифы существуют в стандартном месте расположения Unicode, и они включаются непосредственно по номеру глифа для целей сравнения. YMMV.

Редактировать:Будьте осторожны, это fontspecне останавливается ошибкой, если есть проблемы с FeatureFileопцией. Неправильный ввод пути, синтаксические ошибки в файле или использование движка, отличного от , LuaTeXтихо заставят его игнорировать файл функций.

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