hogecoder

tsutaj 競技プログラミングの記録

SpeakerDeck に Beamer 製の日本語スライドをキレイにアップロードする

スライドをアップロードするとき、SpeakerDeck を使う方が多いのではないかと思います。

私は pLaTeX + Beamer + dvipdfmx でスライドを作るときがあるのですが、これをキレイにアップロードしようとすると色々とハマりました。私が行った対処法を記事として残しておきます。

日本語フォントを埋め込む

日本語フォントを埋め込まない状態でアップロードすると漢字の見た目が変になってしまうので、これをなんとかします。

TeX Live に収録されている ptex-fontmaps パッケージには kanji-config-updmap コマンドが付属していて、これで日本語フォントの埋め込み設定を変更できます。

マニュアルはこちら

私が最初にこのコマンドを叩いたときは以下のようになり、埋め込みをしない設定になっていることがわかりました。

$ sudo kanji-config-updmap-sys --ja status
CURRENT family for ja: noEmbed (variant: <empty>)
Standby family : haranoaji
Standby family : ipa
Standby family : ipaex
Standby family : noto-otc (AI0)

sudo kanji-config-updmap-sys --ja haranoaji をしたあとに再度コマンドを叩くとこうなりました。haranoaji(原ノ味フォント)がセットされたことがわかります。

$ sudo kanji-config-updmap-sys --ja status
CURRENT family for ja: haranoaji (variant: <empty>)
Standby family : ipa
Standby family : ipaex
Standby family : noto-otc (AI0)

埋め込み設定をしない / した状態で SpeakerDeck にアップロードし、その見た目を比較したのがこちらです。漢字の見た目が異なるのが確認できます。

埋め込み設定をしない場合

埋め込み設定をした場合

出力される PDF のサイズを大きくする

Beamer 製のスライドのサイズは、デフォルトでは横 128mm 縦 96mm であり、この状態のまま PDF 化してアップロードすると、無理やり拡大したようなボヤけた見た目になってしまいます。これをなんとかします。

TeX Live に含まれる PDFjam を使って、dvipdfmx によって PDF 化されたものをリサイズします。たとえば、横 512mm 縦 384mm にしたい場合は次のようにすればよいです。

$ pdfjam --papersize '{512mm,384mm}' 元のスライド.pdf -o リサイズ後.pdf

リサイズしない / した状態で SpeakerDeck にアップロードし、その見た目を比較したのがこちらです。リサイズせずにアップロードすると画像の劣化が特にひどいのですが、リサイズするとその問題が解消できます。

リサイズしない場合

リサイズした場合

まとめ

理想通りにアップロードしようとすると骨が折れますね・・・

ちなみに私はこのようなシェルスクリプトを用意して作業してます。latexmk で書いても良さそうなんですが、pdfjam の部分がいい感じにできるのかよくわからない(pdfjam の部分も $dvipdf 内に書いたらいけるかも?)

# 日本語埋め込み設定はあらかじめやっておく
platex slide
platex slide
dvipdfmx slide
pdfjam --papersize '{512mm,384mm}' slide.pdf -o resized.pdf