3DプリンタとITとプリキュアのブログ

大学でプログラミングに出会って、ズブズブにハマってしまった情報系学生の書くブログです。

初めてLaTeXで技術書を書いて売るまでにやったこと

先日、コミックマーケット94で「Dockerではじめるゲームボーイアドバンス開発本」という技術書を頒布しました。

booth.pm

BOOTHでモノクロ紙書籍+カラーPDFが購入できます。在庫余ってるのでみんな買ってください()

初めて技術書を書いたので、それまでに色々やったこととか困ったことについての話。

 

技術書を書いた経緯

僕が所属しているサークルで去年の冬コミ(C93)でHoloLens本を出していて、僕もそういうやつやりたいなぁって思ってたんですけど、ちょうど僕が所属している別のサークルでC94受かっていたので、初めての技術書を書くことになりました。

もともと何の本書くかとか全然決まってなくて、どうするの?ってなってました。

Unity開発本とかの案もあったんですけど、そんなありきたりなやつは市販の技術書には絶対に内容で勝てないのでボツ。そもそも面白くないしね。

ということで、めちゃくちゃニッチな層向けの本が書きたくて、僕が持ってる技術の中で一番ニッチっぽい技術がGBA開発だったので、ついでに人の目も惹けるように(このころはあんまりDockerさわったことなかったのに)Dockerと合わせて「Dockerではじめるゲームボーイアドバンス開発本」を書くことにしました。

 

技術書執筆の大まかな流れ

執筆完了までの道のりを書くと、

  1. テーマ決め → GBA開発にしよう
  2. ツール選び → LaTeXで書こう
  3. 書きたい内容をリストアップ
  4. 構成を決めて、見出しだけ書く
  5. タイトルを決める
  6. 表紙を作る→ いちはる (@iuchi_h)に書いてもらった
  7. 執筆
  8. 印刷所に発注

大体こんな感じです。

 

ある程度まとまった文章を書くときに使うツールとしては、Word、LaTeXMarkDownRe:Viewとか色々あると思うんですけど、とりあえず技術書だしっていうことでLaTeXにしました。

今までLaTeXは大学のレポート書くのに使う程度で、雑な理解で使ってたんですけど、やっぱりこれぐらい大きいものを書くとそこそこ理解が深まります。

 

LaTeX周りで使ったものとか

今までLaTeXはドキュメントクラスはjsarticleばっかり、使ったパッケージはほぼgraphicxだけ、みたいな感じで、新しいパッケージのインストールとか全然やってこなかったのでその辺の話です。

 

新しいパッケージのインストール

新しいパッケージのインストールにはTeXのパッケージ管理コマンドのtlmgrを使いました。mactexに標準で入っています。

パッケージ管理コマンドがあるならそれを使うにこしたことはないと思うので使いました。

 

使ったパッケージ

技術書を書きながら、ちょこちょこ追加していって、最終的に使用したパッケージは、こんな感じになりました。

  • graphicx
  • color
  • here
  • tcolorbox
  • framed
  • quotchap
  • pdfpages
  • hyperref
  • pxjahyper
  • titlesec
  • picture
  • tikz

graphicx, colorは例によって画像の挿入に使いました。

hereは現在の位置に強制的に図表を挿入できるようになるパッケージです。LaTeXを書いていると大体変なところに図表が飛んでしまいますが、2ページ先とかに図表が飛んでしまうと読むときに大きなストレスになるので導入しました。

tcolorboxは複数行を枠で囲んだりできるようになるパッケージです。

framedも複数行を枠で囲むパッケージですが、プログラムとかコマンドとか書く内容によって枠を変えたかったので、tcolorboxと併用しました。

quotchapは章見出しをちょっとかっこよくできるパッケージです。

hyperref、pxjhyperは目次とか注釈とかにリンクを貼れるパッケージです。

titlesecはsectionとかsubsectionとかの見出しを変えられるようにするパッケージです。プリアンブルで結構泥臭い設定をしています。

picture、tikzは図を書くために使うパッケージです。今回はtitlesecの設定に使いました。

 

プリアンブルの細かい話 

tcolorboxをそのままusepackageするとincludegraphicsができなくなったのでdvipdfmxをグローバル指定しています。

