2013-02-04 3 views
5

Ich brauche verabsolutiert Bild-URL in HTML in Emacs org-mode-Datei zu exportieren:how to org mode image absoluter Pfad des Exports html?

wenn ich schreibe den folgenden Code:

[[file:/images/a.jgp]] 

Export von HTML-Code ist:

<img src="file:///images/a.jpg" > 

aber Was ich brauche ist:

<img src="/images/a.jgp"> 

also wie kann ich exportieren, was ich will ed, statt #+BEGIN_HTML tag verwenden?

ps: mein Emacs-config:

16 ;; org-mode project define 
17 (setq org-publish-project-alist 
18  '(
19   ("org-blog-content" 
20   ;; Path to your org files. 
21   :base-directory "~/ChinaXing.org/org/" 
22   :base-extension "org" 
23 
24   ;; Path to your jekyll project. 
25   :publishing-directory "~/ChinaXing.org/jekyll/" 
26   :recursive t 
27   :publishing-function org-publish-org-to-html 
28   :headline-levels 4 
29   :html-extension "html" 
30   :table-of-contents t 
31   :body-only t ;; Only export section between <body></body> 
32   ) 
33 
34   ("org-blog-static" 
35   :base-directory "~/ChinaXing.org/org/" 
36   :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf\\|php\\|svg" 
37   :publishing-directory "~/ChinaXing.org/jekyll/" 
38   :recursive t 
39   :publishing-function org-publish-attachment) 
40   ("blog" :components ("org-blog-content" "org-blog-static")) 
41  )) 

Antwort

9

Die Art und Weise, dies zu tun, ist eine neue Art von Verbindung in org-Modus zu registrieren, org-add-link-type verwenden. Damit können Sie ein benutzerdefiniertes Exportformat angeben.

org-add-link-type erfordert ein Präfix, ein "Was passiert, wenn Sie auf den Link klicken?" Funktion und eine Exportfunktion.

Ich verwende ein Präfix img, so dass meine Links wie [[img:logo.png][Logo]] aussehen. Meine Bilddateien befinden sich in ../images/ (relativ zu den .org-Dateien), und vom Webserver werden sie in /images/ angezeigt. Also für diese Einstellungen, in .emacs diese Umsetzung bietet die Lösung:

(defun org-custom-link-img-follow (path) 
    (org-open-file-with-emacs 
    (format "../images/%s" path))) 

(defun org-custom-link-img-export (path desc format) 
    (cond 
    ((eq format 'html) 
    (format "<img src=\"/images/%s\" alt=\"%s\"/>" path desc)))) 

(org-add-link-type "img" 'org-custom-link-img-follow 'org-custom-link-img-export) 

Sie werden wahrscheinlich müssen die Pfade für das Setup ändern, aber das ist das Rezept. Wie Sie erwarten würden, C-hforg-add-link-type werden Sie die vollen blutigen Details geben.

Oh, und was es wert ist, hier ist der Code, den ich für Inter-Post-Links verwende (wie [[post:otherfile.org][Other File]]). Es gibt ein wenig Jekyll Magie im Ausgabeformat, also schau dir die Double-% s an.

(defun org-custom-link-post-follow (path) 
    (org-open-file-with-emacs path)) 

(defun org-custom-link-post-export (path desc format) 
    (cond 
    ((eq format 'html) 
    (format "<a href=\"{%% post_url %s %%}\">%s</a>" path desc)))) 

(org-add-link-type "post" 'org-custom-link-post-follow 'org-custom-link-post-export) 
+0

Ich möchte iimage-Modus verwenden, diese Methode wird es nicht unterstützen? wie man ? – Chinaxing

+0

Das ist ausgezeichnet, danke. Weißt du, wie ich emacs zu Inline-Bildern mit dem 'img:' Linktyp mit 'org-redisplay-inline-images' bringen kann? –

+0

Ein Hinweis: Org-Modus v 9. meldet den org-add-link-type als veraltet (obwohl der Export immer noch funktioniert und generiert die erforderliche img src = "/ etc/anImg.png"). Eine E-Mail an die [org mailing list] (http://lists.gnu.org/archive/html/emacs-orgmode/2017-04/msg00188.html), schlug eine Lösung für org-mode Version 9 vor: (org-link-set-parameter "img" : Folge 'org-custom-link-img-follow : Export' org-custom-link-img-export) – mzimmermann