Typstで絵文字を書いたらType3のフォントが埋め込まれた件
どうにかする方法を書きました
技術書典18向けに技術同人誌を書いているのですが、その中で絵文字を使っていました。それで、印刷所に入稿したら「埋め込まれてないフォントがあるよ~」(意訳:Type3フォントがあるよ~)というご連絡を頂いたんですね。このまま印刷すると文字化けするかもしれないと。
そっかぁ、と思って対応することにしました
特にTypst固有の問題ではなくてLaTeXでもRe:VIEWでもVivliostyleでも、組版ソフト共通で起こる問題と認識しています
Type3フォントとは¶
フォントって様々な形式があって、けっこう複雑なんですが(私もちゃんと把握できていない)Type3フォントは紆余曲折あって、今はあまり使われない形式らしいです
印刷会社さんや、学会ではType3フォントを避けるように言われる場合があるみたい
Type3フォントが埋め込まれたPDFがどうなるかというと、印刷時に文字化けするリスクがあります
Typstの動作¶
特にTypstのドキュメントには絵文字フォントを指定していなかったんですが、その場合はTypstがシステムフォントからフォントを探し出して埋め込んでくれます
今回の事象は、 Segoe UI EmojiというType3フォントが知らずに埋め込まれていた…という状況でした
調査方法¶
PDFの埋め込みフォントを確認する¶
Acrobat Readerでも、その他のPDFビューアーからでも、フォントの状態を確認できます
「ドキュメントのプロパティ」という感じの項目を探してみてください
"embedded"とう文言は「フォント埋め込まれてるよ!」という意味なので、そこはOKなのですが、種類の所が…
あぁ~これですわ
TwitterColorEmojiは使ってないので単純にフォントをアンインストールしました
ただSegoe UI Emojiは、Windows標準のシステムフォントなのでおいそれとアンインストールできません
さて、困りましたね。。
どの文字がどのフォントを利用しているか調べる¶
ちなみに、もっと厳密に PDF中のどの文字がどのフォントを使っているか調べる方法をChatAIさんに聞いた所
- Inkspaceという画像編集的なソフトをインストールする
- InkspaceでPDFを開く
- SVG形式でエクスポート
- SVG形式のファイルは中身がテキストファイルなので、文字とフォントの関係が確認できる
ということで試してみたら、grepとかでいい感じで確認はできそうでした
以下みたいに実行すると、どのへんのどの文字で使われているか調べられます
$ grep -C5 -n "font-family:'Segoe UI Emoji'" Target.svg
ちなみに以下みたいに書くと、どのフォントがどのくらい使われているか把握できます
$ grep -o 'font-family.*;' Target.svg |awk -F';' '{print $1}'|sort |uniq -c
対応方法¶
いくつか対応方法があります
絵文字フォントを指定する¶
Typstのドキュメント側で明示的にフォントを指定すれば、Segoe UI Emojiの混入が防げます
代替のフォントとして、Segoe UI Symbolというのが使えますが、ちょっと見た目が好きじゃなかったのでNoto Emojiをインストールして代替することにしました
set text(
// 記載の順にフォントを検索します
font: ("Meiryo UI", "Yu Gothic", "Arial","Noto Emoji","Segoe UI Symbol"), // フォント設定
/* フォント候補
"Arial","New Computer Modern","Tahoma",
"Times New Roman","Verdana",
"Meiryo","Meiryo UI",
"Yu Gothic","Yu Gothic UI","Yu Mincho",
*/
size: 9pt, // フォントサイズ
lang: "jp", // 言語
)
ただ筆者の場合は、なぜかこれでも勝手に埋め込まれちゃったので別の手段を取ることにしました
フォントの参照先を指定する¶
TypstでCLIでコンパイルする際に、以下のオプションが使えます
オプション | 意味 |
---|---|
--ignore-system-fonts | フォントの参照先からシステムフォント(C:\Windows\Fonts)を除外する |
--font-path "C:\example\font" | フォントの参照先を追加する |
これを利用して、コンパイルに必要なフォントだけを格納したフォルダを用意(一時的にC:\Windows\Fontsから必要なフォントをコピー)して、それを指定することで余計なフォントを参照させないようにできますね
$ typst c Target.typ --ignore-system-fonts --font-path "C:\example\font"
アウトライン化¶
最後の手段なんですが、アウトライン化(≒画像のような形式)にしてしまえば、フォントの問題は解消されます
Windows の印刷機能(Microsoft Print to PDF)でPDFを再印刷することで実現できます
後述の書籍↓にも書いています
Typstで技術同人誌を書く¶
そんなフォント周りの話も含めた本を頒布中です
そしてもう少しお待ち頂くと、新刊がでます
よろしくお願いします。
コメント