PDF görüntülerini kuruluş modunda görüntüleme


19

Not: Bu soru daha önce burada başarıyla sorulmamıştı .

Org-mode'un satır içi görüntüleri görüntüleme yeteneği, haftalık bilimsel raporlarımı yazmak için harika. Grafikler ekleyebilir, bunları verileriyle ilişkilendirebilir, sonuçlarla bağlantı kurabilir ve gerçekten org modunun gücünden yararlanabilirim.

Sahip olduğum tek sorun, grafiklerimin PDF'de olmasını tercih ederken, kuruluşun geleneksel resim formatlarını (jpeg, png, vb.) Kullanmak için resimlere ihtiyacı olması.

Satır içi pdf görüntülerini kuruluş modunda nasıl görüntüleyebilirim?

Son hedefim sadece org modunda böyle bir bağlantı yazmak:

[[file:~/Work/grap.pdf]]

Ve bir png olsaydı olduğu gibi satır içi görüntülenmesini sağlayın.

Ben sadece jpeg ya da bir şey (şu anda ne yaptığımı) her grafiğin bir kopyasını olabilir biliyorum, ama biraz hantal ve her zaman pdf grafik güncellenmesi ve beni jpeg güncellemek unutmak riski taşır.


Bir çözüm olarak bu kudreti eser: çizgisinde giderek endless/update-includessırasında eğer before-save-hooksen bir çizgi bulursanız, #+NAMEya #+CAPTIONgibi bir etiketle :convertfrompdfbirlikte bir çizgi izledi [[SOMEFILE.EXT]]sonra Imagemagick yürütmek, convertdönüştürmek için fonksiyonu SOMEFILE.pdfiçin SOMEFILE.EXT.
Kaushal Modi

@kaushalmodi evet. başka bir seçenek ise org-display-görüntülerine bağlanan bir şey olabilir.
Malabarba

Pdf-tools / poppler tabanlı bir çözüm iyi olurdu.
phils

Yanıtlar:


15

NOT : convertBu çözümün çalışması için ImageMagick'in sisteminizde ( yürütülebilir) yüklü olması gerekir .

Bu çözüm nasıl uygulanır?

  • Bu işlev org-include-img-from-pdf, PDF'den Image formatına dönüştürme işlemini kullanan iş atıdır convert.
  • Kuruluş dosyası içeriyorsa # ()convertfrompdf:t, kullanıcının bir resim dosyasına dönüştürmek istediği bir pdf dosyası olduğu varsayılacaktır. Kullanıcı yukarıdaki özel yorumu aşağıdaki örnekte gösterildiği gibi resim dosyası bağlantısının üstüne koymalıdır .
  • Görüntü dosyası türü, parantez bağlantısındaki dosya uzantısıyla belirlenir [[./myimage.EXT]].

  • Bu org-include-img-from-pdfişlev , işlevine eklenerek, before-save-hookkullanıcı dosyayı her kaydettiğinde yürütülür (Aşağıdaki işlev tanımını izleyen elisp snippet'ine bakın).

Örnek kurulum

Bu örnek kurulumda aşağıdaki dosyalar var:

  • Aşağıdaki gibi bir resim dosyası içeren bir kuruluş dosyası.
  • Pdf dosyası myimage.pdf.
# ()convertfrompdf:t
[[./myimage.png]]

PDF'yi görüntü dosyalarına otomatik olarak dönüştürme işlevi

(defun org-include-img-from-pdf (&rest _)
  "Convert pdf files to image files in org-mode bracket links.

    # ()convertfrompdf:t # This is a special comment; tells that the upcoming
                         # link points to the to-be-converted-to file.
    # If you have a foo.pdf that you need to convert to foo.png, use the
    # foo.png file name in the link.
    [[./foo.png]]
"
  (interactive)
  (if (executable-find "convert")
      (save-excursion
        (goto-char (point-min))
        (while (re-search-forward "^[ \t]*#\\s-+()convertfrompdf\\s-*:\\s-*t"
                                  nil :noerror)
          ;; Keep on going to the next line till it finds a line with bracketed
          ;; file link.
          (while (progn
                   (forward-line 1)
                   (not (looking-at org-bracket-link-regexp))))
          ;; Get the sub-group 1 match, the link, from `org-bracket-link-regexp'
          (let ((link (match-string-no-properties 1)))
            (when (stringp link)
              (let* ((imgfile (expand-file-name link))
                     (pdffile (expand-file-name
                               (concat (file-name-sans-extension imgfile)
                                       "." "pdf")))
                     (cmd (concat "convert -density 96 -quality 85 "
                                  pdffile " " imgfile)))
                (when (and (file-readable-p pdffile)
                           (file-newer-than-file-p pdffile imgfile))
                  ;; This block is executed only if pdffile is newer than
                  ;; imgfile or if imgfile does not exist.
                  (shell-command cmd)
                  (message "%s" cmd)))))))
    (user-error "`convert' executable (part of Imagemagick) is not found")))

Bu işlevin ne zaman çalıştırılacağını belirtmek için kanca kurulumu

(defun my/org-include-img-from-pdf-before-save ()
  "Execute `org-include-img-from-pdf' just before saving the file."
    (add-hook 'before-save-hook #'org-include-img-from-pdf nil :local))
(add-hook 'org-mode-hook #'my/org-include-img-from-pdf-before-save)

;; If you want to attempt to auto-convert PDF to PNG  only during exports, and not during each save.
;; (with-eval-after-load 'ox
;;   (add-hook 'org-export-before-processing-hook #'org-include-img-from-pdf))

Kod + MWE


Bu, dışa aktarılan bir dosyanın pdf yerine png'yi kullandığı anlamına mı geliyor?
gdkrmr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.