はじめに
技術書展9で本を頒布する際にmd-to-pdf
を使ったので、備忘録もかねて、書きたいと思います。
初めて、技術書展を見に行ったのが第4回、当時エンジニアですらなかったのに「いつかは技術書展で本を頒布してみたいな」と思って、技術通の人たちがごった返す秋葉原の会場にで考えていました。
それから2年以上経ち、今回はオンラインのみの開催ですが、技術書典9でやっと「実践 Vue.jsでスマホアプリをつくろう」という本(PDF)を頒布しました。
もし興味のある方は手にとってみてください!
初めて頒布したということもあり、思い入れも強く細かいところにこだわるために、色々悩んだことを残します。
概要
執筆環境は、ソースコードもあったため開発と並行するためvscode
を選択しました。
また、マークダウンで書けば最悪PDFにどうやっても変換できるだろうと考え、マークダウンで書くことにしました。
Wordとか使うとマークダウンでもなくて良いのかなと思います。
Pandocを最初に選択したが。。。。
マークダウンをPDF化するにあたり、最初に候補にあがるのがpandoc
です。
私もpandocでイケると思ってました、当時は。
正直言うと、カスタマイズにするには学習コストが少し高い印象を受けました。「ページ番号付けたいのに」とか「章の見出しをカスタマイズしたい」という時に一々調査してという感じだったので諦めました。
修得できれば便利だとは思います。
md-to-pdfに出会う
何か、シンプルで使い方がわかりやすいものがないかなと思い、MarkdownをPDFに変換する「md-to-pdf」は痒いところに手が届く素敵ツールでmd-to-pdfを見つけました。困った時のクラスメソッドさんw
md-to-pdfはシンプルなマークダウンからPDFに変換するライブラリです。npmでインストール可能です。
npm i -g md-to-pdf
下記のように、対象のマークダウンを指定して、スタイルシートを当てることできます。
求めているのは、最低限のマークダウンを変換し、スタイルシートでデザインをつけること。md-to-pdfがもっとも合っているように感じました。
npx md-to-pdf tmp/*.md --stylesheet styles/style.css
devtools
オプションをつけることで、ChroniumでHTMLとCSSの状態を確認することも可能です。
一々、PDF変換して確認だと時間がかかるので、地味に便利です。
※ホットリロードは効かないです。
npx md-to-pdf <マークダウン> --devtools --stylesheet styles/style.css"
工夫した点
表紙と裏表紙はあとでマージする
md-to-pdfでは、冒頭に設定を書くことができ、ページのサイズや余白を指定できます。
---
pdf_options:
format: A4
margin: 20mm 10mm
displayHeaderFooter: true
---
しかし、これが全部に入ると表紙や裏表紙にも余白が入ってしまいます。なので、表紙と裏表紙は別でmd-to-pdf
でpdf化し、その後PDFをマージしました。
手作業になってしまったところ
目次や章番号が手動になってしまいました。markdown-index
やMarkdown TOC
で自動的で作成することができるのですが、章番号が1.1.1
のようなフォーマットだったり、目次にスタイルを当てる関係で手動にしました。
おわりに
本を執筆するのも大変だけど、装丁も大変でした。。。
表紙・裏表紙の設定、目次、章番号、著者紹介、章ページなど思ったよりもデザインする箇所がたくさんあります。
シンプルなツールにして、CSSでカスタマイズが簡単にできるmd-to-pdf
一度試してみてください!