gpt4 book ai didi

emacs - 格式化 Emacs 函数中的 header 以将缓冲区打印到 PDF(带换行)

转载 作者:行者123 更新时间:2023-12-02 14:05:21 26 4
gpt4 key购买 nike

Rupert Swarbrick 提出了以下三个函数来将 Emacs 缓冲区打印为 pdf,其中行被换行(使用 ps-print* 函数时通常不会出现这种情况)。

问题是这个函数要实现换行,必须复制当前缓冲区。这实际上破坏了 ps-print-buffer-with-faces 在生成的 PDF 文件的每个页面顶部显示正确标题的功能。

作为其解决方案的一部分,Rupert Swarbrick 编写了一个保留此信息的函数。然而,生成的 header 始终是 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")))

最佳答案

试试这个:

(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 会很好;两个缺失的功能是标题中的目录名称,以及提示用户输入文件名。两者都不太困难。

关于emacs - 格式化 Emacs 函数中的 header 以将缓冲区打印到 PDF(带换行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com