1 #+TITLE: Publishing Org-mode files to HTML
2 #+AUTHOR: Sebastian Rose
3 #+EMAIL: sebastian_rose gmx de
4 #+OPTIONS: H:3 num:nil toc:t \n:nil ::t |:t ^:t -:t f:t *:t tex:t d:(HIDE) tags:not-in-toc
5 #+STARTUP: align fold nodlcheck hidestars oddeven lognotestate
6 #+SEQ_TODO: TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
7 #+TAGS: Write(w) Update(u) Fix(f) Check(c)
10 #+CATEGORY: worg-tutorial
12 # This file is released by its authors and contributors under the GNU
13 # Free Documentation license v1.3 or later, code examples are released
14 # under the GNU General Public License v3 or later.
16 [[file:../index.org][{Back to Worg's index}]]
20 This Tutorial describes one of many ways to publishing Org-mode files to
21 XHTML. We use the publishing mechanism to keep the =*.html= files separated
22 from our =*.org= files and to access them via web browser. Simply exporting the
23 Org-mode files to HTML would leave them in =~/org/=.
25 The XHTML files we create will work every where, on any host, with or without
26 network access, and even when accessed through the =file:///= protocol. To
27 achieve this goal, we use
29 - no absolute paths in HTML,
30 - no server side scripting to navigate our output directories,
31 - no =base= element (which is optional as of XHTML 1.0 strict) and
32 - no software, but emacs, Org-mode and a web browser.
34 All this means, we are able to check and use the result of work immediately,
39 Throughout this tutorial, let's assume that all our Org-mode files live beneath
40 =~/org/= and we publish them to =~/public_html/=.
42 Let's further assume you're already familiar with the note taking basics in
43 org and able to add a little content to the Org-mode files we add to our project
44 during this tutorial. Please add at least one headline to each of the files.
46 The first thing to do is to create the folder =~/org=. This is where our notes
47 files live. Inside =~/org/= we have a folder =css/= for stylesheets and
48 scripts, and a folder called =img/= (guess what's in there).
50 The first file we add to that folder (and to subdirectories later on) is called
51 =index.org=. This name was choosen, since Org will publish the files to those
52 with the basename of the source file plus the extension =.html= [fn:1]. Thus
53 =~/org/index.org= will once be =~/public_html/index.html= -- the startpage.
55 Let's add another file and call it =~/org/remember.org=. After adding a
56 stylesheet, =~/org/= looks like this:
65 When ever you want to add link to a file, do it the usual way. To link from
66 =index.org= to =remember.org=, just write
67 : [[file:remember.org][remember]]
68 Org will convert those links to HTML links for you on export:
69 : <a href="./remember.html">remember</a>
71 Same is true for images. To add an image, put it in =~/org/img/test.jpg= and
73 : [[file:img/test.jpg]]
75 You may test your links by clicking on them. To test image links you may also
76 try to turn on =iimage-mode= [fn:2] which works without problems here.
78 Optionally, set up the stylesheet as shown in section Special comment
79 section. The recommended way is to use a real stylesheet though.
81 * Publishing the /org/ project
83 To publish the =~/org/= project to HTML, we'll have to setup the variable
84 =org-publish-project-alist= [fn:3]. I tend to split each project in three basic
85 /components/ as described in the manual. We need these different components,
86 since we want org to use two different functions to publish dynamic content
87 (org => html) and static content like scripts, images, stylesheets or even
88 .htaccess files (org => copy). The third component is just for convenience and
89 tells org to execute the former ones.
91 =org-publish-project-alist= may be adjusted using customize (=M-x
92 customize-variable RET org-publish-project-alist RET=), but I prefere to
93 use an extra file to setup my projects, since there are quite a few. To follow
94 this tutorial use the =*scratch*= buffer and put all the Lisp in this section
97 First of all, enter this into the =*scratch*= buffer:
99 #+begin_src emacs-lisp
100 (require 'ox-publish)
101 (setq org-publish-project-alist
104 ;; ... add all the components here (see below)...
109 Be sure to put all the /components/ below right there where the comment line
112 ** The /notes/ component
114 The /notes/ component publishes all the Org-mode files to HTML. Hence the
115 =publishing-function= is set to =org-publish-org-to-html=. Here is an example
116 of the notes component:
118 #+begin_src emacs-lisp
120 :base-directory "~/org/"
121 :base-extension "org"
122 :publishing-directory "~/public_html/"
124 :publishing-function org-html-publish-to-html
125 :headline-levels 4 ; Just the default for this project.
130 Note, that =headline-levels= may be adjusted [[Overwrite the defaults][on a per file basis]] to overwrite
133 The most important settings here are:
135 | =base-directory= | The components root directory. |
136 | =base-extension= | Filename suffix without the dot. |
137 | =publishing-directory= | The base directory where all our files will be published. |
138 | =recursive= | If =t=, include subdirectories - we want that. Subdirectories in =:publishing-directory= are created if they don't yet exist. |
139 | =publishing-function= | If and how org should process the files in this component. In this case: convert the Org-mode files to HTML. |
141 ** The /static/ component
143 The /static/ component just copies files (and their folders) from
144 =:base-directory= to =:publishing-directory= without changing them. Thus
145 let's tell Org-mode to use the function =org-publish-attachment=:
147 #+begin_src emacs-lisp
149 :base-directory "~/org/"
150 :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
151 :publishing-directory "~/public_html/"
153 :publishing-function org-publish-attachment
157 *Note* that =:publishing-function= is set to =org-publish-attachment=.
159 ** The /publish/ component
161 To publish all with one command, we add the /publish/ component. For this
162 component I usually drop the suffix and just use the basename of the
165 #+begin_src emacs-lisp
166 ("org" :components ("org-notes" "org-static"))
169 Now =M-x org-publish-project RET org RET= publishes everything
170 recursively to =~/public_html/=. Target directories are created, if they
173 ** Pooh - can we publish now?
175 The good message is *yes, we can*. Just one little hump. Since we've put the
176 definition for our publishing components in the =*scratch*= buffer, again,
177 make sure all the /components/ are enclosed by the lines
179 #+begin_src emacs-lisp
180 (require 'ox-publish)
181 (setq org-publish-project-alist
184 ;; ... all the components ...
189 Move to the end of the first line and press =C-x C-e= to load
190 =org-publish=. Now go to the end of the last line and press =C-x C-e=
191 again. Repeat the last step after every change to your
192 =org-publish-project-alist=.
194 To publish your Org-mode files just type
195 =M-x org-publish-project RET org RET= or use one of the shortcuts listed in
196 the manual. If nothing went wrong, you should now be able to point your
197 browser to http://localhost/~user/, if =mod_userdir= is set up. If
198 not, simply navigate to file:///home/user/public_html (you might use
199 /file -> open/ from the file menu of your browser.
203 As we add more and more files to =~/org/=, we will soon end up with filenames
204 like '=networking-ssh-sshd-config.org=' or longer. What we need is a
209 : | `- stylesheet.css
221 in the /notes/ and /static/ components already, we would have to do it now at
222 the latest to export the subdirectories too.
224 * Overwrite the defaults
226 The defaults set by =org-publish-project-alist= may be overwritten. You might
227 want to justify the export properties for single files. Be it the level of
228 headlines, include extry scripts or different stylesheets. Org offers ways to adjust
229 the settings for a single file.
231 ** The export options template
233 The first choice is the /export options template/ on top of the file. When in
234 an Org-mode file, you may insert basic information using =C-c C-e #=
235 (=org-export-dispatch=) plus "template". You will be prompted for a template
236 choice. "default" will provide a template for common options, and "html"
237 will provide a template for HTML-specific options.
239 WARNING: Do *not* copy lines from the sample output below into your
240 files. The template might change from release to release. Instead,
241 insert a template as above and delete any entries that are not
244 The default option inserts the following lines:
246 : #+TITLE: filename with the extension omitted
247 : #+DATE: <2013-06-04 Tue>
248 : #+AUTHOR: Your name
249 : #+EMAIL: Your email address
250 : #+OPTIONS: ':t *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline author:t c:nil
251 : #+OPTIONS: creator:comment d:(not LOGBOOK) date:t e:t email:nil f:t inline:t
252 : #+OPTIONS: num:t p:nil pri:nil stat:t tags:t tasks:t tex:t timestamp:t toc:t
253 : #+OPTIONS: todo:t |:t
254 : #+CREATOR: Emacs 24.3.50.3 (Org mode 8.0.3)
256 : #+EXCLUDE_TAGS: noexport
259 : #+SELECT_TAGS: export
261 and the html option will add the following:
263 : #+OPTIONS: html-postamble:auto html-preamble:t tex:t
264 : #+CREATOR: <a href="http://www.gnu.org/software/emacs/">Emacs</a> 24.3.50.3 (<a href="https://orgmode.org">Org</a> mode 8.0.3)
265 : #+HTML_CONTAINER: div
266 : #+HTML_DOCTYPE: xhtml-strict
269 : #+HTML_HTML5_FANCY:
270 : #+HTML_INCLUDE_SCRIPTS:
271 : #+HTML_INCLUDE_STYLE:
277 All we have to do now is to alter the options to match our needs. All the
278 options are listed in the wonderful Org-mode manual. Note though, that these
279 options are only parsed on startup (i.e., when you first open the file). To
280 explicitly apply your new options move on any of those lines and press =C-c=
283 ** <<<Special comment section>>>
285 Also, CSS style variables may be using a special section may be
286 #insert/appended to Org-mode files:
288 : * COMMENT html style specifications
291 : # org-html-head: "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/stylesheet.css\" />"
294 =css/stylesheet.css= suits the needs for a file in the root folder. Use \\
295 =../css/stylesheet.css= in a subfolder (first level), \\
296 =../../css/stylesheet.css= for a file in a sub-sub-folder.
298 * Tired of export templates?
300 If you're like me, you will soon get tired of adding the same export options
301 template to numerous files and adjust the title and paths in it. Luckily,
302 Org-mode supports laziness and offers an additional way to set up files. All
303 we need is a directory (e.g. =~/.emacs.d/org-templates/=) and create the
304 following files there:
307 This file contains all export options lines. The special comment section
308 will not work for files in subdirectories. Hence we always use the export
310 :#+STYLE: <link rel="stylesheet" type="text/css" href="stylesheet.css" />
311 ...suitable for each file in the projects root folder
312 (=~/org/= or =~/B/= in the examples). Just drop the =#+TITLE= since this
313 will be different for every file and automatically set on export (based on
314 the filename if omitted).
316 This file contains all export options lines for the stylesheet suitable for
317 each file in a subfolder of the projects root folder (e.g. =~/org/emacs/=
318 or =~/org/networking/=). Just drop the =#+TITLE= again. The options line
319 for the stylesheet looks like this:
320 :#+STYLE: <link rel="stylesheet" type="text/css" href="../stylesheet.css" />
322 + Add more files for more levels.
324 Now remove the special comment section from the end of your Org-mode files in
325 the project folders and change the export options template to
327 : #+SETUPFILE: ~/.emacs.d/org-templates/level-N.org
330 Replace =N= with distance to the root folder (=0=, =1= etc.) of your project
331 and press =C-c= twice while still on this line to apply the
332 changes. Subsequent lines still overwrite the settings for just this one file.
337 Also, these /level-N/ files give us the chance to easily switch between different
338 export setups. As an example, we could have a separate stylesheet and
339 =org-info.js= setup for presentations, and put the appropriate options in a
340 file named =level-0-slides.org=:
342 : #+INFOJS_OPT: path:org-info.js
343 : #+INFOJS_OPT: toc:nil view:slide
344 : #+STYLE: <link rel="stylesheet" type="text/css" href="slides.css" />
346 Now it's as simple as typing '/-slides/' to change the appearance of any file
351 As we get used to note taking in org, we might add an =org= directory to most
352 of our projects. All those projects are published as well. Project '=~/B/='
353 is published to '=~/public_html/B/=', '=~/C/=' is published to
354 '=~/public_html/C/=', and so on. This leads to the problem of common
355 stylesheets and current JavaScripts --- and to a new /component/.
357 ** The /inherit/ component
359 Once we get tired of copying the static files from one project to another, the
360 following configuration does the trick for us. We simply add the /inherit/
361 component, that imports all the static files from our =~/org/= directory [fn:4].
362 From now on, it will be sufficient to edit stylesheets and scripts just
365 #+begin_src emacs-lisp
367 :base-directory "~/org/"
369 :base-extension "css\\|js"
370 :publishing-directory "~/public_html/B/"
371 :publishing-function org-publish-attachment
375 :base-directory "~/B/"
377 :index-filename "sitemap.org"
378 :index-title "Sitemap"
380 :base-extension "org"
381 :publishing-directory "~/public_html/B/"
382 :publishing-function org-publish-org-to-html
387 :base-directory "~/B/"
389 :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
390 :publishing-directory "~/public_html/B/"
391 :publishing-function org-publish-attachment)
393 ("B" :components ("B-inherit" "B-notes" "B-static"))
396 *Note*, that the inheritance trick works for non org directories. You might
397 want to keep all your stylesheets and scripts in a single place, or even add
398 more /inheritance/ to your projects, to import sources from upstream.
400 *Note* also, that =B-inherit= exports directly to the web. If you want to track
401 the changes to =~org/*.css= directly in =~/B=, you must ensure, that =B-inherit= is
402 the first component in =B= since the components in =B= are executed in
403 the sequence listed: first get the new stylesheet into =B=, then execute
408 As I use [[file:../code/org-info-js/index.org][org-info.js]] and track Worg git, I use "=inherit-org-info-js=" in all
411 #+begin_src emacs-lisp
412 ("inherit-org-info-js"
413 :base-directory "~/develop/org/Worg/code/org-info-js/"
416 :publishing-directory "~/org/"
417 :publishing-function org-publish-attachment)
419 ;; ... all the rest ... ;;
421 ("B" :components ("inherit-org-info-js" "B-inherit" "B-notes" "B-static"))
422 ("C" :components ("inherit-org-info-js" "C-inherit" "C-notes" "C-static"))
423 ("D" :components ("inherit-org-info-js" "D-inherit" "D-notes" "D-static"))
424 ("E" :components ("inherit-org-info-js" "E-inherit" "E-notes" "E-static"))
427 ...means, =B= =C= =D= and =E= use my local stylesheets and always the latest
428 version of =org-info.js=.
432 Once there are lots of files and subdirectories, we're in the need of ways to
433 easily navigate our notes in a browser. What we need now, is an index, an
434 overview of all our note files.
438 Org-modes great publishing also generates a recursive sitemap. Its name
439 defaults to =sitemap.org=, which get's in our way, since we have a real
440 startpage as =sitemap.html= [fn:5]. Fortunately there is a configuration
441 option to change the name of the generated sitemap. To generate the sitemap,
442 add these lines to the /notes/ component:
444 #+begin_src emacs-lisp
445 :auto-sitemap t ; Generate sitemap.org automagically...
446 :sitemap-filename "sitemap.org" ; ... call it sitemap.org (it's the default)...
447 :sitemap-title "Sitemap" ; ... with title 'Sitemap'.
450 The sitemap will reflect the tree structure of the project. To access the
451 sitemap easily, we could do two things:
453 1. Setup the '/UP/' link of the Startpage to link to =sitemap.html= (see next
455 2. use the '=#+INCLUDE: sitemap.org=' directive. Most of my Org-mode files
456 contain a chapter called "/Links/" at the end of the file, which contains
457 a subsection /Sitemap/ that in turn just consists of that
458 diretive. For the =index.org= files in the root directory, I include the
459 sitemap as the first section.
461 You can also change the position of folders with =:sitemap-sort-folders=,
462 this can be set to =last= or =first= (default), to display folders last or
467 Another way to get additional links to navigate the structure is
468 [[file:../code/org-info-js/index.org][org-info.js]]. Let's set it up like this (either in every file, or in
469 =org-level-N.org=, where =N > 0=):
471 : #+HTML_LINK_UP: index.html
473 This makes the little /UP/ link ('=h=') point to the =index.html= in the
476 The =index.org= in the root of the project has the /index file/ as section 2
477 (which I may reach pressing '=n=' then), and the same option set like this:
479 : #+HTML_LINK_UP: sitemap.html
481 For an =index.org= in a subdirectory:
483 : #+HTML_LINK_UP: ../index.html
485 The =HTML_LINK_HOME= always points to the same file:
487 : #+HTML_LINK_HOME: http://localhost/~user/index.html
489 Please consider replacing the last one with a relative path (which will be
490 different for every level of subdirectories).
492 No matter where we are, we may always press =H n= and we face the sitemap.
493 No matter where we are, we may always press =h= to move up the tree.
497 This is a list of LaTeX symbols understood by Org-mode. You may use most of
498 those LaTeX symbols to get the desired results (shown in the first column)
499 when exporting to HTML. Note though, that not all symbols are translated to
500 HTML. They are listed anyway, since they may be used for LaTeX export
501 nonetheless. Some characters in the first column are invisible (spaces). To
502 see them, mark the part of the table using the mouse.
504 You may produce special HTML characters for verbatim =#+BEGIN\_HTML= sections
505 using http://www-atm.physics.ox.ac.uk/user/iwi/charmap.html (download link on
506 the bottom of that page).
510 |---------+---------|
512 | \iexcl | ~\iexcl~ |
514 | \pound | ~\pound~ |
515 | \curren | ~\curren~ |
517 | \brvbar | ~\brvbar~ |
523 | \laquo | ~\laquo~ |
529 | \plusmn | ~\plusmn~ |
533 | \acute | ~\acute~ |
534 | \micro | ~\micro~ |
536 | \middot | ~\middot~ |
539 | \cedil | ~\cedil~ |
541 | \raquo | ~\raquo~ |
542 | \frac14 | ~\frac14~ |
543 | \frac12 | ~\frac12~ |
544 | \frac34 | ~\frac34~ |
545 | \iquest | ~\iquest~ |
546 | \Agrave | ~\Agrave~ |
547 | \Aacute | ~\Aacute~ |
548 | \Acirc | ~\Acirc~ |
549 | \Atilde | ~\Atilde~ |
551 | \Aring | ~\Aring~ ~\AA~ |
552 | \AElig | ~\AElig~ |
553 | \Ccedil | ~\Ccedil~ |
554 | \Egrave | ~\Egrave~ |
555 | \Eacute | ~\Eacute~ |
556 | \Ecirc | ~\Ecirc~ |
558 | \Igrave | ~\Igrave~ |
559 | \Iacute | ~\Iacute~ |
560 | \Icirc | ~\Icirc~ |
563 | \Ntilde | ~\Ntilde~ |
564 | \Ograve | ~\Ograve~ |
565 | \Oacute | ~\Oacute~ |
566 | \Ocirc | ~\Ocirc~ |
567 | \Otilde | ~\Otilde~ |
569 | \times | ~\times~ |
570 | \Oslash | ~\Oslash~ |
571 | \Ugrave | ~\Ugrave~ |
572 | \Uacute | ~\Uacute~ |
573 | \Ucirc | ~\Ucirc~ |
575 | \Yacute | ~\Yacute~ |
576 | \THORN | ~\THORN~ |
577 | \szlig | ~\szlig~ |
578 | \agrave | ~\agrave~ |
579 | \aacute | ~\aacute~ |
580 | \acirc | ~\acirc~ |
581 | \atilde | ~\atilde~ |
583 | \aring | ~\aring~ |
584 | \aelig | ~\aelig~ |
585 | \ccedil | ~\ccedil~ |
586 | \egrave | ~\egrave~ |
587 | \eacute | ~\eacute~ |
588 | \ecirc | ~\ecirc~ |
590 | \igrave | ~\igrave~ |
591 | \iacute | ~\iacute~ |
592 | \icirc | ~\icirc~ |
595 | \ntilde | ~\ntilde~ |
596 | \ograve | ~\ograve~ |
597 | \oacute | ~\oacute~ |
598 | \ocirc | ~\ocirc~ |
599 | \otilde | ~\otilde~ |
601 | \oslash | ~\oslash~ |
602 | \ugrave | ~\ugrave~ |
603 | \uacute | ~\uacute~ |
604 | \ucirc | ~\ucirc~ |
606 | \yacute | ~\yacute~ |
607 | \thorn | ~\thorn~ |
610 | \Alpha | ~\Alpha~ |
612 | \Gamma | ~\Gamma~ |
613 | \Delta | ~\Delta~ |
614 | \Epsilon | ~\Epsilon~ |
617 | \Theta | ~\Theta~ |
619 | \Kappa | ~\Kappa~ |
620 | \Lambda | ~\Lambda~ |
624 | \Omicron | ~\Omicron~ |
627 | \Sigma | ~\Sigma~ |
629 | \Upsilon | ~\Upsilon~ |
633 | \Omega | ~\Omega~ |
634 | \alpha | ~\alpha~ |
636 | \gamma | ~\gamma~ |
637 | \delta | ~\delta~ |
638 | \epsilon | ~\epsilon~ |
639 | \varepsilon | ~\varepsilon~ |
642 | \theta | ~\theta~ |
644 | \kappa | ~\kappa~ |
645 | \lambda | ~\lambda~ |
649 | \omicron | ~\omicron~ |
652 | \sigmaf | ~\sigmaf~ ~\varsigma~ |
653 | \sigma | ~\sigma~ |
655 | \upsilon | ~\upsilon~ |
659 | \omega | ~\omega~ |
660 | \thetasym | ~\thetasym~ ~\vartheta~ |
661 | \upsih | ~\upsih~ |
663 | \bull | ~\bull~ ~\bullet~ |
664 | \hellip | ~\hellip~ ~\dots~ |
665 | \prime | ~\prime~ |
666 | \Prime | ~\Prime~ |
667 | \oline | ~\oline~ |
668 | \frasl | ~\frasl~ |
669 | \weierp | ~\weierp~ |
670 | \image | ~\image~ |
672 | \trade | ~\trade~ |
673 | \alefsym | ~\alefsym~ |
679 | \crarr | ~\crarr~ |
685 | \forall | ~\forall~ |
687 | \exist | ~\exist~ |
688 | \empty | ~\empty~ |
689 | \nabla | ~\nabla~ |
691 | \notin | ~\notin~ |
695 | \minus | ~\minus~ |
696 | \lowast | ~\lowast~ |
697 | \radic | ~\radic~ |
699 | \infin | ~\infin~ |
704 | \there4 | ~\there4~ |
707 | \asymp | ~\asymp~ |
709 | \equiv | ~\equiv~ |
717 | \oplus | ~\oplus~ |
718 | \otimes | ~\otimes~ |
721 | \lceil | ~\lceil~ |
722 | \rceil | ~\rceil~ |
723 | \lfloor | ~\lfloor~ |
724 | \rfloor | ~\rfloor~ |
728 | \spades | ~\spades~ |
729 | \clubs | ~\clubs~ |
730 | \hearts | ~\hearts~ |
731 | \diams | ~\diams~ |
732 | \smile | ~\smile~ |
737 | \OElig | ~\OElig~ |
738 | \oelig | ~\oelig~ |
739 | \Scaron | ~\Scaron~ |
740 | \scaron | ~\scaron~ |
743 | \tilde | ~\tilde~ |
746 | \thinsp | ~\thinsp~ |
751 | \ndash | ~\ndash~ |
752 | \mdash | ~\mdash~ |
753 | \lsquo | ~\lsquo~ |
754 | \rsquo | ~\rsquo~ |
755 | \sbquo | ~\sbquo~ |
756 | \ldquo | ~\ldquo~ |
757 | \rdquo | ~\rdquo~ |
758 | \bdquo | ~\bdquo~ |
759 | \dagger | ~\dagger~ |
760 | \Dagger | ~\Dagger~ |
761 | \permil | ~\permil~ |
762 | \lsaquo | ~\lsaquo~ |
763 | \rsaquo | ~\rsaquo~ |
765 | \arccos | ~\arccos~ |
766 | \arcsin | ~\arcsin~ |
767 | \arctan | ~\arctan~ |
784 | \liminf | ~\liminf~ |
785 | \limsup | ~\limsup~ |
799 For more information you might want to read the great [[https://orgmode.org/manual/][Org-mode manual]]. One of
800 the nicest mailing lists on this planet, BTW, is [[http://lists.gnu.org/archive/html/emacs-orgmode/][emacs-orgmode (archive)]]
801 where you might as well find answers to your questions.
810 [fn:1] You may customize the file suffix for exported files like this:
811 =M-x customize RET org-html-extension=.
813 [fn:2] ...by typing =M-x iimage-mode RET=. iimage-mode even shows *.svg images, if
814 =librsvg= was present on compile time. FIXME: is this true for emacs22 ?
816 [fn:3] All components of =org-publish-projects-alist= are documented in the [[https://orgmode.org/manual/Project-alist.html#Project-alist][Org Mode
819 [fn:4] Files may be copied from arbitrary src directories to any target directory
822 [fn:5] This is primarily because of the behaviour of servers. When we navigate
823 to https://orgmode.org/worg/ we will face the =index.html= if present.