0番染色体

科学は全世界を照らす光である

LuaTeXで使える!便利なLaTeX関連ツール

今回は,次世代のTeXと目されるLuaTeXで使用できる便利なLaTeX関連ツールを紹介していきます.

という説明は嘘にはあたらないですが,過度に一般化されている感が否めません.正確に言うと,本記事は先月公開した拙作の科学史シケプリ『ワトソン科学史』の作成にあたって利用したほぼすべてのツールを紹介する,という主旨の記事です.

したがって,本来であればタイトルを『シケプリ作成に利用したLaTeX関連ツール』などとすべきだったのですが,そうすると「シケプリって何?」 *1 という方が続出し,それこそ記事内容がまったく伝わらないと思ったのでこのようになりました.

なお,本記事はある一つの文書を作成する際に利用したツールを一覧にすることを目的としているため,原則としてその個々について詳細な説明を行うことは避けています.したがって,各ツールの具体的な使用方法や利用上の注意点などの情報については,必要に応じて関連書籍や外部サイトを参照いただくようお願い致します.

LuaTeXとは

まずはじめに,そもそもLuaTeXとは何なのか,そしてシケプリ作成にあたってなぜこれを採用するに至ったのかを簡単に説明しておきます.

LuaTeXは軽量スクリプト言語のLuaを利用できるようにしたTeXの拡張です(LuaTeX-jaパッケージを用いると日本語の組版も可能となります [1] ).基本的に,Luaが使えるということ自体はTeXでマクロ作成をしてきたような方々にしか影響しないことですが,一般のLaTeXユーザーの視点に立てば,次のような特徴 [6] をもつということができます.

  1. 直接PDFを生成する(pdfTeXの特徴)
  2. Unicodeが直接扱える(upTeXやOmegaの特徴)
  3. フォントの設定が楽に行える

1つ目の特徴は,LaTeXを使っているだけでは

  • 必要のないDVIファイルを生成しないで済む
  • ドライバ指定で悩まなくて済む

という程度にしか思われないかもしれませんが,実際にはパッケージレベルで様々な利益を被ることができるでしょう *2

2つ目はこれまでも多くの日本語LaTeXユーザーがupLaTeXに触れてきたと思われるので,その恩恵をLuaTeXでも受けられるという話に過ぎません.

そして,最後の特徴こそ現在LuaTeXを利用する最も大きな動機となるべきものです.実際の設定方法はのちほど簡単に紹介しますが,これまでは非常に面倒であったフォント周りの設定をたった一行のTeXソースで実現できます.

シケプリ作成にLuaTeXを利用した理由も,この3つ目の特徴によります.あとは,好奇心からLuaTeXを使ってみたかったというぐらいしか理由はありません.

なお,最終的な組版に使用したLuaTeXは Version beta-0.80.0 (TeX Live 2015) です.

クラスファイル

LuaTeX-jaにおけるLaTeXの基本的な使い方については,公式ページにまとめられています.それによれば,LuaTeX-jaでは従来のjclassesやjsclassesは使用できません.代わりに,ltjclassesまたはltjsclassesを使用します.

ltjsbook

今回のシケプリ作成にあたっては,ltjsclassesを採用しました.ltjsclassesには,jsclassesと同様,英語用のreportクラスに相当するものが存在しませんが,ltjsbookにreportオプションをつけことでレポート作成用のレイアウトに設定することができるので,これを利用しました.

また,個人的に数式を中央寄せにするのは好きでないので,式を左寄せ表示にするオプションfleqnもつけて使用しました.

\documentclass[report,fleqn]{ltjsbook}

使用したスタイルファイル

フォントの設定

フォント周辺の話は,元々が極めて複雑怪奇であるため,LuaTeXはフォントの設定を楽にするとはいっても(少なくとも私にとっては)難しいことに変わりはありません.以下に私が実際に使用した(つまり,意図通りの結果を得られている)フォントの基本設定部分のソースを掲載しますが,これが冗長性やバッドノウハウを含んでいないかどうか,正直なところ確信をもてません(おかしな部分があればツッコんでいただけると幸いです).

