Bagaimana cara menggunakan pdf-tools (pdf-view-mode) di emacs?

23

pdf-tools termasuk pdf-view-mode yang menawarkan beberapa fitur yang tidak ada dalam doc-view-mode (lihat akhir pertanyaan).

Bisakah pdf-view-mode digunakan sebagai pengganti untuk doc-view-mode secara umum, atau haruskah itu "alat" dengan alat?

Dalam kedua kasus, apakah perlu mengedit sumber emacs untuk menggunakan pdf-tools di gnus, eww dan orgmode atau apakah pengaturan seluruh sistem mereka yang dapat digunakan?

--- Fitur alat pdf di sini untuk kenyamanan; lihat situs github untuk detail ---

  1. Tampak lebih cepat dari pada doc-view
  2. Resolusi biasanya lebih baik karena tidak diberikan sebagai png
  3. Pencarian bagus, dan bahkan dapat mencari semua kemunculan frasa
  4. Dapat menambahkan anotasi teks, dan menyoroti, menggarisbawahi, dan sejenisnya
  5. Dapat membuat imenus untuk bagian pdf
  6. Dapat memperlakukan beberapa pdf sebagai pdf "virtual" tunggal
  7. Dapat berintegrasi dengan lateks untuk melihat sumber lateks dan pdf berdampingan dan melompat dari satu ke yang lain di lokasi yang setara (mis. Pilih \section{A section}di LaTeX dan dapatkan bagian itu di pdf.
brittAnderson
sumber
Lihat di sini untuk diskusi terkait yang kemungkinan mencakup jawaban atas pertanyaan Anda.
tmalsburg
Gnus mungkin merupakan kasus khusus? Lihat: lists.gnu.org/archive/html/help-gnu-emacs/2015-02/msg00438.html
Brian Z
Anda mungkin perlu menulis ulang pertanyaan Anda jauh dari 'praktik terbaik' yang ditakuti, yang oleh sebagian orang dianggap jawabannya terutama didasarkan pada pendapat. Sepertinya saya ingat gnus adalah kasus khusus di sini, dan Anda perlu menambahkan konfigurasi yang sesuai ke .mailcap. Jika pertanyaan Anda belum ditutup sebelum saya pulang, saya akan menggali konfigurasi saya untuk Anda.
Tyler
1
Gnus menggunakan mailcap untuk mencari tahu aplikasi apa yang harus dibuka dengan lampiran. Jika Anda memiliki Emacs dikonfigurasi untuk membuka file pdf dengan pdf-alat, Anda perlu menambahkan baris application/pdf; emacsclient %suntuk .mailcap, dan memulai Emacs mengedit-server: Panggil Emacs sebagai emacs --daemon, atau menambahkan (server-start)untuk Emacs.
Tyler
Terima kasih. Itu berhasil, dan setelah itu berhasil org. (set 'org-file-apps '((auto-mode . emacs) ... ("\\.pdf\\'" . default)))
brittAnderson

Jawaban:

31

Beralih dari docviewke pdf-toolsterjadi 'otomatis' saat Anda menginstal pdf-tools. Setelah Anda selesai melakukannya, kapan saja Emacs mencoba membuka pdf di Emacs , itu akan digunakan pdf-tools. Namun, beberapa paket akan memanggil sistem operasi, atau menggunakan konfigurasi yang berbeda dalam Emacs, untuk memutuskan apakah mereka harus menggunakan Emacs atau program lain untuk membuka pdf. Jadi ada beberapa konfigurasi 'tool-by-tool' yang diperlukan untuk mendapatkan semua paket Emacs untuk menggunakan pdf-tools.

Jika Anda ingin pdf Anda dibuka dalam instance yang sama dengan Emacs, Anda harus menjalankannya dalam mode daemon (yaitu, mulai dengan emacs --daemon), atau panggil (server-start)init Anda sehingga itu emacsclientakan berfungsi.

Tautan mode-org

Di luar kotak, org-modetidak tahu tentang pdf-tools. Namun, Anda dapat menambahkan dukungan untuk membuka tautan org ke file pdf dengan org-pdfview , yang tersedia sebagai paket di MELPA. Setelah diinstal, Anda dapat mengaktifkannya dengan kode berikut di .emacs:

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

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

Melakukan hal ini akan memberikan target penyelesaian baru untuk menambahkan link melalui C-c C-l, pdfview:, dengan dukungan untuk melompat ke halaman tertentu. Tautan lengkap menggunakan format:

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

Mode Interleave & anotasi PDF

Mode Interleave memberikan dukungan untuk menghadirkan "PDF Anda berdampingan dengan buffer Mode Org dengan catatan Anda." Ini adalah alternatif untuk menggunakan anotasi yang tertanam dalam pdf (yang dapat Anda lakukan dengan pdf-tools). Sebagai gantinya, Anda berakhir dengan file mode-org dengan semua anotasi Anda, yang menautkan ke halaman dalam pdf yang terkait dengan anotasi.

Gnus

Seperti yang saya sebutkan dalam komentar saya, gnusmenggunakan surat untuk membuka lampiran. Untuk mengkonfigurasi ini, Anda perlu yang berikut ini di .mailcapfile Anda :

application/pdf; emacsclient %s

EWW

EWW juga menggunakan penyimpanan surat, jadi modifikasi .mailcapfile Anda sesuai Gnus di atas.

AucTeX

Untuk AucTeX, ada sejumlah opsi yang relevan:

  • pemirsa ditentukan melalui variabel TeX-view-program-selection: cari entri untuk output-pdfdan pilih "Alat PDF" untuk nilainya.
  • untuk menggunakan SyncTex, Anda perlu:
    • mengatur TeX-source-correlate-mode, baik secara interaktif dengan memanggil fungsi itu melalui MX, atau dengan mengatur variabel secara permanen melalui M-x customize-variable.
    • pastikan TeX-source-correlate-methodtermasuk(pdf . synctex)

Dengan ini di tempat, dari file sumber tex Anda C-c C-gakan menampilkan bagian yang sesuai dari pdf.

ESS

Ubahsuaikan variabel ess-pdf-viewer-prefmenjadi emacsclient.

xdg-buka

Di Linux, beberapa paket akan memanggil program eksternal xdg-openuntuk membuka file pdf. Ini akan menggunakan pengaturan sistem Anda untuk menentukan program mana yang akan digunakan. Ini adalah perubahan di seluruh sistem, jadi program lain akan mengirim dokumen pdf ke Emacs ketika Anda sudah mengaturnya. Jadi jika Anda tidak ingin, misalnya, Firefox, untuk melakukan ini, Anda tidak ingin melakukan perubahan ini.

Untuk mengatur emacsclient untuk membuka pdf seluruh sistem melalui xdg-open:

  • buat file ~/.local/share/applications/emacsclient.desktopdengan isinya:

[Entri Desktop]
Nama = Emacs Client
Exec = emacsclient% u
Ikon = emacs-icon
Type =
Terminal Aplikasi = false
MimeType = application / pdf;

  • dari baris perintah, terbitkan:

xdg-mime default emacsclient.desktop application/pdf

Anda dapat menguji apakah ini berhasil xdg-open your-document.pdf- harus terbuka your-document.pdfdi Emacs.

w3m

w3m pertama-tama memeriksa variabel w3m-doc-view-content-types, dan jika ia melihat "application / pdf" di sana, ia akan membuka pdf dalam tampilan dokumen. Ini adalah variabel yang dapat disesuaikan, jadi hapus entri "application / pdf" menggunakan antarmuka penyesuaian.

Tanpa entri w3m-doc-view-content-types, w3m selanjutnya memeriksa variabel w3m-content-type-alistuntuk entri yang cocok dengan "application / pdf". Kustomisasi entri untuk dibaca

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

Anda juga bisa menggunakan fungsi emacs (mungkin find-fileatau serupa), daripada panggilan eksternal untuk itu emacsclient, tapi saya tidak tahu sintaks untuk itu.

Tyler
sumber
Namun w3m dalam emacs masih menggunakan docview. Adakah saran bagaimana cara memperbaikinya?
brittAnderson
lihat jawaban yang diperbarui
Tyler
Bisakah saya menautkan dari org-modeke anotasi tertentu dalam file PDF?
AlwaysLearning
1
@ AlwaysLearning tidak saya sadari. Mode Interleave menyediakan dukungan untuk merekam anotasi dalam file mode-org yang terpisah. Saya akan memperbarui jawabannya
Tyler