Rupert Swarbrick 提出了以下三个函数来将 Emacs 缓冲区打印为 pdf,其中行被换行(使用时通常不会出现这种情况)ps-print*
功能)。
问题是这个函数要实现换行,必须复制当前缓冲区。这有效地破坏了ps-print-buffer-with-faces
在生成的 PDF 文件中的每个页面顶部显示正确的页眉。
作为其解决方案的一部分,Rupert Swarbrick 编写了一个保留此信息的函数。然而,生成的标头始终是标题行左
谁能指出其中的错误?
(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")))
尝试这个:
(defun spool-buffer-given-name (name)
(let ((ps-left-header (list (format "(%s)" name))))
(ps-spool-buffer-with-faces)))
请参阅变量 ps-left-header 的文档,这就是我了解上述内容的原因。
这是一个很巧妙的能力;我肯定会用它代替 ps-print。让它表现得更像 C-u M-x ps-print-buffer-with-faces 会很好;两个缺失的功能是标题中的目录名称,以及提示用户输入文件名。两者都不太困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)