如何在emacs中使用pdf工具(pdf-view-mode)?


23

pdf-tools包含pdf-view-mode,它提供doc-view-mode中不存在的一些功能(请参阅问题结尾)。

可以将pdf-view-mode用作一般的doc-view-mode的替代品,还是必须通过工具将其作为“工具”?

在这两种情况下,是否都需要编辑emacs源以在gnus,eww和orgmode中使用pdf工具,还是可以使用它们的系统范围设置?

---此处pdf工具的功能为方便起见;见github网站了解详细信息-

  1. 似乎比doc-view更快
  2. 分辨率通常会更好,因为不会呈现为png
  3. 很好的搜索,甚至可以搜索所有出现的短语
  4. 可以添加文本注释,以及突出显示,加下划线等
  5. 可以为pdf零件创建imenus
  6. 可以将多个pdf视为一个“虚拟” pdf
  7. 可以与乳胶集成,以并排查看乳胶源和pdf,并在等效位置从一个跳转到另一个(例如,\section{A section}在LaTeX中选择并在pdf中获得该部分)。

请参阅此处进行相关讨论,其中可能包含您问题的答案。
tmalsburg '16


您可能需要用可怕的“最佳实践”来重述您的问题,有些人认为,“最佳实践”意味着答案将主要基于观点。我似乎记得gnus在这里是一种特殊情况,您将需要在.mailcap中添加适当的配置。如果您的问题在我回到家之前没有解决,我将为您挖掘配置。
泰勒

1
Gnus使用mailcap找出打开附件的应用程序。如果已将Emacs配置为使用pdf-tools打开pdf文件,则需要将行添加application/pdf; emacsclient %s.mailcap,然后启动Emacs编辑服务器:以身份调用Emacs emacs --daemon或添加(server-start)到.emacs中。
泰勒

谢谢。那行得通,之后就行了org(set 'org-file-apps '((auto-mode . emacs) ... ("\\.pdf\\'" . default)))
brittAnderson

Answers:


31

在安装时从“自动” 切换docviewpdf-tools“自动” pdf-tools。完成此操作后,Emacs每次尝试在Emacs中打开pdf ,都会使用pdf-tools。但是,某些软件包会调用操作系统,或者在Emacs中使用不同的配置来决定是否应使用Emacs或其他程序打开pdf。因此,需要一些“逐个工具”配置,才能使所有Emacs软件包都使用pdf-tools。

如果要在同一Emacs实例中打开pdf,则需要使其在守护程序模式下运行(即,以开头emacs --daemon),或调用(server-start)init以使其emacsclient起作用。

组织模式链接

开箱即用,org-mode不了解pdf工具。但是,您可以添加对使用org-pdfview打开到pdf文件的组织链接的支持,该链接可作为MELPA的软件包提供。安装完成后,您可以使用以下代码将其激活.emacs

(eval-after-load 'org '(require 'org-pdfview))

(add-to-list 'org-file-apps 
             '("\\.pdf\\'" . (lambda (file link)
                                     (org-pdfview-open link))))

这样做将为通过C-c C-l,添加链接提供新的完成目标pdfview:,并支持跳转到特定页面。完整链接使用以下格式:

[[pdfview:/path/to/myfile.pdf::42][My file Description]]

交错模式和PDF注释

交错模式提供了对“注释与组织模式缓冲区并排显示PDF”的支持。这是使用嵌入在pdf中的注释的替代方法(您可以使用pdf工具进行注释)。相反,您最终得到一个带有所有注释的组织模式文件,该文件链接到与注释相关联的pdf页面。

古努斯

正如我在评论中提到的那样,gnus使用mailcap打开附件。要配置它,您的.mailcap文件中需要以下内容:

application/pdf; emacsclient %s

网页

EWW也使用mailcap,因此请.mailcap按照上述Gnus 修改文件。

AucTeX

对于AucTeX,有许多相关选项:

  • 通过变量指定查看者TeX-view-program-selection:找到相应的条目,output-pdf然后为值选择“ PDF工具”。
  • 要使用SyncTex,您需要:
    • set TeX-source-correlate-mode,可以通过Mx调用该函数进行交互,也可以通过永久设置该变量M-x customize-variable
    • 确保TeX-source-correlate-method包括(pdf . synctex)

有了这个,从您的tex源文件C-c C-g应显示pdf的相应部分。

ESS

将变量自定义ess-pdf-viewer-prefemacsclient

xdg打开

在Linux上,某些软件包将调用外部程序xdg-open来打开pdf文件。这将使用系统范围的设置来确定要使用的程序。这是系统范围的更改,因此设置完成后,其他程序会将pdf文档发送到Emacs。因此,如果您不希望例如Firefox这样执行操作,则不需要进行这些更改。

设置emacsclient通过xdg-open以下方式在系统范围内打开pdf :

  • 创建一个~/.local/share/applications/emacsclient.desktop包含以下内容的文件:

[桌面条目]
名称= Emacs Client
Exec = emacsclient%u
图标= emacs-icon
类型= Application
Terminal = false
MimeType = application / pdf;

  • 从命令行,发出:

xdg-mime default emacsclient.desktop application/pdf

您可以测试xdg-open your-document.pdf它是否可以使用-应该your-document.pdf在Emacs中打开。

w3m

w3m首先检查变量w3m-doc-view-content-types,如果在该变量中看到“ application / pdf”,它将在doc-view中打开pdf。这是一个可自定义的变量,因此请使用自定义界面删除“ application / pdf”条目。

在中没有条目时w3m-doc-view-content-types,w3m接下来将检查变量中w3m-content-type-alist是否有与“ application / pdf”匹配的条目。自定义条目以阅读

[INS] [DEL] Type: application/pdf
  Regexp: ( ) Not specified
          (*) String: \.pdf\'
  Viewer: ( ) Not specified
          (*) External viewer:
                Command: emacsclient
                Arguments:
                  [INS] [DEL] file
                  [INS]

您还可以使用emacs函数(大概find-file或类似的功能),而不是外部调用emacsclient,但我无法弄清楚其语法。


但是emacs中的w3m仍使用docview。任何建议如何解决那个问题?
brittAnderson

查看最新答案
泰勒(Tyler)2017年

我可以链接org-mode到PDF文件中的特定注释吗?
AlwaysLearn '17

1
@AlwaysLearning不是我所知道的。交错模式支持将注释记录在单独的链接的组织模式文件中。我将更新答案
泰勒(Tyler)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.