ox-bibtex.el のキーバインディング

HTMLへのエクスポート時に参照文献を出力するため, ox-bibtex.el を導入した。しかし、このファイルを (require 'ox-bibtex.el) で設定すると org-ref のキーバイドが上書きされる事象が発生した。

該当部分を抜粋すると下記のようになっている。そのため、/org-ref/ のまえに上記の設定を記述しないと org-add-link-type に~ox-bibtex.el~ の独自の関数が設定されてしまう。

;;; Follow cite: links

(defun org-bibtex-file nil "Org-mode file of bibtex entries.")

(defun org-bibtex-goto-citation (&optional citation)
  "Visit a citation given its ID."
  (interactive)
  (let ((citation (or citation
              (org-icompleting-read "Citation: "
                        (obe-citations)))))
    (find-file (or org-bibtex-file
           (error "`org-bibtex-file' has not been configured")))
    (goto-char (point-min))
    (when (re-search-forward (format "  :CUSTOM_ID: %s" citation) nil t)
      (outline-previous-visible-heading 1)
      t)))

(let ((jump-fn (car (org-remove-if-not #'fboundp '(ebib org-bibtex-goto-citation)))))
  (org-add-link-type "cite" jump-fn))

yasnippet のエスケープ

yasnippet のテンプレートの中に $1 などを書くと yasnippet の予約語と被るため期待した動作にならない。orgファイルの #+MACRO: の引数が $1 で表現されるために変な動作になった。

Writing snippets を参考に下記のように $\$ のようにバックスラッシュでエスケープすることで正常に動作する。

# key: rep2
# name: report2
# --

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) \$1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) \$1))

#+TITLE: ${1: title}
#+AUTHOR: k-sunako
#+DATE: `(let ((x (org-time-stamp '(16) t ))))`

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

org-modeのエクスポートの改善

org-modeでの記述した技術文書をpdfやhtmlにエクスポートする方法を改善したので記す。

Latex のエクスポート

下記記事を参考に koma-script でのエクスポートを設定する。

(add-to-list 'org-latex-classes
             '(
               "koma-jarticle"
               "\\documentclass[12pt]{scrartcl}
                [NO-DEFAULT-PACKAGES]
                \\usepackage{amsmath}
                \\usepackage{amssymb}
                \\usepackage{mathrsfs}
                \\usepackage{xunicode}
                \\usepackage{fixltx2e}
                \\usepackage{zxjatype}
                \\usepackage[ipa]{zxjafont}
                \\usepackage{xltxtra}
                \\usepackage{graphicx}
                \\usepackage{longtable}
                \\usepackage{float}
                \\usepackage{wrapfig}
                \\usepackage{soul}
                \\usepackage[xetex]{hyperref}
                \\usepackage{xcolor}
                \\usepackage{minted}
                \\usepackage{geometry}
                \\geometry{left=1cm,right=1cm,top=1cm,bottom=1cm}
                \\usepackage[natbib=true]{biblatex} 
                \\DeclareFieldFormat{apacase}{#1} 
                \\addbibresource{~/myspace/Bibliography/references.bib}"
               ("\\section{%s}" . "\\section*{%s}")
               ("\\subsection{%s}" . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}" . "\\paragraph*{%s}")
               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

参考文献の扱い

参考文献は ~/myspace/Bibliography/references.bib に記載されている。引用は cite:total2009daisy のような形式で org ファイル内で記述される。参考文献一覧を出力するために下記のセクションを設ける。

* 参考文献
  #+LaTeX: \printbibliography[heading=none]  
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

又、htmlへの参考文献の出力には bibtex2html というツールが必要となる。emacsにも追加で ox-bibtex の設定も必要となる。 ox-bibtex は標準のパッケージではないため下記のように追加でパッケージのインストールが必要となる。

(use-package org-contrib
  :after org
  :ensure t
  :confit
  (require 'ox-bibtex))

レポートのスニペット

org ファイルでレポートを作成する際には下記のような構成で書き始める。

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) $1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) $1))

#+TITLE:  title
#+AUTHOR: k-sunako
#+DATE: [2021-07-11 日 12:18]

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}

上記の構成をスニペットで簡単にファイルに書き込めるようにした。 (yasnippetを使用)

# key: rep2
# name: report2
# --

#+LaTeX_CLASS: koma-jarticle

#+STARTUP:  overview
#+STARTUP:  hidestars
#+OPTIONS:  H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+LINK_UP:
#+LINK_HOME:
#+MACRO: if-html (eval (if (org-export-derived-backend-p org-export-current-backend 'html) \$1))
#+MACRO: if-latex (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) \$1))

#+TITLE: ${1: title}
#+AUTHOR: k-sunako
#+DATE: `(let ((x (org-time-stamp '(16) t ))))`

{{{if-latex(\vspace*{-1.5cm})}}}

* 概要
  blabla

* 参考文献
  #+LaTeX: \printbibliography[heading=none]
  {{{if-html(bibliography:~/myspace/Bibliography/references.bib)}}}