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 するとなんで,ファイル出力になるの?


さて,これで,寝る前に,布団の中でソースコードを読める.
いわんや,すぐ寝付ける...
いいのか!?こんな落ちで.