作成日 :
最終更新日: 2025-01-03 Fri 11:41
ホーム | 文書トップ | 目次

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=¥"サイトURL¥">ホーム</a> |
<a href=¥"index.html¥">文書トップ</a> | <a href=¥"sitemap.html¥">目次</a>
</div>
")))

(setq org-html-postamble "
<div align=right>
<a href=¥"サイトURL¥">ホーム</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 "サイトURL")
(setq org-html-link-home "index.html")

(setq org-html-home/up-format "
  <div align=right>
  <a accesskey=¥"" 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 29.4 (Org mode 9.6.15)