GitHubのPDFプレビューで(u)platex+dvipdfmxでコンパイルしたPDFの日本語が表示されない→unicodeのフォントを使う

# 【追記】解決しました
この記事の投稿後、GitHubのサポートに問い合わせたところ対応していただきました。
2022年7月19日現在この問題は解決され、日本語の一部フォントも表示されるようになっています。

下記の記事は、もしまたGitHubが日本語表示できなくなったときのために保存しておきます。

# TL;DR
unicodeのフォントを使う。フォントをtexから見れる場所において
```tex
\documentclass[uplatex]{jsarticle}
\usepackage[noto-jp]{pxchfon}
```

# GitHubのPDF表示で日本語が表示されない
されません。:sob:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380303/73649e6b-9448-2935-e18d-5b7b207dca88.png)


まずは、コンソールからエラーを見る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380303/9406eee8-9706-5551-4e51-75b8baaa568f.png)


pdf.jsでよくあるエラーのよう。Adobe-Japan1のグリフ集合使うフォントに関して、マッピングを行うファイルが設定されていないときに起きる。
[PDF.jsでnullAdobe-Japan1-UCS2/ null90ms-RKSJ-Hのエラーが発生する[解決方法] - プチモンテ](https://www.petitmonte.com/javascript/pdfjs_nulladobe_japan1_ucs2.html)

GitHubさん、対応お願いします。[^pdfjs]

# じゃあどうする？
泣いていても仕方ないので、できることをする。
wordやlualatex等でpdfを作成した人はこのpdfが表示されない問題に(おそらく)ハマっていないと思う。私はplatex+dvipdfmxで表示されない問題に遭遇した。

まず悲報だが、platexでこれに対応するのは(多分)無理。理由はplatexがunicodeに対応していないため。unicodeに対応したplatexの拡張がuplatexなため、uplatexならなんとかなる。

以下にフォントの設定方法を載せる。

[upLaTeX文書で源ノ明朝／Noto Serif CJKを簡単に使う方法（最新のdvipdfmxとpxchfonを使用）- Qiita](https://qiita.com/zr_tex8r/items/9dfeafecca2d091abd02)
上記の記事を ~~パクった~~ 参考にした。より詳しく、もっと色々なフォントを扱いたい人はそちらを読んでほしい。

上記の記事にあるように、以下は **TeX Live 2018以降で、upLaTeX＋dvipdfmx** が前提となる。

## uplatexでフォント設定
(u)platexの漢字のデフォルトフォントは原ノ味フォント[^fontcheck]で、これを指定するとunicodeにならない[^haranoaji_unicode]ため、ここを何とかする必要がある。

まずフォントのインストールから。NotoSans/SerifJP[^whyNotoSans]を使おう。リンク先、右上の「Download family」を押してダウンロードする。[NotoSansJP](https://fonts.google.com/noto/specimen/Noto+Sans+JP) [NotoSerifJP](https://fonts.google.com/noto/specimen/Noto+Serif+JP)

zipを展開したら全てのデータをフォルダ
```
$(kpsewhich -var-value=TEXMFLOCAL)/fonts/opentype/google/noto-jp
```
に置く。例えばこんな感じ
```bash
mkdir -p $(kpsewhich -var-value=TEXMFLOCAL)/fonts/opentype/google/noto-jp
mv NotoSans* $(kpsewhich -var-value=TEXMFLOCAL)/fonts/opentype/google/noto-jp
mv NotoSerif* $(kpsewhich -var-value=TEXMFLOCAL)/fonts/opentype/google/noto-jp
```
これができたらpathのアップデート。
```bash
sudo mktexlsr
```
これでtexがフォントを認識してくれるはず。確認のコマンド
```sh
kpsewhich NotoSansJP-Medium.otf
kpsewhich NotoSerifJP-Medium.otf
```
何かしらのパスが返ってきたら成功。パスが表示されない場合はどこかうまくいってない。[^tex_path_error]

## あと少し
texのpreambleに以下を追加
```tex
\usepackage[noto-jp]{pxchfon}
```
あとは **uplatex** + dvipdfmx[^useuplatex]でpdf作成で完成。お疲れさまでした。
pdffonts[^pdffonts]で実際にUnicodeになっているか確認しておく。
```sh
> pdffonts paper.pdf
name                                           type              emb sub uni prob object ID
---------------------------------------------- ----------------- --- --- --- ---- ---------
YQESZK+NotoSansJP-Medium-Identity-H            CID Type 0C       yes yes yes           4  0
KBDWKX+CMBX12                                  Type 1C           yes yes yes           6  0
WENJYO+NotoSerifJP-Regular-Identity-H          CID Type 0C       yes yes yes           7  0
CQRHTT+CMR12                                   Type 1C           yes yes yes           9  0
OENMMA+CMSS12                                  Type 1C           yes yes yes          10  0
CDOPTV+CMR10                                   Type 1C           yes yes yes          11  0
QLYEDB+CMMI10                                  Type 1C           yes yes yes          12  0
JNPXGZ+CMMI7                                   Type 1C           yes yes yes          13  0
FDDGUS+CMSY10                                  Type 1C           yes yes yes          14  0
JYFWDF+CMMIB10                                 Type 1C           yes yes yes          15  0
IZSNPK+CMSY7                                   Type 1C           yes yes yes          16  0
OSSUPZ+CMMI5                                   Type 1C           yes yes yes          17  0
FORUBY+CMR7                                    Type 1C           yes yes yes          18  0
UCJFOG+CMEX10                                  Type 1C           yes yes yes          19  0
QXNNBF+CMBX10                                  Type 1C           yes yes yes          20  0
HAKSWU+SFRM1000                                Type 1C           yes yes yes          21  0
```

確かにuniの欄がyesになっている。

# GitHubから確認
pushしたものを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380303/b651ba1b-f457-d3bb-19d1-4fd2cf0970f9.png)

確かに日本語になっている。
表示される例、表示されない例を[GitHub](https://github.com/shunshunNi/sample_unicode_uplatex)に置いておいた。参考になれば幸い。
https://github.com/shunshunNi/sample_unicode_uplatex

[^pdfjs]: こないだまで見れていた。おそらくアップデートかなにかのタイミングで消してしまった？どうやらたまに発生するバグのようで、2021年にもバグの報告が上がっている。[Hiragino Japanese fonts can not view pdf files - GitHub Community Forum](https://github.community/t/hiragino-japanese-fonts-can-not-view-pdf-files/190828)
[^fontcheck]:`kanji-config-updmap-sys status`をターミナルで叩くと確認できる
[^whyNotoSans]: 原ノ味は源ノフォントをもとに作られていて、源ノフォントはNotoSansとほぼ一緒らしい。[原ノ味フォント - TeX Wiki](https://texwiki.texjp.org/?%E5%8E%9F%E3%83%8E%E5%91%B3%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88) / [源ノフォント - TeX Wiki](https://texwiki.texjp.org/?%E6%BA%90%E3%83%8E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88)
[^haranoaji_unicode]: 嘘。例えばlualatexで何も考えずに実行した場合フォントは原ノ味になるが、この場合は原ノ味がunicode対応しているためGitHub上で問題なく表示される。platexは無理だが、uplatexならフォントマップをいじればおそらく対応できると考えられる。
[^tex_path_error]: TEXMFLOCALがない。mkdirのpオプションの忘れ。フォントファイルの移動の失敗。mktexlsrの実行の際のsudo忘れ。などが考えられるか。
[^pdffonts]:xpdfに付随するコマンド。macなら`brew install xpdf`とすると実行できるようになる
[^useuplatex]: documentclassをuplatexに対応させるのを忘れずに