
私は TeX 初心者で、PDF ドキュメントのコレクションからページを表示する iPhone/iPad アプリを開発しています。コレクション内のすべての PDF ドキュメントには、1 つ以上の数式が含まれています。各 PDF ファイルはかなり小さいですが、コレクション全体には何千ものファイルがあります。
デフォルトの LaTeX 設定を使用すると、各ファイルには 3 ~ 8 個のサブセット化された Postscript Type 1 フォント (Latin Modern、Computer Modern など) が含まれることになり、ファイル間でフォントが頻繁に繰り返されることになります。
ドキュメント コレクションの全体的なサイズを縮小できるかどうかを確認する実験を試みています (別の明白な解決策として、小さな PDF ファイルを大きな PDF ファイルにマージする方法がありますが、ここでは説明しない理由で問題があります)。
iOS 13 以降、アプリはフォントをインストールできます。個々の PDF ドキュメントにフォントを埋め込まないことで、全体のコレクションのサイズを小さくできるかもしれません。代わりに、アプリは必要なフォントをインストールし、iOS の PDF 表示フレームワーク (PDFKit) が PDF ドキュメントを表示するために必要なすべてのフォントをその環境から取得してくれることを期待します。(PDF 仕様では、ドキュメント内でフォントが見つからない場合、ビューアはデフォルトで表示環境でフォントを検索するようになっています。)
1 つの制限は、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 フォントが一覧表示されますが、それらは「Type 1 (CID)」と説明されています。説明には「OpenType」のようなものが書かれていると思っていました。「Type 1 (CID)」は、OpenType フォントの 1 つの種類をより具体的に説明しているものだと思います。誰か私の推測を裏付けてくれませんか? (この質問の最後にあるスクリーンショットを参照してください。)
質問2:フォントがまったく埋め込まれていない PDF ファイルを生成するにはどうすればよいでしょうか。tex.stackexchange には、サブセット化せずにフォント全体が埋め込まれた PDF ファイルを生成する方法に関するアドバイスが多数ありますが、私はその逆を行いたいと考えています。つまり、フォントを一切埋め込みたくないのです。
質問2b:\pdfcompresslevel=0
LaTeX を試してみたところ、 コマンドとコマンドを使用して埋め込まれたフォントの一部を削除することができました\pdfobjcompresslevel=0
。LuaLaTeX 環境でこれらのコマンドに相当するものは何ですか?
答え1
今後は質問を 1 つに制限するようにしてください。ただし、質問は密接に関連しているため、いずれにせよ回答します。
なぜ OpenType ではなく Type 1 (CID) が使用されるのでしょうか。OpenType フォントを PDF ファイルに直接インポートすることは可能ですが、私が知るどの TeX エンジンでもそれは行われていません。その代わりに、特に Type 1 ベースの OpenType フォント (通常は では.otf
なくで終わるフォント ファイル.ttf
) の場合、実際のグリフ データ (CFF 形式 (CFF は Type 1 の圧縮バージョン)) のみが OpenType ファイルから抽出され、OpenType 構造にラップされることなく PDF ファイルに直接含められます。これは 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
ただし、圧縮を無効にしても埋め込まれたフォントは削除されないため、何をアーカイブしようとしているのかわかりません。