Ubuntu 上の Re:VIEW (upLatex使用)でフォント埋め込みの PDF を作成する

「Re:VIEW を apache で動かす」
https://qiita.com/nanbuwks/items/dd15819ec7798a9eca7b
「AWS上にRe:VIEW環境を構築する」
https://qiita.com/nanbuwks/items/da9136f1b6f789aaffcf

でPDFを作りましたが、このPDF、フォントが埋め込まれていません。

印刷所からダメ出しされました。

```

# pdffonts book.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
GothicBBB-Medium-Identity-H          CID Type 0        Identity-H       no  no  no       9  0
TQIECX+NimbusSanL-Bold               Type 1C           WinAnsi          yes yes no      10  0
GothicBBB-Medium,Bold-Identity-H     CID Type 0        Identity-H       no  no  no      15  0
Ryumin-Light-Identity-H              CID Type 0        Identity-H       no  no  no      17  0
[none]                               Type 3            Custom           yes no  no      18  0
[none]                               Type 3            Custom           yes no  no      19  0
[none]                               Type 3            Custom           yes no  no      20  0
[none]                               Type 3            Custom           yes no  no     134  0
[none]                               Type 3            Custom           yes no  no     257  0

```

- GothicBBB-Medium-Identity-H 
- GothicBBB-Medium,Bold-Identity-H
- Ryumin-Light-Identity-H   

の emb が no になってますね。

フォントを埋め込む設定を行います。

# 環境

- Ubuntu 16.04 
- Re:VIEW 2.20

(2021/12/21 以下の環境でも確認しました)

- Ubuntu 20.04
- Re:VIEW 5.3


# kanji-config-updmap

```

$ kanji-config-updmap ipaex

```

とするといいらしいですが、これでpdfを作りましたが変わってないみたい。

ipaexフォント自体、入っているかな？

```

$ ls /usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/jfontmaps # Ubuntu16.04
hiragino  hiragino-pron  ipa  ipaex  kozuka  kozuka-pr6  kozuka-pr6n  morisawa  morisawa-pr6n  ms  noEmbed  yu-osx  yu-win

$ ls /usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps # Ubuntu20.04
adobe    canon            founder        ipaex        moga-mobo-ex   ms-win10  sourcehan      yu-win
apple    cjkunifonts      haranoaji      kozuka       morisawa       noEmbed   sourcehan-otc  yu-win10
arphic   cjkunifonts-ttf  hiragino       kozuka-pr6   morisawa-pr6n  noto      ume
baekmuk  dynacomware      hiragino-pron  kozuka-pr6n  ms             noto-otc  unfonts
bizud    fandol           ipa            moga-mobo    ms-osx         solaris   yu-osx

```

ちゃんとありますね。


「日本語フォントの使用に関して」
http://www.fugenji.org/~thomas/texlive-guide/font.html
によると、

> 実は、現行の TeX Live には updmap-sys のラッパーである perl スクリプト kanji-config-updmap(-sys)（当初は updmap-setup-kanji(-sys) という名称でした）が収録されています。これを使用すると、オプション等でミスをすることなしに、システムのデフォルトフォントセットを設定することができます。
>
> kanji-config-updmap(-sys) は、システムに収録されている "otf-" から始まる名前のフォントマップを読み込み、これをシステムのデフォルトセットとして登録することができます。

ということで、kanji-config-updmap は TeX Live のツールだそうで。
そういえば今使っている環境は「upLaTeX」だった。それが原因かな？

# kpsewhich で調査

「使用書体の変更（upLaTeX 編）」
https://review-knowledge-ja.readthedocs.io/ja/latest/latex/uptex-fonts.html
によると、

> kpsewhich フォントファイル名（たとえば kpsewhich HiraMinPro-W3.otf）で返ってこなかったら、そのフォントは TeX からまだ使えません。kpsewhich -show-path="opentype fonts" で表示されるパスのいずれかにフォントを移動・あるいはリンクした後、mktexlsr コマンドでファイルデータベースを更新します。

ということで、まずはフォントファイルが使えるかどうか調べてみます。

```

$ kpsewhich ipa
```
うーむ、何も出ない。
保管場所を調べてみます。

```

# kpsewhich -show-path="opentype fonts" | tr : '\n'
.
/home/ubuntu/.texmf-config/fonts/opentype//
/home/ubuntu/.texmf-var/fonts/opentype//
/home/ubuntu/texmf/fonts/opentype//
/etc/texmf/fonts/opentype//
!!/var/lib/texmf/fonts/opentype//
!!/usr/local/share/texmf/fonts/opentype//
!!/usr/share/texmf/fonts/opentype//
!!/usr/share/texlive/texmf-dist/fonts/opentype//
/home/ubuntu/.texmf-config/fonts/truetype//
/home/ubuntu/.texmf-var/fonts/truetype//
/home/ubuntu/texmf/fonts/truetype//
/etc/texmf/fonts/truetype//
!!/var/lib/texmf/fonts/truetype//
!!/usr/local/share/texmf/fonts/truetype//
!!/usr/share/texmf/fonts/truetype//
!!/usr/share/texlive/texmf-dist/fonts/truetype//
/usr/share/fonts//
```

これの表記ですが、
「LaTeX::設定基本事項」
http://www.yamamo10.jp/yamamoto/comp/latex/settings/basic/index.php
によると、
> パスの最後が「//」で終わっているものは，再帰的にサブディレクトリーも検索対象になります．一方，先頭が「!!」の場合，ディスクは捜さないで ls-R のデータベースのみを捜します．

だそうです。

この中の、

/usr/share/texlive/texmf-dist/fonts から調べてみると、

 truetype/public/ipaex/ 

