最終更新日: 2021-10-26 火 16:17
ホーム | 文書トップ | 目次

Org-mode htmlエクスポート

Table of Contents

概要

Org-mode の htmlエクスポート機能について

設定

.emacs

(when (locate-library "org")
  (setq org-export-html-coding-system 'utf-8)
  (setq org-html-coding-system 'japanese-shift-jis)
  (setq org-export-default-language 'ja)
  (setq org-publish-project-alist
        '(
          ("doc"
           :base-directory "orgファイルを置くディレクトリ"
           :base-extension "org"
           :publishing-directory "HTML出力先のディレクトリ"
           :publishing-function org-html-publish-to-html
           :auto-sitemap t                ; Generate sitemap.org automagically...
           :sitemap-filename "sitemap.org"  ; ... call it sitemap.org (it's the default)...
           :sitemap-title "Sitemap"         ; ... with title 'Sitemap'.
           :recursive t)
          ))

  (setq org-html-head-include-default-style nil)
  (setq org-html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"../conf/default.css\" />")
  (setq org-html-head-include-scripts nil)
  (setq org-startup-folded nil)
  (setq org-html-validation-link "")

  (setq org-export-with-sub-superscripts '{})
  (setq org-export-with-section-numbers nil)

  (setq org-html-preamble-format '(("en" "
<div align=right>
最終更新日: %C
</div>

<div align=right>
<a href=\"http://cha.la.coocan.jp/\">ホーム</a> |
<a href=\"index.html\">文書トップ</a> | <a href=\"sitemap.html\">目次</a>
</div>
")))

(setq org-html-postamble "
<div align=right>
<a href=\"http://cha.la.coocan.jp/\">ホーム</a> |
<a href=\"index.html\">文書トップ</a> | <a href=\"sitemap.html\">目次</a>
</div>

<div align=right>
Created by %c
</div>

")

(define-key global-map "\C-c\C-xl" 'org-toggle-link-display)

  )

ちなみに、上記もorg-modeとの連携機能によって色付けして表示されている。 (packageで htmlize のインストールが必要)

使い方

更新がされていなくても強制的にpublishする

org-publish-use-timestamps-flag を nil にする。

以前はpublishするときに、選べたのだが・・・

TIPS

Org-modeで保存後自動でpublishする

むむ。これは非常に便利。after-save-hook に add-hook するのは躊躇するところもあるが。

(when (locate-library "org")
・
・
・
  (defun auto-export-my-blog ()
    (let* ((project-plist (cdr (assoc "doc" org-publish-project-alist)))
           (project-dir (expand-file-name
                         (plist-get project-plist :base-directory))))
      (save-excursion
        (if (string= project-dir (file-name-directory buffer-file-name))
            (org-publish-current-file)))))

  (add-hook 'after-save-hook
            'auto-export-my-blog)
・
・
・
)

c-mode で変換が失敗する場合の対応

(when (locate-library "org")
・
・
・
  (add-hook 'org-mode-hook
            (lambda ()
              (setq hide-ifdef-initially nil)
              ))
・
・
・

)

よくわかっていなかったときの話

HTML Export html-preamble

share/emacs/24.5/lisp/org/ox-html.el.gz を読みながら、当初は、下記のように preamble のカスタマイズをしていた。

(setq org-html-preamble-format '(("en" "")))

(setq org-html-link-up "http://cha.la.coocan.jp/")
(setq org-html-link-home "index.html")

(setq org-html-home/up-format "
  <div align=right>
  <a accesskey=\"H\" href=\"%s\">ホーム</a> |
  <a href=\"index.html\">文書トップ</a> | <a href=\"sitemap.html\">目次</a>
  </div>
")

非常にまどろしかったのであるが、よく読んでみると、

org-html-preamble が、"Non-nil means insert a preamble in HTML export."であり、

When t, insert a string as defined by the formatting string in
`org-html-preamble-format'.  When set to a string, use this
formatting string instead (see `org-html-postamble-format' for an
example of such a formatting string).

org-html-preamble-format に文字列を設定すればよさそうだ。

The second element of each list is a format string to format the
preamble itself.  This format string can contain these elements:

とある。

org-html-preamble-format の第2要素に設定すればよいらしい。 また、第2要素では、下記の書式が使用可能である。

%t stands for the title.
%a stands for the author's name.
%e stands for the author's email.
%d stands for the date.
%c will be replaced by `org-html-creator-string'.
%v will be replaced by `org-html-validation-link'.
%T will be replaced by the export time.
%C will be replaced by the last modification time.
ホーム | 文書トップ | 目次
Created by Emacs 27.1 (Org mode 9.3)