hyperrefはリンクをいちいち枠線で囲おうとしてくるのでhidelinksを指定して枠線を消しています。

あとはまあLaTeXのソースを置いておくので読んでください。

最終的にこんな感じになりました。

これをPDFに出力してみるとこんな感じ。 

f:id:cameremon84:20180826111148p:plain

標準のLaTeXよりも、かなりいい感じになりました。

 

LaTeXの執筆環境

latexmk + Skim

latexmkでファイルが編集されるたびに自動コンパイルし、Skimで生成されたPDFをプレビューしていました。

MacLaTeXを書くときは、この環境がデファクトスタンダートだと思います。

Gitとの連携

執筆中はGitを使って書いてました。

今まであんまり考えたことなかったんですけど、ある程度ページ数が増えてくると、LaTeXコンパイルにめちゃくちゃ時間が掛かります。

1行書き換えるたびにプレビューするのに10秒とか待ってられないので、今書いてる章以外はいちいちコンパイルしてほしくないので色々対策を考えました。

ネットで検索すると、章ごとに別ファイルに書いておいて、プレビューしたい章だけ\includeコマンドを使ってプレビューする手段が取られていることが多いみたいなんですけど、僕は章ごとにbranchを切って、書き上げた章からdevelopにmergeしていく感じにしました。

コンパイルが軽快になるし、ついでにGit管理も徹底されるので便利です。

 

技術書を書いてみて良かったこと悪かったこと

メリット

  • LaTeXの理解が深まった
  • LaTeXを書くときのワークフローが定まった
  • ちゃんとした情報を書くためにちゃんと調べた
  • 達成感と満足感がすごい
  • イベント後はBOOTHとかKindleに出せる

デメリット

  • 時間が掛かりすぎる
  • 経済的にはマイナスオブマイナス
  • 不良在庫抱えちゃうと、うだつが上がらなくなる

  書いてから分かったこと

  • プリアンブルは自分で書いて、あとはMarkDownで書いた方がよくね?
  • 紙書籍にする場合は、後述の印刷の都合上あらかじめ何ページにするか決めてから書いた方が良い。

 

印刷について

書き上げたらあとは印刷を発注すればミッションコンプリートですが、結構初見殺し感があるので注意しようね。

まず印刷にはオフセット印刷とオンデマンド印刷の2種類があって、

値段、仕上がりともに オンデマンド < オフセット です。

技術書はそこまで印刷にクオリティ求める必要ないですし、オンデマンドで大丈夫です。

ただ、イベント中は「表紙とタイトル」だけで購入するかどうか決める人がほとんどなので、表紙はオフセット、本文はオンデマンドとかもアリかなぁ。

次にページ数なんですけど、印刷所によっては半端なページ数だと印刷できなかったりするので調べておきましょう。あと100ページを超えた途端に対応してくれる印刷所の数が激減するので注意しましょう。僕はそれで泣く泣く20ページくらい削りました。

最後に印刷所の選び方なんですけど、僕はpixivFactoryを使って選びました。自分のページ数とかサイズを入力して一番安いところ(今回はPICO様)に印刷してもらいました。

印刷代はめっちゃくちゃ高いので、事前に貯金をしておこう()

B5モノクロオンデマンド100P100部で値引き無しだと5万くらいします。

イベント2週間前くらいだと2〜3割引とかしてる所がほとんどなので、ここを狙っていきたいね(現実はイベント直前にデスマ)

本当の締切はイベント3日前とかで、割高にはなるけど一応印刷してくれる。

印刷後の本はイベント会場に直接郵送してくれるところもあるので利用推奨。100P100部とか刷ると1人で運べる重量じゃなくなります。

 

売り上げについて

まあまあ売れました。

今回は100部刷ったんですけど、C94会場で46部、BOOTHで10部弱ぐらい売れてて、会場では1部1000円(BOOTHでは1部1500円)で頒布していたのでギリギリ印刷代はペイできたかなって感じです。

今回がコミケ初参加で、隣で一緒に売ってたUnity本は50部完売したので、初参加で約100部も売れたのはかなり成功した部類じゃないかなぁ。

 

最後に

10/8 技術書典5で新刊出します。

「Dockerで始めるゲームボーイアドバンス開発入門 vol.2」

f:id:cameremon84:20180826130852j:plain

配置は「こ05」です。