Как вручную задать настройки кодировки шрифта?

Как вручную задать настройки кодировки шрифта?

У меня есть шрифт с таблицей шрифтов, содержащей лигатуры, а также математические радикалы, операторы и, например, знак интеграла. (Это другой шрифт, нежели тот, который я демонстрирую в этом вопросе, который не содержит знака интеграла.)

В моем случае некоторые комбинации символов не запускают замену глифов, например, для лигатур "ffi". Это происходит как для pdflatex(think otftotfm), так и для xelatex( fontspec) решений для реализации шрифта.

Скомпилированный результат, содержащий коммерческий шрифт, который я собираюсь использовать, показывает (для обоих fontspecрешений, а также otftotfm)

http://i.imgur.com/I4XfJbM.png?1

XeLaTeX ( fontspec)

После запуска решения, описанного вЛигатуры для fi, fl, ffl не работают для Times New Roman (XeLaTeX), попытка вызвать лигатуры все еще не работает. Egreg упоминается вчатчто решение в целом дает правильный вывод для XeTeXдокументов, при условии, что глифы находятся в правильном положении для таблицы шрифтов. Оказывается, они находятся в таблице шрифтов (скриншот взят из Adobe Illustrator)

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

Это говорит о том, что они не в правильном положении. Поэтому было бы желательно иметь возможность вручную устанавливать связь между вводом, например, "ffi" и связыванием его с правильной лигатурой в шрифте.

PDFLaTeX ( otftotfm)

Чтобы убедиться, я использовал otftotfmследующую команду:

otftotfm -a -e ec  -fkern -fliga --verbose --vendor <mapfilename> <somefont>.otf T1--<fontname>--<fontweight>

Команда выдает ошибки относительно лигатур:

otftotfm: warning: 'liga' feature ignored, not supported by font

Это также подтверждается после построения .plфайла:

tftopl T1--<fontname>--<fontweight>.tfm > T1--<fontname>--<fontweight>.pl

Лигатуры действительно не было. Из T1--<fontname>--<fontweight>.plфайла взято следующее:

(LABEL C f)
   (KRN O 41 R 0.08)
   (KRN O 47 R 0.1)
   (KRN O 51 R 0.07)
   (KRN O 52 R 0.08)
   (KRN O 54 R -0.05)
   (KRN O 56 R -0.05)
   (KRN O 77 R 0.12)
   (KRN O 135 R 0.07)
   (KRN C a R -0.01)
   (KRN C b R 0.1)
   (KRN C c R -0.01)
   (KRN C e R -0.01)
   (KRN C g R -0.01)
   (KRN C h R 0.1)
   (KRN C i R 0.03)
   (KRN C j R 0.03)
   (KRN C k R 0.1)
   (KRN C l R 0.1)
   (KRN C o R -0.01)
   (KRN C t R 0.01)
   (KRN C v R 0.01)
   (KRN C w R 0.01)
   (KRN C y R 0.01)
   (KRN O 175 R 0.07)
   (KRN O 15 R -0.05)
   (KRN O 22 R -0.05)
   (KRN O 21 R 0.1)
   (KRN O 346 R -0.01)
   (KRN O 370 R -0.01)
   (KRN O 367 R -0.01)
   (KRN O 344 R -0.01)
   (KRN O 345 R -0.01)
   (KRN O 351 R -0.01)
   (KRN O 352 R -0.01)
   (KRN O 364 R -0.01)
   (KRN O 366 R -0.01)
   (STOP)

Единственное, что приходит мне в голову, это возиться с .plфайлом, читаемым человеком (выдержка из которого приведена выше), и создавать все вручную. Но, возможно (надеюсь?!) LaTeX имеет средства для решения таких задач.

Несмотря на это, было бы неплохо назначитьпроизвольный(но определенные) глифы таблицы шрифтов для определенных команд, в очень общем виде. Подумайте, \intчто вызовет интегральный знак из ie (выдуманные числа), восьмеричного 501 или unicode +00a6или комбинации букв, так что "ffi" станет (связано с) -->"лигатура ffi". Я бы даже не возражал против необходимости объявить все 256 слотов для определенной команды или комбинации букв в исходном коде, пока я знаюкаксделать это.

Рассмотрим приведенный ниже пример с другим (некоммерческим) шрифтом, который также содержит лигатуры:http://exljbris.com/tallys.html. Для пользователей Windows среди нас, вы можете скопировать и вставить это в пакетный файл, если хотите. Я намеренно отключил функции -fkernи -fliga, так как это как раз и есть важная часть: мой шрифт неправильно отображает глифы.

otftotfm -a -e ec  --verbose --vendor tallys Tallys_15.otf T1--Tallys15--Regular
pause

Вот также t1tallys.fdфайл:

\ProvidesFile{t1tallys.fd}
   [2015/04/30 scalable font definitions for T1/Tallys.]

\DeclareFontFamily{T1}{Tallys}{}
\DeclareFontShape{T1}{Tallys}{m}{n}{<-> T1--Tallys15--Regular}{}
\DeclareFontShape{T1}{Tallys}{m}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{m}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{m}{sl}{<-> ssub * Tallys/m/n}{}

\DeclareFontShape{T1}{Tallys}{b}{n}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{sl}{<-> ssub * Tallys/m/n}{}

\DeclareFontShape{T1}{Tallys}{l}{n}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{sl}{<-> ssub * Tallys/m/n}{}

\DeclareFontShape{T1}{Tallys}{bx}{n}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{it}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{sc}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{sl}{ssub * Tallys/m/n}{}

\endinput

и MWE ( XeLaTeXв этом случае все равно даст правильный результат с лигатурами... Если вы хотите воспользоваться этим XeLaTeXподходом, просто сопоставьте любой другой символ. Я все еще хотел бы знать, как это сделать в XeLaTeX.)

\documentclass{article}

\usepackage{ifxetex}
\ifxetex
    \usepackage{fontspec}
    \defaultfontfeatures{Ligatures=TeX}
    \setmainfont{Tallys}
    \usepackage{microtype}
\else
    \RequirePackage[T1]{fontenc}
    \pdfmapfile{tallys.map}
    \RequirePackage{microtype}
    \renewcommand\rmdefault{Tallys}
    \renewcommand\sfdefault{Tallys}
\fi

\begin{document}
\fontsize{100pt}{0pt}\selectfont ffi fi fl ffl
\end{document}

Идея в том, чтобы все еще иметь возможность сопоставлять комбинацию символов ffiс лигатурой. Было бы также неплохо каким-то образом устанавливать правильные символы для правильных математических команд (я понимаю, что это сложнее, но, пожалуйста, поймите, я действительно ищу общее решение, которое позволит мне полностью сопоставить шрифт и позволит TeX полностью понять, когда использовать тот или иной символ.) Идеальное решение описывало бы весь процесс, необходимый для этого. Это также позволило бы смешивать разные шрифты (что было бы не слишком сложно по сравнению с решением с одним шрифтом — это просто обобщение ответа).

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