enscriptで,truetypeフォントを使用して,ソースコードを綺麗に印刷したいー!
ワンランク上のおっさんは.
おー,今回は倒置だ.
企んでいるのは,Postscriptファイルにして,Windowsへ持っていき,pdf化して,印刷.というパターン.
Emacsからも,C-u M-x ps-print-buffer-with-faces をすれば,psファイルを出力できました.
けど,複数ファイルとかディレクトリ跨ぐとか,わからんのでスルー.外人が書くと,thru.
どうでもいいけどw
読ませる気ゼロの,結論からどーん.
% enscript --color --highlight=c --font="DejaVuSansMono8" -G --column=2 --landscape -o foo.c.ps foo.c
デフォルトのフォントCourierでは,気に入らないのっで,おじさん,頑張ってみました的,日記.
要するに上記のように指定すればいいんだけど,かなりはまったので,メモっておくぞこのやろう.
手順
- 使用したいtruetypeフォントがあるディレクトリを確認しておく.
- 今回はDejaVuSansMonoを使用.場所は,/usr/share/fonts/truetype/ttf-dejavu.
- 使用したいフォントについての,AFM(Adobe Font Metric)ファイルを用意.
# for i in *.ttf; do ttf2afm $i > ${i%ttf}afm; done;
${i%ttf}という表現初めてしりました.てへ.man sh で,
parameter expansion あたりだっけ?に載っています.やっぱmanはすげー.
- enscript から文句を言われるので,下記の行を削除.もしくは,「Comment 」を頭につけるとか.
# for i in *.afm; do sed -i -e 's/DejaVu changes are in public domain//' $i; done;
- font.map ファイルの作成.これは簡単.最初,for文回してやってたけど,コマンドがあることを知りました.
# mkafmmap *.afm
- cp /etc/enscript.cfg ~/.enscriptrc して,僕だけ,私だけの設定ファイルを用意.
- .enscriptrcのAFMPathに「/usr/share/fonts/truetype/ttf-dejavu」を追加.ま,環境変数で毎回指定しても別にいいと思います.
Webで調べると,これで,でけるようになるみたいだけど,私の場合は,できませんでした.
手順,continued
- pfb ファイルにしてしまえ!!
- # apt-get install ttf2pt1
- for i in *.ttf; do ttf2pt1 -b $i; done;
- これで,DejaVuSansMono.pfbとかいうファイルができているはず.
- それから,~/.enscriptrc に以下を追加.
# Include following font files to all PostScript outputs. # DownloadFont: DejaVuSansMono DownloadFont: DejaVuSansMono-Bold DownloadFont: DejaVuSansMono-BoldOblique DownloadFont: DejaVuSansMono-Oblique # これに気づかず,長いことはまっていました.orz
- さ,こんどこそ,完成だ!! おつかれちゃん.
感想
当初,VeraMono.ttf とかでやろうとしたけど,なんかどっかで,文句言われて,
挫折しました.fontforge で見る限り,コーディングに使用するフォントに関しては,
DejaVuSansMono もほとんど同じようなので,go しました.
たぶん,postscriptに関しての知識が,windows上でpsファイルをダブルクリックすれば,
distillerがpdfに変換してくれる,くらいのもんだから,苦労したんだろうと推測.
ま,いいや.
ヘッダとか,2カラムとかは,man enscript すればオッケーです.
今回は,ソースコード中に日本語が登場していないので,そのあたりの問題は
直面せずにすんだけど,日本語がある場合はさらに大変そうな予感.
できあがりのスクリーンショットでもアップできれば洒落た感じだけど,
テクなしなので,放棄w
わたしはおしゃれをさぼれます.
疑問
M-x ps-print-buffer-with-faces を直接実行すると,プリンタに送られるようだけど,
C-u するとなんで,ファイル出力になるの?
さて,これで,寝る前に,布団の中でソースコードを読める.
いわんや,すぐ寝付ける...
いいのか!?こんな落ちで.