9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ソースコードをPDF化する(2022年版, Vimユーザ向け)

Last updated at Posted at 2022-07-05

新しいコードを理解しようとするとき、画面上のエディタで読むことに不満がない人もいると思いますが、エディタ上だと「どこを読んでいたっけ?」となりやすいので、私には紙に印刷して(あるいはiPadとApple Pencilで)書き込みを入れながら読むのが一番合っているようです。そんなとき、行番号付きで、シンタックスハイライトも付いて、日本語にも対応で、お気に入りのフォントで、綺麗にPDF化することができると嬉しいですね。本記事では、私が数年かけて試行錯誤して現状ベストだと思っている手法を紹介します。

TL;DR...先に結論を

#!/bin/bash

filein=$1
opt=${2:-Portrait}  # 長い行のときはLandscapeオプションが便利
vim ${filein} -c 'colorscheme default | set number | TOhtml | w tmp.html | qa!'
wkhtmltopdf --page-size B4 -O ${opt} --footer-left "[date] [time] ${filein}" \
  --footer-right "[page]/[topage]" --no-background --margin-top 4 --margin-right 3 \
  --margin-left 4 --margin-bottom 10 tmp.html ${filein}.pdf 
rm -f tmp.html

このシェルスクリプトにtopdfと名前をつけ、実行権限を与え、パスの通ったところに置いておくと良いでしょう。使用時は

topdf SOME_INPUT_FILE

とすればPDF化してくれます。

解説

まず、Vimの出力機能を使うことのメリットを挙げておきます。これは、我々Vim使いであれば、読みたい言語のシンタックスハイライトが既にVimに揃っているという前提があります。流星のように現れた最新の言語でも、閉じたコミュニティで代々使われている古の独自言語でも、 ~/.vim/syntax さえメンテナンスしてあれば、PDF化に際して別途シンタックスハイライトと格闘しなくて済むということです。

vim ${filein} -c 'colorscheme default | set number | TOhtml | w tmp.html | qa!'

上の行ですが、vimにコマンドライン引数を与えてTOhtmlでtmp.htmlというHTMLファイルに変換しています。colorscheme defaultを付けているのは、画面表示向きのカラースキームだと印刷して見づらいことがあったためです。qa!はvimを閉じるコマンドです。

続いて、wkhtmltopdfでPDF化してやります。HTMLを経由せずPS(PostScript)形式を経由してPDF化していたこともあったのですが、日本語対応などHTML形式の方がうまくいきました。

wkhtmltopdf --page-size B4 -O ${opt} --footer-left "[date] [time] ${filein}" \
  --footer-right "[page]/[topage]" --no-background --margin-top 4 --margin-right 3 \
  --margin-left 4 --margin-bottom 10 tmp.html ${filein}.pdf 

上の行でHTML→PDFの変換を行っています。--page-size B4としているのは、実質的には文字サイズの調整です。--page-size A4とすれば文字が相対的に大きくなり、--page-size A3なら文字が小さくなります。私にはB4(縦の場合1ページにちょうど100行)がちょうどいい塩梅でした。

-Oは配置(orientation)のオプションです。${opt}Landscapeを与えるとページが横向きになります。1行が長いコードをPDF化する際に便利です。使用時にtopdf SOME_INPUT_FILE Landscapeと与えます。

--footer-*はお好みで。変換した日付や元のファイル名、ページ番号などを入れています。

--margin-*は文字通り余白の設定ですが、フッターを入れる関係で下部を大きめにしています。

以上で、日本語対応、シンタックスハイライト対応のPDF化ができます。ソースコードを印刷して読みたいVim派の方はぜひ試してみてください。


サンプル(トリミング済み)です。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?