\usepackage[no-math]{fontspec}
\usepackage{amsmath,amssymb}
\usepackage[hiragino-pron,deluxe,expert,bold]{luatexja-preset}
\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
luatexja-preset

埋め込み和文フォントの指定を簡単に行うことのできる,LuaTeX-ja付属の非常にありがたいパッケージです.パッケージ読み込み時に,オプションの形で様々な指定を行うことができます.ここでは,上記設定で使用しているオプションについてのみ説明するので,より詳しくは公式ページを参照してください.

  • hiragino-pron:Macに標準で付属するヒラギノProNシリーズの埋め込みを指定
  • deluxe:丸ゴシック体などを使えるようにする
  • expert:横組専用仮名・縦組専用仮名を用いる(少しひらがなの形が変わる)
  • bold:\bfseries に明朝体の太字ではなくゴシック体を使用する
fontspec

XeLaTeXとLuaLaTeX向けの欧文フォント設定用のパッケージです.luatexja-preset.sty内で自動的に読み込まれるそうなので,基本的には明記する必要はないのですが,私は数式中で使用する欧文フォント(AMSFonts)とそれ以外で用いる欧文フォント(TeX Gyre Termes)を別々に指定したかったため,no-mathオプションをつけてluatexja-preset.styよりも前に読み込んでいます.

amsmath & amssymb

数式用のパッケージです.これらは従来より広く使われてきたものであり,他の文献も多いかと思うので説明は割愛します.

LuaTeX-ja用のパッケージ

LuaTeX-jaでは多くの既存パッケージを特に問題なく使用することができますが,一部パッケージはそのままでは利用できません *3 .その代表例がokumacro.styとotf.styです.これらのパッケージは,LuaTeX-ja用に作成された別のパッケージで代替する必要があります.

luatexja-ruby

okumacro.styではさまざまなマクロが定義されていますが *4 ,個人的にどうしてもないと困るのはルビを振る命令でした.

LuaTeX-jaでルビを使用したい場合は,luatexja-ruby.styが利用できます.このパッケージはかなり高機能で,ルビ振りについて様々な制御を行うことができますが,特にこだわらないのであれば,okumacro.styと同じ要領で\ruby命令を使用可能です *5

luatexja-otf

OpenTypeフォントに含まれている文字をLaTeXで使えるようにするotf.styは旧来より最もよく使用されているLaTeXパッケージの1つではないかと思いますが,これもそのままではLuaTeX-jaで使用することはできません.代わりに,luatexja-otf.styが使用可能です.

図表関連のパッケージ

次は図表を扱うパッケージです.ここに登場するものはすべてpLaTeXでも使用できたものなので,それほど多くの説明を必要としないと思います.

graphicx

言わずと知れた画像取り扱い用のパッケージです.LuaTeXは直接PDFを出力するため,ドライバの指定は必要ありません.また,従来のようにbb/xbbファイルを生成したり,直接bb値を指定する必要もありません.

xcolor

こちらも言わずと知れた有名パッケージです.LaTeXで多色の文書を作成可能にします.さらに,読み込み時にtableオプションをつけることによって,表に色を付けるためのツールも提供してくれます.

tikz

TikZは,極めて高度な描画機能をもつtikzpicture環境を提供するパッケージです *6 .pLaTeX+dvipdfmxでも一部の機能が使用可能でしたが,LuaTeXではすべての機能が利用可能です [2] .今回のシケプリ作成では主に「コラム」や「プロフィール」の装飾に利用しています *7

なお,TikZパッケージの読み込み(\usepackage{tikz})は原則としてgraphicxパッケージの読み込み(\usepackage{graphicx})よりもあとに行う必要があるので注意してください.実際の使い方については外部に多数の解説記事が存在しているので,それらを参照するといいでしょう.

