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