Org LaTeX ひな形

目次

1 はじめに

Org-modeで記した文書を $\LuaLaTeX$ を使用してPDFに変換した時の設定メモです。 Cygwinを使った例を前提としている為、Cygwinを使用しない場合は TeXLive のインストール など、適当に読み替える必要があるかも知れません。

2 TeXLiveのインストール

2021年5月29日時点で20210325-1というバージョンがリリースされています。 日本語文字を扱うのに texlive-collection-* のパッケージのいくつかを追加でインストールする 必要があるようです。Cygwinの場合は明示的に選択してインストールする必要があります。 不要なパッケージも含まれているかも知れませんが以下のtexlive-collection-*をインストールしています。 特に texlive-collection-langchinese が入っていないとエラーしてPDF生成できないという罠に ハマりました。御参考まで。

  • texlive
  • texlive-collection-basic
  • texlive-collection-bibtexextra
  • texlive-collection-binextra
  • texlive-collection-fontsextra
  • texlive-collection-fontsrecommended
  • texlive-collection-fontutils
  • texlive-collection-formatsextra
  • texlive-collection-langchinese
  • texlive-collection-langcjk
  • texlive-collection-langjapanese
  • texlive-collection-latex
  • texlive-collection-latexextra
  • texlive-collection-latexrecommended
  • texlive-collection-luatex
  • texlive-collection-mathscience
  • texlive-collection-mathscience
  • texlive-collection-metapost
  • texlive-collection-music
  • texlive-collection-pictures
  • texlive-collection-plaingeneric
  • texlive-collection-pstricks
  • texlive-collection-publishers
  • texlive-collection-xetex

3 Emacsの設定

Org-modeはデフォルトで LaTeX を使用するようになっています。この為 Emacs自体の 設定と、Org文書の先頭部分に $\LuaLaTeX$ を使用する為にいくつか設定を行う必要があります。

以下はEmacsの設定例です。Emacs 27.2 と Org-mode 9.4.5 の組み合わせで確認しています。 .emacs(とか)に記してください。また、ImageMagick(画像処理プログラム)のconvertコマンド を使用する為、ImageMagickパッケージのインストールも必要になります。 これは $\LuaLaTeX$ で生成したdviファイルを dvipngコマンドに食わせるとdivpngがSegfaultして HTMLへのインラインlatex変換や Org-mode内のlatexプリビューが動かなかった為、 ImageMagickを使用した方法を採用しています。

多少バージョンが違っていても問題無いとは思いますが、古すぎると使用する変数名が 違っている場合があってうまく動かないかも知れません。

(require 'org)
(require 'ox-html)
(setq org-export-default-language "ja")
(setq org-src-fontify-natively t)
(setq org-preview-latex-process-alist
      '((dvipng
         :programs ("latex" "dvipng")
         :description "dvi > png"
         :message "you need to install the programs: latex and dvipng."
         :image-input-type "dvi"
         :image-output-type "png"
         :image-size-adjust (1.0 . 1.0)
         :latex-compiler ("latex -interaction nonstopmode --output-format=dvi -output-directory %o %f")
         :image-converter ("dvipng -D %D -T tight -bg Transparent -o %O %f")) ;;add -bg Transparent
        (dvisvgm
         :programs ("latex" "dvisvgm")
         :description "dvi > svg"
         :message "you need to install the programs: latex and dvisvgm."
         :image-input-type "dvi"
         :image-output-type "svg"
         :image-size-adjust (1.7 . 1.5)
         :latex-compiler ("latex -interaction nonstopmode -output-directory %o %f")
         :image-converter ("dvisvgm %f -n -b min -c %S -o %O"))
        (imagemagick
         :programs ("lualatex" "convert")
         :description "pdf > png"
         :message "you need to install the programs: latex and imagemagick."
         :image-input-type "pdf"
         :image-output-type "png"
         :image-size-adjust (4.0 . 4.0)
         :latex-compiler ("lualatex -interaction nonstopmode -output-directory %o %f")
         :image-converter
         ("convert -density %D -trim -fuzz 30%% -transparent white -scale 25%% %f -quality 100 %O"))))

(setq org-latex-create-formula-image-program'imagemagick)

(add-to-list 'org-latex-classes
             '("jarticle"
               "\\documentclass{jarticle}
[NO-PACKAGES]
[NO-DEFAULT-PACKAGES]
\\usepackage[dvipdfmx]{graphicx}"
               ("\\section{%s}"       . "\\section*{%s}")
               ("\\subsection{%s}"    . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}"     . "\\paragraph*{%s}")
               ("\\subparagraph{%s}"  . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
             '("jsarticle"
               "\\documentclass{jsarticle}
[NO-PACKAGES]
[NO-DEFAULT-PACKAGES]
\\usepackage[dvipdfmx]{graphicx}"
               ("\\section{%s}"       . "\\section*{%s}")
               ("\\subsection{%s}"    . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}"     . "\\paragraph*{%s}")
               ("\\subparagraph{%s}"  . "\\subparagraph*{%s}")))
(add-to-list 'org-latex-classes
             '("bxjsarticle"
               "\\documentclass{bxjsarticle}
[NO-PACKAGES]
[NO-DEFAULT-PACKAGES]"
               ("\\section{%s}"       . "\\section*{%s}")
               ("\\subsection{%s}"    . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}"     . "\\paragraph*{%s}")
               ("\\subparagraph{%s}"  . "\\subparagraph*{%s}")))

