LuaTaTeXでギリシア文字のボールド体を出力する

経緯

普段はLuaLaTeXで講義資料を作成しています。フォントとして TeX Gyre Termis などを好んで使用しています。

texlive2015のパッケージのアップデートをしていたらいつの間にかギリシア文字のボールド体が出力されないようになっていました。解決したのでその時のメモを残しておきます。ただし、otfフォントを指定している場合の話です。

方法

これまでの方法

まず先にLaTeX文章を示します。

\documentclass[a4paper, 11pt]{ltjsarticle}

% mathematical font
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\unimathsetup{math-style=TeX,bold-style=TeX,vargreek-shape=TeX}
\setmathfont{texgyretermes-math}

% Serif, Sans, Monospace
\setmainfont[ItalicFont=texgyretermes-italic, Ligatures=TeX, Scale=0.95]{texgyretermes-regular}
\setsansfont[Ligatures=TeX, Scale=0.95]{texgyreheros-bold}
\setmonofont[BoldFont=Inconsolatazi4-Bold, Ligatures=TeX, Scale=1]{Inconsolatazi4-Regular}

% other setting
\renewcommand{\bfdefault}{bx}
\renewcommand{\bf}{\gtfamily\sffamily\bfseries}

\begin{document}

\begin{itemize}
 \item $\alpha_\text{1}$
 \item {\bf $\mathbf{\alpha_\text{1}}$}
\end{itemize}

\end{document}

これまではこのように \mathbf を使用してギリシア文字をボールド体にしていました。これが、ある時点からうまく行かなくなりました。

改善策

色々とネット上で調べていると、 unicode-mathパッケージの説明書(英語)や このページ\symbf を使う例が載っていました。

そこで

\begin{itemize}
 \item {\bf $\symbf{\alpha_\text{1}}$}
\end{itemize}

のように変更することでボールド体が出力されるようになりました。

その他

ちなみに \text{1}としているのは数式フォントではなく、通常のフォントを使用するためです(\usepackage{amsmath}が必要)。また、このようにすることで全体を{\bf }で囲ったときにボールド体になるようにするためです。

本来は\textbf{}で囲む方がいいのでしょうが、欧文フォントと日本語フォントの両方をゴシック体にするように設定しているためです(\section{}などと同じ挙動になるように)。

追記(2015/8/30)

ギリシア文字だけをボールド体にするのであれば

\begin{itemize}
 \item $\symbf{\alpha}$
\end{itemize}

で十分です。

また、 unicode-mathのバージョンが 0.7e(2014/06/30)から0.8(2015/07/29)に上った際にこのような現象が起きたようです。

org-modeのBeamerクラスでlualatexを使用してPDFファイルを作成する

経緯

全てではありませんが、講義用のスライドをLaTeXのBeamerクラスで作成しています。

以前は platex -> dvipdfmx の順でPDFファイルを作成していましたが、現在は lualatex を使用して直接PDFファイルを作成しています。

  • 利点
    • PDF形式の図を直接挿入できる
    • フォントの扱いが楽(個人的な感想)

今までは使用していませんでしたが Emacsのorg-modeからBeamerクラスの形式で出力できるため、 lualatexを使用してPDFファイルを作成できるように設定しました。その時のメモです。

うまくいきそうなので今後はorg-modeで原稿を作成していきたいと思いました。

ちなみに Beamerクラスだけではなく通常のltjsarticleでも可能でした。

init.elに追加する設定

Beamer用

LaTeXで使用するクラスファイルおよびパッケージ

Beamerクラスを使用するための個人的設定です。デフォルトの設定ではもっと多くのパッケージを使用しているため個人的に必要だと思うものだけを含めています。

この中でlualatexを使用する上で必須なのは

です。これがないと日本語が使用できません。プロジェクトの皆様には感謝でいっぱいです。

%%Fontsは個人の好みです。

  • 数式フォント:TeX Gyre Termes(Times系)
  • セリフ体:TeX Gyre Termes
  • サンセリフ体:TeX Gyre Heros(Helvetica系)
  • 日本語:IPAexゴシック

を使用するように設定しています。

(require 'ox-beamer)

(add-to-list 'org-latex-classes
             '("beamer"
               "\\documentclass[presentation]{beamer}
[NO-DEFAULT-PACKAGES]
\\usepackage{luatexja}
\\usepackage{textcomp}
\\usepackage{graphicx}
% \\usepackage{booktabs}
\\usepackage{longtable}
\\usepackage{wrapfig}
\\usepackage{hyperref}
\\hypersetup{pdfencoding=auto, linkbordercolor={0 1 0}}
%% Fonts
% mathematical font
\\usepackage{fontspec}
\\usepackage{amsmath, amssymb}
\\usepackage{qtxmath}    % Times (Gyre Termes)
% English
\\setmainfont[BoldFont=TeXGyreHeros, Ligatures=TeX]{TeXGyreTermes}  %Times
\\setsansfont[Ligatures=TeX]{TeXGyreHeros}                          % Helvetica
% Japanese
\\usepackage{luacode}
\\usepackage{luatexja-otf}
\\usepackage[ipaex]{luatexja-preset}
\\renewcommand{\\kanjifamilydefault}{\\gtdefault}
%%
\\setbeamercovered{transparent}
\\setbeamertemplate{navigation symbols}{}"
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
  ("\\paragraph{%s}" . "\\paragraph*{%s}")
  ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

変換エンジンとしてlualatexを使用するための設定

org-latex-で始まるコマンドを調べたところ org-latex-pdf-process が該当しました。

(setq org-latex-pdf-process
      '("lualatex --draftmode %f"
        "lualatex %f"))

と設定することで lualatexを使用するように変更できました。

lualatexを2回使用している理由は

  • 相互参照
  • ページ数および見出しの確定

です。 lualatexを1回しか使用しない場合には総ページ数が正しく表示されず、見出しも空欄のままでした。 **.tocなどの中間ファイルが必要なのに 自動的に削除するのがその理由のようです。

とりあえずこれで直接PDFファイルに変換できるようになりました。今後微調整が必要かもしれませんがこれで試したいと思います。

ltjsarticle用

スライドではなく通常の書類を作成する場合には ltjsarticleクラスを使用します(むしろこちらの方が頻度が高い)。

LaTeXで使用するクラスファイルおよびパッケージ

以下設定です。

(require 'ox-latex)

(add-to-list 'org-latex-classes
             '("ltjsarticle"
               "\\documentclass[12pt,a4paper]{ltjsarticle}
[NO-DEFAULT-PACKAGES]
\\usepackage{amsmath}
% \\usepackage{newtxtext,newtxmath}
\\usepackage{textcomp}
\\usepackage{graphicx}
\\usepackage{booktabs}
\\usepackage{longtable}
\\usepackage{wrapfig}
\\usepackage{hyperref}
\\hypersetup{pdfencoding=auto}"
  ("\\section{%s}" . "\\section*{%s}")
  ("\\subsection{%s}" . "\\subsection*{%s}")
  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
  ("\\paragraph{%s}" . "\\paragraph*{%s}")
  ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

デフォルトのドキュメントクラスとしてltjsarticleを使用するための設定

デフォルトではarticleクラスが選択されます。

そこで

(setq org-latex-default-class "ltjsarticle")

とするとltjsarticleがデフォルトで選択されるようになります。

先ほどのorg-latex-pdf-processの設定で lualatexが使用されるようになっています。