読者です 読者をやめる 読者になる 読者になる

StanのマニュアルをKindleで読みたい

とふと思ってやってみました。

が、私はTeXあんまり詳しくないです。。間違いがあればご指摘ください。

やり方

このスライドに情報がまとまりすぎていて感動しました。

TeX4htでHTMLを生成、それをCalibreでMOBI形式に変換することにします。

環境

Ubuntu 16.04でやりました。まず必要なパッケージをインストールします。TeX関連でもうちょい入れたパッケージがあった気がするんですが、忘れました…

sudo apt install git make texlive tex4ht calibre

ソースを取ってくる

Stanのマニュアルは本体のレポジトリに含まれています。これをcloneします。

git clone https://github.com/stan-dev/stan

とりあえずmake manualする

TeXファイル一式はsrc/docs/stan-referenceにありますが、もろもろ中間生成物がないとうまくコンパイルできないみたいでした。とりあえずmake manualします。

cd stan/
make manual

TeX4htでHTMLを生成

パスの指定の仕方がよく分からなかったので、TeXファイルがあるディレクトリに行って、そこでhtlatexコマンドを実行します。

cd src/docs/stan-reference/
htlatex stan-reference.tex

さっきmake manualしたときと同じような出力が出て、HTMLファイルとPNGファイルが生成されるはずです。

が、このままだとちょっと問題があります。

画像のサイズを大きくする

数式のサイズをもうちょい大きくしないとKindleではすこぶる見づらいです。

画像をSVGで出力するようにする方法↓はあるんですが、ちょっと設定がめんどくさそうでした。

http://12000.org/my_notes/faq/LATEX/layout/#x1-40001.2

とりあえず画像のサイズを2倍にしてみます。htlatexを実行した時のログを見ると

System call: dvipng -T tight -x 1400 -D 72 -bg Transparent -pp 938:938 stan-reference.idv -o stan-reference661x.png

みたいな感じのが出ているので、この-Dに指定している値を大きくすればよさそうです。これは/etc/tex4ht/tex4ht.envの以下の箇所で指定されています。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This is the Debian default which uses dvipng
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 <dvipng>
G.png
Gdvipng -T tight -x 1400 -D 72 -bg Transparent -pp %%2:%%2 %%1 -o %%3

これを書き換えます。(-xはdeprecatedなオプションだと書いてあったのでついでに取ります)

Gdvipng -T tight -D 144 -bg Transparent -pp %%2:%%2 %%1 -o %%3

で、これだけでいいかと思いきや、なんとhtlatexでは普通にはこの値が反映されません(いったいどこを見てるんでしょう…)。/usr/bin/htlatexの中身を覗くと、4つ目の引数に指定したものがt4htコマンドに渡るみたいです。

        tex4ht -f/$1  -i/usr/share/texmf/tex4ht/ht-fonts/$3
        t4ht -f/$1 $4 -d~/WWW/temp/ -m644

ということで、こんな感じに指定します。

htlatex stan-reference.tex "" "" -e/etc/tex4ht/tex4ht.env

CalibreでMOBIに変換

Calibreは電子書籍をつくるツールです。Pandocのようにドキュメント形式を変換するだけではなく、スクレイピングした結果を電子書籍にしたり、電子書籍データをいじったりするのにも使えます。今回使うのはコマンドラインツールですが、GUIからも操作できます。Pythonのライブラリとしても使えるので、Pythonを書ける人にはかなり便利だと思います。

ebook-convertコマンドでMOBIファイルを生成します。(stan.mobiの代わりにstan.epubにするとEPUBを生成することもできます)

ebook-convert stan-reference.html stan.mobi --extra-css=stan-reference.css

途中、

Selector: Invalid or incomplete selector:
SelectorList: Invalid Selector:

みたいなエラーだか警告だかが出まくりますが、とりあえず気にしないことにして待っていると、MOBI形式のStanマニュアルの完成です。

感想

やっぱ日本語で読みたいな、と思いました。