wrapfig

文章を画像に回り込ませるためのパッケージです.便利なものですが,たまに不審な挙動を示すことがある上,そもそも回り込みを多用し過ぎると読みにくい文書になることは認識しておくべきです.私のシケプリでは「プロフィール」で画像を挿入するときにのみ使用しました.

overpic

図の上に文字等を重ね書きするためのパッケージです.座標指定で文字の位置を決定するのでその調整が面倒なのですが,画像中に文字を入れると解像度や拡大率を考慮する必要が生じるため一部で利用しています.

longtable

複数ページにまたがる長い表を作成するためのパッケージです.年表作成に利用しました.きちんと幅の調整された表を得るためには,2回以上TeXで処理する必要があります.

float

フロート(figure環境やtable環境)の位置指定にオプションHを追加するパッケージです.このHオプションは図表を必ずその位置で出力させるようにTeXに指示するものです [4] .最初から存在するhオプションは「その場で出力してもよい」程度の弱い効果しかもたないのに対してこのHオプションは強力ですが,他のフロートで別のオプションをしていた場合に,ソースでの記述順序と異なる順序で出力されてしまう恐れもあるので注意が必要です.私は,こうした事態を避けるために,一度でもHオプションを使用した文書では,原則としてすべてのフロートにHオプションを指定するようにしています.

枠を描くためのパッケージ

ascmac

非常に古典的なマクロ集です *8 .枠の形も非常に古典的かつ典型的なものが多く,ページをまたぐこともできません.私のシケプリでは,影付きのシンプルな枠を表示するために一度だけ使用しました *9

ascmac.styで定義される枠(itembox, screen, boxnote, shadebox)は\color{〈色〉}を事前に宣言することで,その色を変更することができます.さらにitembox, screen, shadeboxの枠線の太さは,それぞれ\thicklines, \thinlines, \shaderuleの値を\setlength命令等で変更することよって調整可能です [5] .

逆に言えば,こうした調整方法はascmacの枠が極めて原始的な方法で描画されていることを物語っています.中でもboxnoteのあの独特の上辺は"ab"という文字列をひたすら並べることによって描画されていることなどは象徴的です.当然,現在では先述したTikZ等を利用してもっと美しく合理的にこうした線を描くことができるので,特にascmac.styにこだわる理由がないのであれば,次に紹介するmdframed.styやtcolorbox.styを用いた方が,出力が美しい上に種々の制御も柔軟に行うことができるかと思います.

mdframed

ページをまたぐことが可能な枠を描くことができます.また,枠の形状や配色,枠中の書式などについてかなり細かい設定を行うことが可能です.

パッケージを読み込む際には,オプションとしてグローバルオプションを指定します [3] .グローバルオプションは,基本的に以下の2種類しかないようです.

  1. xcolor
    mdframed.styはデフォルトでもcolor.styを読み込みますが,このオプションを指定すると,さらにxcolor.styを読み込んで使用します.mdframed.styよりも前にxcolor.styを読み込んでいる場合,このオプション指定は無視されます.
  2. framemethod
    枠の描画に用いる方法を指定します.

私は,xcolor.styを先に読み込んで使用したので,1つ目のオプションは使用しませんでした.一方,framemethodにはTikZを利用するように指定しました.

\usepackage[tikz]{mdframed}

mdframed.styにはグローバルオプションのほかに多数のローカルオプションが存在し,これによりそれぞれの枠についてかなり細かな設定をCSSのような要領で行うことが可能です.詳細は公式ドキュメントか他の解説サイトを参照してください.

その他のパッケージ

geometry

余白を簡単に設定するためのパッケージです.パッケージを読み込む際のオプションで上下左右の余白を指定できます.

\usepackage[top=25truemm,bottom=25truemm,left=20truemm,right=20truemm]{geometry}

