職場で Windows 上の Emacs から印刷したいんだけどと質問を受けた。
自分は UTF-8 のソースコードなどを印刷するときは、NetBSD で iconv で EUC-JP に変換してから a2ps-j に送って Postscript に変換、Windows の SumatraPDF (内部で ghostscript を呼び出している)で印刷という手順を踏んでるんだけど、めんどくさいよね。
Windows で動くフリーのテキスト印刷ツール (sprint とか)を試してみたけど、日本語が文字化けとかしてまともに動かない。結局 VisualStudio で印刷したら、ってその場をしのいだけど敗北感必至。
そこで Windows 上の Emacs のバッファを印刷する方法を調べてみた。
GNU 本家のマニュアルと日本語用の追加の設定によれば以下の通り。これで一応 M-x ps-print-buffer が動作する。メニューでいえば Postscript Print Buffer だ。
;; Windows での印刷設定 (setq ps-printer-name t) (setq ps-multibyte-buffer (quote non-latin-printer)) ;; なぜか両面印刷できない (setq ps-lpr-command "C:/gs/gs9.14/bin/gswin32c.exe") (setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH" "-sDEVICE=mswinpr2" -sPAPERSIZE=a4"))
しかしコメント欄に書いてるように、複数ページだとなぜか両面印刷できない。もちろんプリンタのプロパティで両面印刷をしている。同様の指摘はネットにもいくつか転がっていた。
直接印刷せずに、一旦ファイルに保存してから印刷すると両面印刷可能になる。ならば、gs を直接呼ぶんじゃなくてツールを咬ませばいいのではないか、ということでこれ。
;; Windows での印刷設定 (setq ps-printer-name t) (setq ps-multibyte-buffer (quote non-latin-printer)) ;; 直接 gs に送るとなぜか両面印刷できない ;; (setq ps-lpr-command "C:/gs/gs9.14/bin/gswin32c.exe") ;; (setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH" ;; "-sDEVICE=mswinpr2" -sPAPERSIZE=a4")) (setq ps-lpr-command "C:/Program Files/SumatraPDF/SumatraPDF.exe") (setq ps-lpr-switches nil)
これで、ps-print-buffer を実行すると SumatraPDF が立ち上がるのでそこで印刷すればよい。SumatraPDF が終了するまで Emacs は操作できないが、まあ許容範囲かな。
あと、英数字と日本語の幅は 1:2 にはならない。日本語フォントの設定は mule.el でやっているようだが、印刷用の文字幅の調整は簡単にはできないようだ。