Rupert Swarbrickは、行が折り返されたpdfにEmacsバッファを印刷する次の3つの関数を思いついた。 ps-print*
関数)。Emacs関数のヘッダを書式設定してバッファにPDF /行折り返しを印刷する
この関数は、この行の折り返しを実現するために、現在のバッファのコピーを作成する必要があるという問題があります。これにより、ps-print-buffer-with-faces
の機能が損なわれ、結果として得られるPDFファイルの各ページの上部に正しいヘッダーが表示されます。
彼の解決策の一環として、Rupert Swarbrickはこの情報を保存する関数を書いた。ただし、結果のヘッダーは常にです。HeaderLinesLeft
間違いを見つけられるのは誰ですか?
(defun harden-newlines()
(interactive)
"Make all the newlines in the buffer hard."
(save-excursion
(goto-char (point-min))
(while (search-forward "\n" nil t)
(backward-char)
(put-text-property (point) (1+ (point)) 'hard t)
(forward-char))))
(defun spool-buffer-given-name (name)
(load "ps-print")
(let ((tmp ps-left-header))
(unwind-protect
(progn
(setq ps-left-header
(list (lambda() name) 'ps-header-dirpart))
(ps-spool-buffer-with-faces))
(setf ps-left-header tmp))))
(defun print-to-pdf()
"Print the current file to /tmp/print.pdf"
(interactive)
(let ((wbuf (generate-new-buffer "*Wrapped*"))
(sbuf (current-buffer)))
(jit-lock-fontify-now)
(save-current-buffer
(set-buffer wbuf)
(insert-buffer sbuf)
(setq fill-column 95)
(longlines-mode t)
(harden-newlines)
(message (buffer-name sbuf))
(spool-buffer-given-name (buffer-name sbuf))
(kill-buffer wbuf)
(switch-to-buffer "*PostScript*")
(write-file "/tmp/print.ps")
(kill-buffer (current-buffer)))
(call-process "ps2pdf14" nil nil nil
"/tmp/print.ps" "/tmp/print.pdf")
(delete-file "/tmp/print.ps")
(message "PDF saved to /tmp/print.pdf")))
こんにちは。お返事をありがとうございます。 'spool-buffer-given-name'を完全に置き換えるのですか、それとも変更する必要がありますか? – Werner
こんにちはワーナー。それを私のものと置き換えることができます。同等です。 unwind-protect/setfの効果は、letでより簡単に(この場合はとにかく)達成されます。なぜラムダが必要なのか分かりません。免責事項として、このバージョン(あなたが投稿したコードと組み合わせて)は、Ubuntu 10.04のEmacs 23.1.1で正常に動作します。 –
私はちょうど2つの関連する投稿でコメントを作成したかった:Rupert Swarbrickの初期コード:http://stackoverflow.com/questions/7362625/word-wrap-for-emacs-print-buffer-to-pdfそして、 2番目のフォローアップ:http://stackoverflow.com/questions/16779882/save-buffer-as-a-pdf-with-ns-write-file-using-panel-or-similar-option私はまだ開いて実装する必要がありますパネルだが、それは私が探しているものとほとんど同じだ。 – lawlist