ゴミGitBook
私は最近3DSについての本を書いている. その際, 私はTeXなどを覚えたことがなく, その学習コストを懸念して, MarkdownとGitバージョン管理を用いたGitBookなるWebサービス, (オフライン) 製本ツールを用いている. しかし, これが大層__ゴミ__で, いろいろと問題に遭遇した.
注意すべきことは以下のこと.
- 純正エディタは使うな. _gitbook-cli_を使え.
- Ubuntu/Debianでは_npm_, _nodejs-legacy_パッケージをインストールせよ.
- PDFで出力せよ.
- PDFで出力するには太字のフォントも用意してCSSで指定せよ.
以下愚痴.
#純正エディタがゴミ
純正エディタは, 何を思ったことか^S
を押すたびにGitのコミットを作成しやがる.
GitBookのドキュメントのコミットログを見るととんでもないことになっている.
使うべきではない. 仕方がないので_Gedit_で編集し, _gitbook-cli_で製本することにした.
#gitbook-cliがインストールできない _gitbook-cli_はNPMにあり, Node.jsで書かれているので, 組み込みばかりいじっていてNode.jsなんてインストールしていなかった私はNode.jsのインストールから始めた.
すると, _Calibre_なる電子書籍ツールに依存しているとの事だったので, _Calibre_をUbuntuのリポジトリからインストールした. しかしこの_Calibre_はバグ有りで, _ebook-viewer_が1.2GBものコアダンプを吐いて死ぬ. デバッグすると, なんとCalibreはPythonとNode.jsのハーフで, PythonからはQtが呼ばれてそいつが死んでいた. Python, JavaScript, C, C++がミックスされた状況である. プログラミング言語とは何なのだろうか. そのカオスな状況では, Pythonには_pdb_なるデバッガもSIGSEGVでPythonインタプリタもろとも死ぬので役に立たず, このデバッグにだいぶ時間を費やしてしまった. そんなことをやっているうちに, ふとCalibreのページにバイナリパッケージが公開されていたので, それをインストールしたらあっさり動いた. ところで, そこには「ソースからビルドしたらバグレポートするな」との文言がある. ソースを弄らずどうやってデバッグしろというのか. 全くクソとしか言いようがない.
とにかく, Calibreのインストールを済ませ, ようやく_gitbook-cli_をインストールできたのだが, 動かない.
$ gitbook
/usr/bin/env: node: そのようなファイルやディレクトリはありません
$ node
プログラム 'node' は以下のパッケージで見つかりました:
* node
* nodejs-legacy
次の操作を試してください: sudo apt-get install <選択したパッケージ>
$ sudo apt-get install nodejs-legacy
どうやらNode.jsはそのコマンドをnode
からnodejs
に変えたらしい. GitBookは未だに古い名前で指定している.
_nodejs-legacy_はnode
からnodejs
へのリンクを作成してくれるので, これをインストールする.
これでようやく動いた.
#(PDF以外の) フォーマットがゴミ さて, 早速gitbookで出力だ. gitbookは様々なフォーマットに対応している, がPDF以外は使えない. PDF以外は用紙のサイズさえ指定できず, 紙の本にするには不向き, というか使えない.
#PDF出力がゴミ
ではPDFだ, とPDFを指定するが, PDFはPDFで問題が起きた. つまり, PDFはフォントを太字することができない.
再現性を重視するPDFでは, 処理系が独自に太字にするのは許されないのかもしれない.
だったらPDFの出力を担当しているQPrinterがやるべきだが,
こいつは無能である. 太字のフォントが無かったら普通のフォントを代わりに使う.
仕方がないので太字のフォントが用意されている日本語フォント,
M+ FONTS を使った. GitBookのドキュメントには全く書かれていないが,
body
のスタイルが全体に適用されるので, そこで指定する.
book.json
{
"styles": {
"website": "font.css",
"ebook": "font.css",
"pdf": "font.css",
"mobi": "font.css",
"epub": "font.css"
}
}
font.css
@font-face {
font-family: "mplus";
src: url(font/mplus-1p-bold.ttf);
font-weight: bold;
}
@font-face {
font-family: "mplus";
src: url(font/mplus-1p-regular.ttf);
}
body {
font-family: mplus;
}
普段Cしか書かない私にとって, Python, Node.js, C++, CSSと続くともううんざりだ. Webな人間にとってはこれくらい大したことないのだろう. ソースを見ながら, ググりながらもこれでまともな出力が得られるようになった.
これが便利だと思ってるんだからGitBookの中の人間は相当頭がおかしい.
#思うのだが, TeX覚えたほうが楽だったんじゃないだろうか. ただここまでやって今更変える気もないんだよなあ.