web-dev-qa-db-ja.com

EvinceでOrg-modeを開くPDFファイルを作成するにはどうすればよいですか?

Org-modeで、PDFファイルへのリンクを開こうとすると、何も起こりません。また、 C-c C-e d LaTeXとしてエクスポートし、PDFに処理して開くPDFは生成されますが、開かれません。Org-modeを開くにはどうすればよいですかPDFファイル?

私はUbuntu11.10のGNU Emacs23.3.1とEvince3.2.1でOrg-mode7.6を使用しています。

31
N.N.

このために機能する可能性のある別の可能な構成は、eval-after-loadではなくadd-hookを使用することです。起動時に一度だけ値を設定するので、エントリが追加されるかどうかを心配する必要はありません(定期的に組織をリロードしない限り)。

これをsetcdrと組み合わせると、リストから削除してから再度追加する必要がなくなり、ifを追加すると、値を確実に追加または変更できます。 ifは、デフォルトでリストにない値にのみ必要です。これは、将来のどこかで競合が発生しないようにするためです。

(eval-after-load "org"
  '(progn
     ;; .txt files aren't in the list initially, but in case that changes
     ;; in a future version of org, use if to avoid errors
     (if (assoc "\\.txt\\'" org-file-apps)
         (setcdr (assoc "\\.txt\\'" org-file-apps) "notepad.exe %s")
       (add-to-list 'org-file-apps '("\\.txt\\'" . "notepad.exe %s") t))
     ;; Change .pdf association directly within the alist
     (setcdr (assoc "\\.pdf\\'" org-file-apps) "evince %s")))

明確にするために編集する

eval-after-loadは、(require 'org)が呼び出されたときにのみブロックを評価します。組織がすでにロードされている場合は、すぐに評価されます(ライブラリがロードされるたびに実行されると誤解しましたが、これは初めてのようです)。 add-hookeval-after-loadの違いについて説明します ここ

org-file-appsdefcustomであるため、組織が読み込まれる前に設定した場合、リストを最初から作成した場合、値は変更されません(2番目の(醜い)ソリューションのデフォルト値を含む) init.elでsetqするだけで、すべてが機能します。また、変更が上書きされないことも意味します。

(if (assocをPDFエントリに追加しても、何も害はありません。PDFがデフォルトのorg-file-appsから削除された場合でも、引き続き追加されることが保証されます。 PDFが削除されても失敗しない唯一の解決策は、2番目の解決策です。他のすべての解決策は、エントリが何らかの形式で存在することを前提としています。

11
M-x customize-variable [RET] org-file-apps [RET]

組織がシステムのデフォルトを使用している場合は、。/ mailcapファイルを編集する必要があります。

この行を追加してみてください:

application/pdf; /usr/bin/evince %s
21
certainly

https://stackoverflow.com/a/3985552/78959 に似た構造を使用できますが、PDFファイルとEvinceに適合させます。やりたいことリストを変更することですorg-file-apps。これは、.emacsに以下を追加することで実行できます。

;; PDFs visited in Org-mode are opened in Evince (and not in the default choice) https://stackoverflow.com/a/8836108/789593
(add-hook 'org-mode-hook
      '(lambda ()
         (delete '("\\.pdf\\'" . default) org-file-apps)
         (add-to-list 'org-file-apps '("\\.pdf\\'" . "evince %s"))))

これにより、PDFファイルのデフォルト設定が削除され、代わりにEvinceで開きます(そしてorg-file-appsに含まれる他のすべてを保持します)。私はelispを初めて使用するため、これかどうかはわかりません。ソリューションは堅牢ですが、私にとってはうまく機能し、以下のものよりもエレガントなようです。

醜いように見える別のオプションは、代わりにデフォルト値を検索してそれらをすべて設定することですが、PDFファイルの値を変更します:

;; PDFs visited in Org-mode are opened in Evince (and other file extensions are handled according to the defaults)
(add-hook 'org-mode-hook
      '(lambda ()
         (setq org-file-apps
           '((auto-mode . emacs)
             ("\\.mm\\'" . default)
             ("\\.x?html?\\'" . default)
             ("\\.pdf\\'" . "evince %s")))))
9
N.N.