値はかなり適当に決めました.本来ならばこれでは左右マージンが狭すぎるだろうと思われますが,今回は印刷・製本を前提にしていないのと,枠や箇条書きをほとんどを占める体裁を採用した都合上,左右幅が短いと1ページに含められる情報量がかなり減ってしまうことを考えた結果,このような値になりました.

enumitem

LaTeXの箇条書き環境(itemize, enumerate, description)の書式変更を容易にするパッケージです.

makeidx

索引を作成するためのパッケージです.今回はmendexとともに利用しました.

hyperref

TeXでHTMLのようなハイパーリンク機能が使えるようにし,さらにPDFの詳細設定を行うことができる有名パッケージです.LuaTeXで使用する場合,しおりが文字化けを起こさないようにするためにはpdfencoding=autoを指定するとよいようです.実際に使用したhyperref関連のコード部分を以下に掲載しておきます.

\usepackage[pdfencoding=auto]{hyperref}
\hypersetup{%
  bookmarks=true,%
  bookmarksnumbered=true,%
  hidelinks,%
  setpagesize=false,%
  pdftitle={ワトソン科学史},%
  pdfauthor={ワトソン},%
  pdfsubject={2015年度 科学史シケプリ},%
  pdfkeywords={科学史}}

詳細については TeX wiki などの外部サイトを参照していただきたいですが,当ブログの過去記事で他サイトではあまり指摘されていない使用上の注意点をまとめたこともあるので,もしよかったらご覧になってください.

numprint

最終的には使用しなかったパッケージですが,参考のため紹介しておきます.

numprint.styは「数」を整形するためのパッケージです.公式ドキュメントを見る限り,かなり多機能のようです.

『ワトソン科学史』では「プロフィール」の通し番号を必ず3桁(ex. 017)で表示するために導入しましたが,最終的にはそのためのマクロを自作したので不要となりました.

利用した便利なツール

ほんの数サービスではありますが,使用させていただいた便利なLaTeX以外のツールをご紹介します.

BibTeX

参考文献が少ないうちは人の手で参考文献リストを作成してもそれほど手間ではありませんが,数が増えてくるとこれがなかなか骨の折れる作業になります.そのような場合にはBibTeXを利用すると便利です.jBibTeXならば日本語も扱うことが可能です.詳しいことは例によって他の解説記事等を参照してください.

しかし,BibTeXを使用しても,そのためのエントリーをすべて手打ちしたのでは労力は半分にも節減できません.BibTeXは,これから紹介するLead2Amazonのようなサービスと合わせて利用することによって,さらに便利に利用することができます.

Lead2Amazon

Amazonの商品をカスタマイズ検索するためのWebアプリケーションですが,その最大の魅力はなんといっても出力形式にBibTeXを指定できるところです(私見).検索窓に書名やISBN番号を入力し,検索ボタンをクリックするだけでBibTeXのエントリーを得ることができます.非常に便利です.

表組み

さきほど複数ページにまたがる表が作れるlongtableパッケージをご紹介しましたが,それほど長大な表をLaTeXで作成するのはかなりの重労働です.これは何もTeX/LaTeXに限ったことではなく,マークアップ言語全般に言えることで,懐かしき「TeXユーザーの集い2014」でもこのようなことが話題になっていました.

もちろん,それでも表をLaTeXで書くという人を止めはしませんが,私は今回の年表のように大きな表を作成するときはExcelを使いたいです.そして,Excelで作成した表をLaTeXのtabularに変換し,文書中に組み込みむことを考えます.

この「Excelで作成した表をtabularに変換する方法」なのですが,おそらく一般的には

  1. Excelから,作成した表をCSV形式でエクスポートする
  2. 変換ツールを用いてCSVをLaTeX形式に変換する
  3. 変換した表データをLaTeXのソースにコピペする

というような手順を経るのだと思われます.実際,TeX wiki にもそのためのツールが多數掲載されています.