(setq org-latex-with-hyperref nil)
(setq org-latex-listings t)

4 Org文書内の設定

$\LuaLaTeX$ を使用する為にOrg文書内にいくつか設定記述が必要になります。 以下の設定記述をOrg文書の最初の方に記します。

#+OPTIONS: tex:imagemagick
#+LATEX_CLASS: bxjsarticle
#+LATEX_CLASS_OPTIONS: [ja=standard,lualatex,10pt,a4paper]
#+LATEX_HEADER: \usepackage{fontspec}
#+LATEX_HEADER: \usepackage{graphicx}
#+LATEX_HEADER: \usepackage{color}
#+LATEX_HEADER: \usepackage{atbegshi}
#+LATEX_HEADER: \usepackage[unicode=true,bookmarks=true]{hyperref}
#+LATEX_HEADER: \usepackage{bookmark}
#+LATEX_HEADER: \usepackage{url}
#+LATEX_HEADER: \usepackage{ulem}
#+LATEX_HEADER: \usepackage{bxtexlogo}
#+LATEX_HEADER: \usepackage{listings}
#+LATEX_HEADER: \usepackage{amsmath,amssymb}
#+LATEX_COMPILER: lualatex

少しだけ補足の説明を行います。

  • #+OPTIONS: tex:imagemagick 」はOrgのLaTeXプリビューの方法を imagemagickにします。 これは Emacsの設定 での 変数 org-preview-latex-process-alist の (imagemagick...)に 記した設定が対応するようです。dvipngコマンドがうまく動かなかったのでimagemagickを使用するように したのですが、dvipngコマンドに問題無くなればどちらでも良いかも知れません。
  • #+LATEX_CLASS: bxjsarticle 」と「 #+LATEX_CLASS_OPTIONS: [ja=standard,lualatex,10pt,a4paper] 」は TeXの「 \documentclass 」に設定されます。少しややこしいのですが、.tex変換時に直接 埋め込まれる訳ではなく、Emacsの設定での「 (add-to-list 'org-latex-classes '("bxjsarticle" ... 」 の設定を介して.texに埋め込まれるようです。この為、スタイルによっては 「 #+LATEX_CLASS:... 」をただ変えただけでは切り替わらないかも知れません。
  • #+LATEX_HEADER: .... 」群はいわゆる.texのプリアンブル部に挿入されます。 Emacsの設定 として記す事もできますが、使用するパッケージを文書毎に変える場合に いちいちEmacsの設定を変えるのは逆に面倒臭いと思ったので、ここではOrg文書内に必要なものを 記す方式を採用しています。

5 試す

実験的に少し試した例です。

5.1 画像の挿入

[実験画像]

5.2 数式

文中に $\sin^{2}\theta+\cos^{2}\theta=1$ とか埋め込む例。

\begin{equation*}
  \mbox{\Large
    $ \displaystyle V=2\pi\int_0^r y^2 dx $
  }
\end{equation*}
1

他にも色々書けると思います。

5.3

表1: tableモードの表
商品 価格
リンゴ 106 円
バナナ 108 円
メロン 1980 円
キーウィ 178 円

5.4 レイアウトの調節について

HTMLへの変換では問題無いけどlatex→PDF変換では見た目がイマイチな時がありました。 「 #+BEGIN_EXPORT latex ~ #+END_EXPORT 」を使用する事でlatex変換の時だけ 出力されるブロックを定義できます。例えば文字サイズとかHTMLでは良い感じだけど latexではイマイチといった場合の調節に使えると思います。

6 LuaLaTeXとの組み合わせでうまくいく事いかない事

2021年5月29日時点で $\LuaLaTeX$ を使用する事でうまくいった事と、うまくいっていない事を記しておきます。

  • うまくいった事
    • PDF変換した時に画像の挿入が良い感じになった。pLaTeXを使うと何故かとんでもないサイズに拡大されて 挿入されてました。原因は不明です。LuaLaTeXを使うに至ったのはこれが理由です(^^;
  • うまくいかない事
    • pLaTeXに比べて遅い。てか大分遅い。
    • HTML向けに文中にLaTeX式をインライン埋め込みする場合にうまく変換できない場合がある。 例えば「 $\LaTeX$ 」はエラーする場合があるようです。
    • #+BEGIN_SRC 言語 」でコードブロックの言語を指定した際、listingsパッケージで知らない言語として エラーする。エラーはしますが変換はできるようなので、気にしなければ問題は無いようですが....(^^; 本文書でも 「 #+BEGIN_SRC org 」がエラーしたので「 #+BEGIN_SRC C 」としています。 HTMLでコードブロックにマウスカーソルをかざした時に「C」というToolTipが表示されるのはこの為です。
    • HTMLでもlatex→PDFでも両方に良い感じに変換できない場合がある。
    • pLaTeXでも同じですが絵文字をPDFに変換できない。フォントをうまく設定すればイケるのかも知れませんが試していないので判りません。 うまく変換できるようになれば良いのになぁと思う所です。 因みに、XeLaTeXならばシステムフォントを使って絵文字もPDF変換できるようです(カラー絵文字はダメそうですが)。 本ひな形の設定を少し弄れば(具体的にはEmacs設定および Orgの #+LATEX_CLASS_OPTIONS:#+LATEX_COMPILER: に含まれる文字列 "lua" を "xe" に文字列置換する)XeLaTeXも一応イケます。

7 履歴

2021/05/30 : 初版。

著者: TANE

Emacs 27.2 (Org mode 9.4.5)