Создание PDF-файлов с математическими шрифтами OpenType и без внедрения шрифтов

Создание PDF-файлов с математическими шрифтами OpenType и без внедрения шрифтов

Я новичок в TeX, работаю над приложением для iPhone/iPad, которое отображает страницы из коллекции PDF-документов. Каждый PDF-документ в коллекции содержит одно или несколько математических выражений. Каждый PDF-файл довольно мал, но в общей коллекции тысячи файлов.

При использовании конфигурации LaTeX по умолчанию каждый файл содержит около 3–8 подмножеств шрифтов Postscript Type 1 (Latin Modern, Computer Modern и т. д.), и шрифты часто повторяются от файла к файлу.

Я пытаюсь провести эксперимент, чтобы посмотреть, сможем ли мы уменьшить общий размер коллекции документов (обратите внимание, что другое очевидное решение — объединение небольших PDF-файлов в более крупные — проблематично по причинам, в которые я не буду здесь вдаваться):

Начиная с iOS 13 приложениям разрешено устанавливать шрифты. Возможно, я смогу уменьшить размер общей коллекции, не встраивая шрифты в отдельные документы PDF. Вместо этого мое приложение установит необходимые шрифты, и, надеюсь, фреймворк отображения PDF iOS (PDFKit) подберет все шрифты, необходимые для отображения документов PDF из своей среды. (В спецификации PDF предполагается, что просмотрщики по умолчанию будут искать шрифты в среде отображения, если они не могут быть найдены в документе.)

Одним из ограничений является то, что новая структура управления шрифтами iOS работает только с тем, что Apple называет «современными» шрифтами: TrueType и OpenType. Несколько шрифтов, которые TeX использует по умолчанию (Computer Modern, Latin Modern и т. д.), не могут быть установлены, поскольку они являются шрифтами Postscript Type 1, которые Apple, по-видимому, считает не «современной» технологией 1980-х годов.

Для этого эксперимента я создал простой тестовый файл, который использует unicode-math и шрифты OpenType (что потребовало переключения с использования LaTeX на LuaLaTeX). Я не уверен, что было необходимо использовать unicode-math, но это был простой способ добавить несколько пакетов шрифтов OpenType:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{texgyrepagella-regular.otf}
\usepackage{unicode-math}
\usepackage{mathtools}
\setmathfont{texgyrepagella-math.otf}

\begin{document}
Here comes a math expression:
\[x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\]
\end{document}

Я столкнулся с некоторыми трудностями и мне нужна помощь по следующим вопросам:

Вопрос 1:Когда я создаю PDF-файл с использованием указанного выше источника, а затем просматриваю его в диалоговом окне «Свойства/Шрифты» в Acrobat Reader, я вижу перечисленные шрифты TeXGyrePagella, но они описаны как «Тип 1 (CID)». Я ожидал, что в описании будет что-то вроде «OpenType». Я предполагаю, что «Тип 1 (CID)» — это более конкретное описание одного из видов шрифта OpenType. Может ли кто-нибудь подтвердить мое предположение? (См. скриншот в конце этого вопроса.)

Вопрос 2:Как мне сгенерировать PDF-файл, в котором шрифты вообще не встроены? Я вижу много советов на tex.stackexchange о том, как генерировать PDF-файлы, в которых встроен весь шрифт без подмножеств, но я хочу сделать наоборот: я не хочу, чтобы были встроены какие-либо шрифты.

Вопрос 2б:Экспериментируя с LaTeX, мне удалось исключить некоторые встроенные шрифты с помощью команд \pdfcompresslevel=0и \pdfobjcompresslevel=0. Что эквивалентно этим командам в среде LuaLaTeX?

Скриншот диалогового окна «Свойства/Шрифты» Adobe Reader:

решение1

Пожалуйста, постарайтесь в будущем ограничить вопросы одним вопросом, но они тесно связаны, поэтому я все равно отвечу.

Почему используется Type 1 (CID) вместо OpenType? Можно напрямую импортировать шрифты OpenType в файлы PDF, но это не делается ни в одном известном мне движке TeX. Вместо этого, особенно для шрифтов OpenType на основе Type 1 (обычно файлы шрифтов, заканчивающиеся на вместо .otf) .ttf, только фактические данные глифов (в формате CFF (CFF — это сжатая версия Type 1)) извлекаются из файла OpenType и включаются в файл PDF напрямую, без упаковки в структуру OpenType. Это лишь небольшая часть информации, доступной в шрифтах OpenType, особенно теряется информация о лигатурах/кернинге. (Это в основном делается для совместимости и потому, что эта информация не нужна: все, что касается макета шрифта/лигатуры/кернинга, уже обрабатывается самим TeX, поэтому нет смысла добавлять эту информацию.)

Можно ли отключить встраивание шрифтов? Да, но не стоит. Преобразование из OpenType в чистый шрифт CFF и некоторые другие внутренние изменения, которые LuaTeX вносит в шрифт, приводят к ситуации, когда все работает нормально, если шрифт встроен, но отдельный шрифт, скорее всего, не будет работать, либо потому, что у него другой формат, поэтому он не найден, либо потому, что некоторые значения изменились, и поэтому шрифт отображается неправильно. Кроме того, файлы PDF обращаются к внешним шрифтам OpenType не так, как к внутренним шрифтам, и спецификация оставляет некоторые аспекты реализации определенными, поэтому у TeX по сути нет возможности надежно выбирать правильный глиф из внешних шрифтов OpenType, даже если он настроит все на использование шрифтов OpenType напрямую. Если вы все еще хотите попробовать, см.Заставить lualatex **не встраивать** шрифты

Эквивалент LuaTeX

\pdfcompresslevel=0
\pdfobjcompresslevel=0

является

\pdfvariable compresslevel=0
\pdfvariable objcompresslevel=0

но часто лучше сделать то же самое, используя , l3pdfкоторый работает почти на всех движках:

\usepackage{l3pdf}
\ExplSyntaxOn
\pdf_uncompress:
\ExplSyntaxOff

Но отключение сжатия не устранит встроенные шрифты, поэтому я не уверен, что именно вы пытаетесь там заархивировать.

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