しかし,実はもっと便利なツールがあり,今回はこちらを利用させていただきました.

excel2tabular

シンプルなWebアプリケーションですが,先ほどの例よりもさらに手順を省略できます.冒頭の「Excel からここにペースト or 直接入力」と書かれた枠の部分にExcelで作成した表をコピー&ペーストするだけでtabularソースへの変換を行ってくれます.これをLaTeXソースの表を挿入したい箇所にコピペするだけで作業は完了です(もう少し細かなレイアウト指定も可能になっていますが).要するに,2回コピペするだけでExcelで作成した表をLaTeX文書に組み込むことができます.あっという間です.

おわりに

本記事は,当初の予定では使用したパッケージやツールを箇条書きにするだけの短い記事になるはずだったのですが,それではあんまりだと思い直して各項目に少しずつ説明を書き加えていったところ,全体としてはこのようなボリュームの記事になってしまいました.

LaTeXの使用法について説明した記事は世の中に多數存在していますが,それらは個々のパッケージ使用法や問題解決の手段を提供するものであって,本記事のように包括的に「これらのツールを使用した結果,このような文書ができた」と説明する記事はあまり存在しないように思えたので,今回はそうした新しい試みに取り組んでみました.

ここまでさまざまなパッケージやツールを紹介しました.その中で読者が,新しいパッケージやツールとの出会いを体験できたのであれば,私はこの記事を書いた価値があったと思うことができます.私自身がまだまだ未熟なLaTeXユーザーであるゆえに,今回は利用・紹介できなかったより便利なパッケージやツールがあるかもしれません.さらに,記事中にいくつか誤りを含んでいる可能性もあります.そうした点に気付いた方は,是非Twitterやコメントでご指摘いただければと思います.

それでは,これからも
Happy LaTeXing!

<参考文献>

[1] LuaTeX-ja プロジェクト wiki. 2015-05-18.
http://osdn.jp/projects/luatex-ja/wiki/FrontPage, (accessed 2015-08-09).
[2] "TikZ". TeX wiki. 2015-06-07.
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TikZ, (accessed 2015-08-09).
[3] Daniel, M., Schubert, E. "The mdframed package". 2013-07-01. ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/macros/latex/contrib/mdframed/mdframed.pdf, (accessed 2015-08-09).
[4] Lingnau, A.. "An Improved Environment for Floats". 2011-11-08. ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/macros/latex/contrib/float/float.pdf, (accessed 2015-08-09).
[5] 堀田耕作. "覚えてほしいコマンド".
http://www.khotta.org/ghost/advice.html, (accessed 2015-08-09).
[6] 八登崇之. "日本人の知らないTeX". En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて]. 2010-10-23.
http://zrbabbler.sp.land.to/data/yato-texconf10.pdf, (accessed 2015-08-09).

*1:シケプリとは,某大学で頻繁に用いられる「試験対策プリント」の略称です.

*2:もっとも,それは「LuaTeXではLuaが使える」という特徴から一般ユーザーが受ける恩恵と同種のものですが.

*3:おそらく,その大半の理由は \NeedsTeXFormat{pLaTeX2e} が宣言されているためです.したがって,影響を受ける可能性があるパッケージのほとんどは「日本語ユーザー用に開発されたパッケージ」ということになるかと思われます.

*4:詳細は奥村先生のドキュメントを参照してください.

*5:luatexja-ruby.styに関する詳細な情報は公式ドキュメントを参照してください.

*6:実際の描画自体を行っているのはPGFというTeX用の描画エンジンで,TikZはそのインターフェースに過ぎないようです.

*7:本当は種々の挿入図もTikZで描きたかったのですが,時間がなかったこともあり多くの図版作成には別のペイントソフト等を用いました.

*8:パッケージ名は「アスキー・マクロ」に由来しているのだと思います.

*9:ただし,その理由は「mdframedで再設計するのが面倒だった」という程度のものに過ぎません.