[[LaTeX入門]] /
[[最初の例>LaTeX入門/最初の例]] /
[[簡単な数式 (1)>LaTeX入門/簡単な数式(1)]] /
[[簡単な数式 (2)>LaTeX入門/簡単な数式(2)]] /
[[各種パッケージの利用>LaTeX入門/各種パッケージの利用]] /
[[レポート>LaTeX入門/レポート]] /
[[HTML と LaTeX の比較>LaTeX入門/HTMLとLaTeXの比較]] /
[[複雑な数式>LaTeX入門/複雑な数式]] /
[[図表>LaTeX入門/図表]] /
[[図表の配置>LaTeX入門/図表の配置]] /
[[相互参照とリンク>LaTeX入門/相互参照とリンク]] /
[[文献引用]] /
[[索引作成]] /
[[LaTeX マクロの作成>LaTeX入門/LaTeXマクロの作成]] /
[[スライドの作り方(jsarticle 編)>LaTeX入門/スライドの作り方(jsarticle編)]] /
[[応用的な使い方>LaTeX入門/応用的な使い方]] /
発展編

----


* 発展編:最近の LaTeX の動向 [#q6b5d096]

LaTeX 入門では全体をとおして pLaTeX を用いた手順を説明してきました。
これは,pLaTeX が環境の新旧を問わず(日本の)TeX 環境で常に使えるエンジンだからです。
しかし,新しい TeX 環境ではより機能拡張が施された LaTeX エンジンを使えるようになっています。
ここではそういう“新しい LaTeX”で初心者でも簡単に使えるものを紹介します。

// LaTeX 入門は全体をとおして,当面の間は pLaTeX で固定し,ほかの説明は省く。
// 各所で雑多な情報が出回っているので,ここで位置づけをはっきりさせておこうというのが趣旨です。
// 発展編なので“超初心者”は読まない前提,ただし知りたい人にはここを参照するように導く。
// あまり TeX Wiki のなかに説明がないので… -- アセトアミノフェン (2015-08-31)

#contents

** upLaTeX [#deabb3ce]

TeX Live 2012 以降,あるいは W32TeX [2007/08/04] 以降をインストールした場合は,[[upLaTeX>upTeX,upLaTeX]] という Unicode 対応の日本語用 LaTeX エンジンが収録されています。

初級者にとっての,upLaTeX を使うメリットは以下の点です:

-環境依存文字(丸数字や特殊記号など)をそのままソースに使える
-漢字が JIS 第一・第二水準に入っているか否かを意識せずに済む

これまで「LaTeX 入門」で示した pLaTeX 用のソースは以下の点を変えるだけで upLaTeX 用のものに改変できます:

-ソースを作成するとき,文字コードは UTF-8 に指定する
-jsarticle クラスのオプションに uplatex をつける,つまり \documentclass[uplatex,...]{jsarticle} のように書く
// 現状では縦書きのソースは出てこないので移動します
//-縦書きのときは \documentclass{utarticle} を使用
//-otf パッケージを用いているならば,uplatex オプションを加える([[OTF]] も参照)
// \usepackage{otf} → \usepackage[uplatex]{otf}
// upLaTeX を使おうと思う動機のある人は otf パッケージを使用している可能性が高いと
// 思われますが,このオプションのつけ忘れにはなかなか気がつきませんので。
// // とはいっても,\documentclass[uplatex]{jsarticle} のような
// // グローバルオプションが付いている場合は \usepackage{otf} でも大丈夫なので,
// // 実質的にそれが必要なのは
// // -- \usepackage{utarticle} の場合(縦組は使わざるを得ないからゼロではない)
// // -- \usepackage{ujarticle} の場合(横組は jsarticle でよいので実質ほぼゼロ)
// // のいずれかに限られると思います。
// // また,そもそも upLaTeX を使う動機はむしろ「otf を使わずに」それらの文字を出す
// // ことを望んでいると思われるので,あまり当てはまらないかも。
// // // 以前に upLaTeX に切り替えたときにこの otf の設定でハマったことがあったので
// // // あちこちに記載するようにしていましたが,
// // // 改めて試してみたらたしかにグローバルオプションがついているときには
// // //  otf には敢えてつけなくても通りますね…。(以前にハマったのは何だったのだろう…?)

*** upLaTeX ソース例 [#z9f16bc7]

LaTeX 入門で示した例は特に upLaTeX を使う必要のある要素を含んでいませんでした。
しかし,例えば以下のような JIS 外の漢字や丸数字などを含むソースを考えましょう。

 \documentclass[uplatex]{jsarticle}
 \begin{document}
 
 ①②③④㋐㋑㋒㋓
 
 森鷗外,内田百閒,鄧小平,李承燁
 
 \end{document}

これを ex1.tex という名前で文字コードを UTF-8 にして保存し,以下のコマンドを実行します。

 uplatex ex1
 dvipdfmx ex1

すると,ex1.pdf が出力されます。
[[ptex2pdf]] を使う場合は

 ptex2pdf -u -l ex1

とすれば,upLaTeX と dvipdfmx が順に実行されて ex1.pdf が得られます。

もし仮にこの ex1.tex を(先頭行の uplatex オプションを除いた上で)pLaTeX で処理してしまうと,“JIS 外字”の丸記号や漢字(鷗,閒,鄧,燁)が抜け落ちてしまいます。
すなわち,pLaTeX を使う場合は,書きたい文字が“JIS 外字”であるかをいちいち考えないといけないのですが,upLaTeX を使うことで,そのような面倒から解放されるわけです。

***補足事項 [#y7c7dcf3]

-[[図表>LaTeX入門/図表]]の取り扱い等については upLaTeX + dvipdfmx でも pLaTeX の場合と同様です。
-[[文献引用]]については,pBibTeX の代わりに upLaTeX と同様に Unicode に対応した upBibTeX を使うとよいでしょう。
-[[索引作成]]については,mendex を実行する際に
 mendex -U hoge
のようにして入力文字コードに UTF-8 を指定すれば,JIS 外字を正しく索引に入れることができます(参考:[[forum:1253]])。
ただし読みデータには JIS 外字が使えません。
// だっけ?
--TeX Live 2016 以降,あるいは W32TeX [2015/01/27] 以降に収録されている upmendex を使うと,読みデータに JIS 外字を含むような索引が扱えます。
ただし,memdex と upmemdex では語句のソートの規則が異なることに注意が必要です(参考:[[forum:1308]],[[forum:1637]])。((mendex は読みデータを EUC で保持するのに対し,upmendex は読みデータを Unicode で保持します。また、upmendex はソートを ICU を利用して行っています。))
-パッケージについては,大体において,pLaTeX で使えるものなら upLaTeX でも使えます。
--ただし,パッケージファイルの文字コードが SJIS や EUC である場合は UTF-8 に変換する必要があるでしょう。((文字コードが ISO-2022-JP(いわゆる「JIS エンコーディング」)である場合は、upLaTeX でも正常に読み込めます。実際、TeX Live や W32TeX に含まれる (u)pLaTeX 用のパッケージファイルの文字コードは ISO-2022-JP になっています。))
文字コード変換には [[nkf]] を使うと便利です。
--[[OTF パッケージ>OTF]]については,upLaTeX で使う場合には uplatex オプションの指定が必要です。
-文書クラスについては,upLaTeX に対応しているかを個別に確認する必要があります。
対応していなければ,upLaTeX での利用は諦めざるをえません。
--jsarticle 等の[[新ドキュメントクラス>jsclasses]]は upLaTeX に対応しています。
先述の通り,upLaTeX で使う場合は uplatex オプションを指定します。
--pLaTeX 標準の縦書き文書クラス(tarticle,treport,tbook)は upLaTeX に対応していませんが,upLaTeX 用の代替となる utarticle,utreport,utbook クラスが用意されています。
--欧文用の文書クラス(article 等)は,たいていは upLaTeX で利用できます。

*** upLaTeX を使える場合・使えない場合 [#p69fabd3]

以上のように,upLaTeX は pLaTeX よりも優れた機能を持ちますが,残念ながら,いつでも upLaTeX が使えるわけではありません。

upLaTeX を使えるためには,まず大前提として OS やエディタが Unicode (UTF-8) に対応している必要があります。
そのうえで,利用している TeX 環境が upLaTeX をサポートしていることも必要です。
TeX Live 2012 以降,あるいは W32TeX [2007/08/04] 以降であれば upLaTeX が入っています。
これより古い環境(TeX Live 2011 など)では使えません。

もうひとつ気を付けるべきなのは,pLaTeX 用の文書クラスファイル(スタイルファイル)の中には upLaTeX に対応していないものがあることです。
特に,主要な和文論文誌(例えば [[IPSJ]])の指定する文書クラスについては,その大半が pLaTeX 専用になっています。
そのような文書クラスの使用が求められる文書を作る機会のある人は,upLaTeX に完全に移行することはできないでしょう。

*** その他の注意 [#tdabbc70]

UTF-8 で保存された pLaTeX 文書の \documentclass 部分だけ変更すれば upLaTeX 文書になることも多い一方で、時に注意すべき点を挙げておきます。

-TeX LIve 2015 以前の upTeX では、ひらがな・カタカナの「基底文字+濁点」から「合成済み文字」への正規化が行われませんでした。このため、「げ」が「け゛」のように分解されたまま出力されるなどの現象がありました。
--[[Development of TeXShop - The Past and the Future (TUG 2013):http://www.slideshare.net/doraTeX/development-of-texshop-the-past-and-the/37]]
--[[NFD な濁点仮名を pLaTeX できる話:http://d.hatena.ne.jp/zrbabbler/20151006/1444134044]]
--本件は TeX Live 2016 で挙動変更がなされ、upTeX でも合成済み文字への変換が追加されました。([[forum:1701>forum:1701#p9931]])
-ほかにも、内部 Unicode 化により縮退せず区別されるようになった文字については挙動が変わることがあります。たとえば okumacro の倍角ダーシを出力する命令 \―― (全角ダーシ2つ)や \−− (全角マイナス2つ)について、pLaTeX では全角ダーシとして U+2014 と U+2015、全角マイナスとして U+FF0D と U+2212 のいずれも使えますが、upLaTeX では U+2015 と U+2212 しか使えず、ほかはエラーになります。

** LuaLaTeX [#mb665da8]

日本では pLaTeX や upLaTeX と dvipdfmx を組み合わせて「LaTeX ソースから DVI 経由で PDF を作る」ケースが圧倒的に多いのが現状です。
しかし海外に目を向けてみると,[[pdfLaTeX>pdfTeX]] を使って「LaTeX ソースから PDF を直接出力する」ケースが主流です。
この pdfTeX を拡張して Lua という軽量スクリプト言語を利用できるようにしたのが [[LuaTeX]] です。
LuaTeX は,いまのところ pdfTeX の後継として位置づけられています。

TeX Live 2018 の LuaTeX のバージョンは 1.07.0 です。すでに pdfTeX に近い機能拡張を利用できるほか,以下のような優れた機能もあります:

-Unicode に対応
-フォントの設定が簡単(OpenType/TrueType フォントを直接扱える)

LuaLaTeX を使って日本語を組版するための [[LuaTeX-ja]] というパッケージも活発に開発されています。
LaTeX 入門で示した pLaTeX のソースから LuaLaTeX (LuaTeX-ja) に切り替える場合,現在は以下のようにすればよいようです:

-ソースを作成するとき,文字コードは UTF-8 に指定する(ほかの文字コードは不可)
-\documentclass{jsarticle} の代わりに \documentclass{ltjsarticle} を使用

このように ltjsarticle クラスにすれば自動的に luatexja パッケージが読み込まれます。

*** LuaTeX-ja ソース例 [#t7eebe4c]

[[LuaTeX-ja の使い方:https://ja.osdn.net/projects/luatex-ja/wiki/LuaTeX-ja%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9]]に例が挙げられています。

 \documentclass{ltjsarticle}
 \begin{document}
 
 \section{はじめてのLua\TeX-ja}
 ちゃんと日本語が出るかな?
 \subsection{出たかな?}
 長い文章を入力するとちゃんと右端のところで折り返されるかな?
 大丈夫そうな気がするけど。ちょっと不安だけど何事も挑戦だよね。
 
 \end{document}

これを ex2.tex という名前で文字コードを UTF-8 にして保存し,以下のコマンドを実行します。

 lualatex ex2

すると,ex2.pdf が出力されます(初回のタイプセットではキャッシュが存在しないので,長い場合は数分程度かかるかもしれません)。
このとき,デフォルトでは標準和文フォントは IPAex フォントが埋め込まれます。
macOS でヒラギノフォントを利用できる場合は

 \usepackage[hiragino-pron,jis2004]{luatexja-preset}

をプリアンブルに追加すれば,システムにインストールされているヒラギノフォントが認識されて埋め込まれるようになります。
このように,LuaTeX の大きな特徴は「システムにインストールされた OpenType フォントや TrueType フォントを直接扱える」ことだったりします。

なお,[[図表>LaTeX入門/図表]]の取り扱い等については,pLaTeX のときのような [dvipdfmx] オプションが不要になります(これは pdfLaTeX と同様で,自動的に適切なドライバを検出します)。

Lua(La)TeX,LuaTeX-ja ともに仕様は流動的であることを気に留めておいてください。

** ほかの文書クラスの利用 [#n7262472]

少し昔の TeX 環境では,日本語用の文書クラスとして jclasses (jarticle, jreport, jbook) しかインストールされていませんでした。
これらは JIS の組版規則に合わない点が複数指摘されており,工夫が必要でした。
いまではほとんどの環境で奥村先生による「[[pLaTeX2e 新ドキュメントクラス>jsclasses]]」 (jsarticle, jsreport, jsbook) がインストールされていますので,JIS の組版規則に則った日本語文書を容易に作成できるようになっています。
LaTeX 入門ではこの新ドキュメントクラスを使用して,簡単な例を示してきました。

その一方で,新ドキュメントクラスは pLaTeX というエンジンの機能に強く依存して日本語の組版を実現しているため,pLaTeX / upLaTeX 以外のエンジンで使用することができません。
そこで,新ドキュメントクラスから pLaTeX 依存の部分を分離した [[BXjscls]] という新しい汎用文書クラスが,ZR さんによってつくられました。
BXjscls は使用する各エンジンに対応した日本語処理パッケージを読み込み,pLaTeX / upLaTeX 以外でも [[Lua(jit)LaTeX>LuaTeX]] / [[XeLaTeX>XeTeX]] / [[pdfLaTeX>pdfTeX]] / [[pLaTeX-ng>pTeX-ng]] で新ドキュメントクラスを用いた場合と同等の文書作成が可能となります。

abenori さんによる Lua(jit)LaTeX + LuaTeX-ja, upLaTeX, pLaTeX で日本語組版処理の要件を満たす日本語ドキュメントクラスも利用できます。

*** BXjscls の使用例 [#x7e2c140]

以下では,2015 年 8 月に公開された v1.x を前提に簡単に紹介します。
pLaTeX で bxjsarticle クラスを使用する例は以下のようになります。

 \documentclass[platex,dvipdfmx,ja=standard]{bxjsarticle}
 \title{{p\LaTeX}で日本語文書}
 \author{七篠 権兵衛}
 \begin{document}
 \maketitle
 
 日本で漱石が「吾輩は猫である」を発表したころ,
 ドイツではAlbert Einsteinが特殊相対論を発表した。
 \end{document}

一行目の文書クラスのオプションでは,エンジン名(必須)とドライバ名(DVI を経由する場合は必須),日本語処理の標準設定(必須)を指定します。
これを upLaTeX 用に書き変えるには,pLaTeX 用ソースの一行目と二行目を

 \documentclass[uplatex,dvipdfmx,ja=standard]{bxjsarticle}
 \title{{up\LaTeX}で日本語文書}
 …(残りは同じ)…

とします。LuaLaTeX 用に書き変えるには,同様に pLaTeX 用ソースの一行目と二行目を

 \documentclass[lualatex,ja=standard]{bxjsarticle}
 \title{{Lua\LaTeX}で日本語文書}
 …(残りは同じ)…

とします(DVI を経由しないことに注意)。

XeLaTeX と pdfLaTeX では少々ソースを書く際に注意が必要になります。
上の pLaTeX 用ソースに即した最低限の注意事項としては

- XeLaTeX / pdfLaTeX で「七篠 権兵衛」のように和文文字の間に欧文空白を入れたい場合は,空白文字の前に \ が必要です。
- pdfLaTeX の場合は和欧文間空白(四分空き)は自動的には挿入されません。代わりに,“~” が和欧文間空白を入れる命令となっています(これは pdfLaTeX の標準と異なるので注意)ので,手動で適宜これを入れる必要があります。

が挙げられますので,XeLaTeX 用の場合は

 \documentclass[xelatex,ja=standard]{bxjsarticle}
 \usepackage{metalogo} % \XeLaTeX ロゴのため
 \title{{\XeLaTeX}で日本語文書}
 \author{七篠\ 権兵衛}
 …(残りは同じ)…

となり,pdfLaTeX 用の場合は

 \documentclass[pdflatex,ja=standard]{bxjsarticle}
 \title{{pdf\LaTeX}~で日本語文書}
 \author{七篠\ 権兵衛}
 \begin{document}
 \maketitle
 
 日本で漱石が「吾輩は猫である」を発表したころ,
 ドイツでは~Albert Einstein~が特殊相対論を発表した。
 \end{document}

となります。
ほかにも注意点がいくつか挙げられますが,詳細は [[BXjscls]] を参照してください。

*** jlreq の使用例 [#oc46c91e]

[[jlreq]] を参照してください。