中に

ipaexg.ttf  ipaexm.ttf  ipag.ttf  ipam.ttf

が入ってました。

ということで以下のようにして調べてみると、

```

$ kpsewhich ipaexg.ttf
/usr/share/texlive/texmf-dist/fonts/truetype/public/ipaex/ipaexg.ttf
```
ということで、ttfフォントファイルは認識しているみたいです。
さて、先にうまくいかなかった kanji-config-updmap は、otf-ではじまるファイルをサーチしているようなので、以下のようにして調べてみました。

```

$ find /usr -name otf-ipa*  # Ubuntu16.04 の場合
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/jfontmaps/ipaex/otf-ipaex.map
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/jfontmaps/ipa/otf-ipa.map


$ find /usr -name otf-ipa*  # Ubuntu20.04 の場合
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/ipaex/otf-ipaex.map
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/ipa/otf-ipa.map


```

mapファイルが出てきました。この mapファイルは upLaTeX に認識されているのかな？

```

$ kpsewhich otf-ipaex.map  # Ubuntu 16.04 の場合
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/jfontmaps/ipaex/otf-ipaex.map

$ kpsewhich otf-ipaex.map  # Ubuntu 20.04 の場合
/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/ipaex/otf-ipaex.map

```
認識しているようです。

# 解決法

ここまで調べた内容を元に、解決してみます。いろいろ方法はありますが、今回は RE:VIEW のプロジェクトフォルダにある sty ファイル内で指定するようにしました。


## Ubuntu16.04 + Re:VIEW 2.20 の場合

先のサイト
https://review-knowledge-ja.readthedocs.io/ja/latest/latex/uptex-fonts.html
の「プリセットを使う」を参考に、Re:VIEW プロジェクトディレクトリの中で review-custom.sty ファイルを編集します。

```

$ vim sty/review-custom.sty
```
として、内容を以下のようにしました。

```

\usepackage[ipa-hg]{pxchfon}
```
この後、rm book.pdf して rake pdf すると以下のようにフォントが埋め込まれたファイルが作成できました。

```

# pdffonts book.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
AICVAK+IPAGothic                     CID TrueType      Identity-H       yes yes no       9  0
FJSRDQ+NimbusSanL-Bold               Type 1C           WinAnsi          yes yes no      10  0
DSBQIA+IPAMincho                     CID TrueType      Identity-H       yes yes no      15  0
[none]                               Type 3            Custom           yes no  no      16  0
[none]                               Type 3            Custom           yes no  no      17  0
[none]                               Type 3            Custom           yes no  no      18  0
[none]                               Type 3            Custom           yes no  no     132  0
[none]                               Type 3            Custom           yes no  no     255  0
```

もしかしたら、HGフォントが無い環境ではエラーが起こるかも知れません。その場合は以下のようにするのが良いかも。

# Ubuntu20.04 + Re:VIEW 5.3  の場合
上のようにしても、エラーが出る。

```

⨯ ERROR   failed to run command: dvipdfmx -d 5 -z 9 __REVIEW_BOOK__.dvi

Error log:
__REVIEW_BOOK__.dvi -> __REVIEW_BOOK__.pdf
[1
dvipdfmx:warning: Could not locate a virtual/physical font for TFM "uphgothr-h".
dvipdfmx:warning: >> This font is mapped to a physical font "hgrgm.ttc".
dvipdfmx:warning: >> Please check if kpathsea library can find this font: hgrgm.ttc
dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output...

No output PDF file written.
rake aborted!
Command failed with status (1): [review-pdfmaker config.yml...]
/var/www/html/C99Robot/book/Rakefile:60:in `block in <top (required)>'
/usr/share/rubygems-integration/all/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => pdf => book.pdf
(See full trace by running task with --trace)

```

なんだこれ。どうやら ipa-hg というのは IPAフォント+HGフォント のことで、HGフォントが無いというのが問題みたいです。

ipa-hg とすることで、太字および丸ゴシック体を HGフォントを使って実現できるそうです。
今回は Ubuntu 上の texlive-lang-japanese パッケージを使って環境設定を行っていてそれに IPAフォントは収録されていますが、HGフォントは収録されていません。ライセンスの問題でインストールするのも難しそうです。
なので今回はHGフォントを使わないようにしてみました。



```

$ vim sty/review-custom.sty
```
として、内容を以下のようにしました。

```

\usepackage[ipa]{pxchfon}
```

```

$ pdffonts book.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
JUTLWN+IPAGothic                     CID TrueType      Identity-H       yes yes no       5  0
VCBSGH+NimbusSanL-Bold               Type 1C           WinAnsi          yes yes yes      6  0
MWNZPE+IPAMincho                     CID TrueType      Identity-H       yes yes no      12  0
VXGLSO+LMRoman10-Regular             Type 1C           Custom           yes yes yes     13  0
WKBMIX+LMRoman10-Regular             Type 1C           Custom           yes yes yes     14  0
STTLEP+LMRoman10-Bold                Type 1C           Custom           yes yes yes     15  0
BROQSD+LMMono10-Regular              Type 1C           Custom           yes yes yes    182  0
WNFXFN+LMMono9-Regular               Type 1C           Custom           yes yes yes    183  0

```
埋め込まれているようです。

# kanji-config-updmap の使い方

今回は、styファイルを使って設定しましたが、kanji-config-updmap  を使うやりかたについて、以下に解説がありました。これのよると、kanji-ocnfig-updmap-user  と kanji-config-updmap-sys があり、kanji-config-updmap-sys を使うべきだそうです。

https://ctan.math.washington.edu/tex-archive/fonts/ptex-fontmaps/kanji-config-updmap.pdf