［改訂新版］upLaTeXを使おう

> この記事は、私（@zr_tex8r）が以前（2009～2010年）に書いた記事「[upLaTeXを使おう]」を、現在（2017年）の情勢に合わせて改訂したものである。

この文書では、主にpLaTeX使用者向けに、upTeX上で動くLaTeXである「upLaTeX」の解説を行う。またupLaTeXの機能を支援する拙作のマクロパッケージについて紹介する。

## upTeXのインストール

TeX Liveにおいては、upTeXエンジンはpTeXと同じコレクション（collection-langjapanese）に含まれている。従って、pTeXが使えるのであればupTeXも使える状態のはずである。

W32TeXの場合は、インストール対象のアーカイブにuptex-w32.tar.xzを加える。

### 周辺ツール

TeX LiveやW32TeXに含まれるdvipsやdvipdfmxはupTeXに対応している。

その他の「和文Unicode版」のツールには以下のものがある。

  * upbibtex： 和文Unicode版のBibTeX。
  * upmendex： 和文Unicode版のMakeindex。
  * upmpost： 和文Unicode版のMetaPost。

### フォントの設定

TeX Live／W32TeXの初期状態ではupTeXの標準和文フォントに対してIPAexフォントがマップされる（つまりdvipdfmxでPDF文書を作るとIPAexが埋め込まれる）。フォントの設定については以下のTeX Wikiの記事を参照。

  * [TeXとフォント／フォントを変えてみる（日本語フォント）](https://texwiki.texjp.org/?TeX%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88#q1b5e62f)

### dvioutについて

dvioutについての解説は別の記事にまとめた。

  * [dvioutでupLaTeXのDVIを扱う話](http://qiita.com/zr_tex8r/items/8b50836f719dec8b0bee)

## upLaTeX使用法：基礎編

### 文書作成時の注意

#### 文書の文字コード

upTeXの入力漢字コード（入力文書の文字コード）はUTF-8が既定になっている。従って、文書ファイルをUTF-8で作成する必要がある。（ただし、uplatexの`-kanji`オプションで入力漢字コードを変更することができる。）

> <font color="#008822">参考：</font> pTeXの既定の入力漢字コードは環境により異なり、Shift_JIS、EUC-JP、UTF-8のいずれの可能性もある。W32TeXの場合はShift_JISが既定になっている。

#### 文書クラスの指定

和文用の文書クラスに関しては、**upLaTeXに対応したもの**を用いる必要がある。標準的な文書クラスに関しては、upLaTeXに対応した設定が用意されている。具体的には、先頭の`\documentclass`の指定を次のように変える必要がある。

  * pLaTeXの標準クラス（jarticle／jreport／jbook／tarticle／treport／tbook）の場合： 先頭に`u`を付加した名前のクラスを代わりに用いる。<br>（例）`\documentclass[fleqn]{jarticle}`→`\documentclass[fleqn]{ujarticle}`
  * [jsclassesバンドル]（新ドキュメントクラス）のクラス（jsarticle／jsreport／jsbook）の場合： オプションに`uplatex`を追加する。<br>（例）`\documentclass[report,12pt]{jsbook}`→`\documentclass[report,12pt,uplatex]{jsbook}`
  * [BXjsclsバンドル]のクラス（bxjsarticle／bxjsreport／bxjsbook／bxjsslide）の場合： オプションに`uplatex`を指定する。
  * [jlreqクラス]の場合： オプションに`uplatex`を指定する。ただし省略してもよい。

欧文の文書中に日本語を混ぜる等の目的で、pLaTeXでも欧文の文書クラス（article等）が用いられることがあるが、この場合はupLaTeXでもそのまま通用させることができる。

> <font color="#DD0000">注意：</font> 和文文書クラスについては、必ず公式の説明書などを見てupLaTeX対応であることを確認すべきである。決して「uplatexで実際にコンパイルが通ったからupLaTeX対応である」と**勝手に判断してはいけない**。

#### upLaTeX文書の例

あとは、pLaTeXの文書を書くのと**ほとんど同じである**。pLaTeXで使っているパッケージは、和文と無関係のものなら必ず使えるはずであり、和文用のものもほとんどが使えることが期待できる。

```latex
% 文字コードはUTF-8にする
\documentclass[uplatex,b5j]{jsarticle} % uplatexオプションを入れる
%\documentclass[b5j]{ujarticle}        % jarticle系にしたい場合はこっち
\usepackage[scale=.8]{geometry}      % ページレイアウトを変更してみる
\usepackage[T1]{fontenc}             % T1エンコーディングにしてみる
\usepackage{txfonts}                 % 欧文フォントを変えてみる
\usepackage{plext}                   % pLaTeX付属の縦書き支援パッケージ
\usepackage{okumacro}                % jsclassesに同梱のパッケージ
\begin{document}
\title{とにかくup{\LaTeX}を使ってみる}
\author{匿名希望}
\西暦\maketitle                      % 漢字のマクロ名もOK

\section{日本語と数式}
\textbf{ゼータ関数}（zeta function）というのは
\begin{equation}                     % 数式中の漢字もOK
\zeta(s) \stackrel{定義}{=} \sum_{n=1}^\infty \frac{1}{n^s}
= \prod_{p\colon 素数}\frac{1}{1-p^{-s}}
\end{equation}
とかいう奴のこと。

\section{縦書き}
\setlength{\fboxsep}{.5zw}
縦書きの例は
\fbox{\parbox<t>{12zw}{%
  \setlength{\parindent}{1zw}
  {\TeX}（テック、テフ）はStanford大学のKnuth教授に
  よって開発された組版システムである。
  {p\TeX}は\株 アスキーが{\TeX}を日本語対応
  （縦書きを含む）にしたものである。
  \par\bigskip
  このように\bou{縦書き}についても{p\TeX}と
  全く同様に文書を作成できます。
  \par\bigskip
  平成\rensuji{20}年\rensuji{4}月\rensuji{1}日
  \par\medskip
  平成\kanji20年\kanji4月\kanji1日
}}%
こんなの。

\section{okumacroで遊んでみる}
\ruby{組}{くみ}\ruby{版}{はん}、\ruby{等}{とう}\ruby{幅}{はば}、
\keytop{Ctrl}+\keytop{A} \keytop{Del}
\keytop{Ctrl}+\keytop{S} \return、
\MARU{1}\MARU{2}\MARU{3}
\par\bigskip
\begin{shadebox}
\挨拶 それでは。敬具
\end{shadebox}

\end{document}
```

このLaTeX文書のファイル名を`test1.tex`とすると、以下のコマンドでPDF文書に変換できる。

```
uplatex test1
dvipdfmx test1
```

（表題部より下の部分の出力）

![ex01.png](https://qiita-image-store.s3.amazonaws.com/0/14550/20f419ab-7a46-f623-476a-f99a84fffdda.png)

### Unicode文字の利用：BMP内文字

単にUTF-8で入力ファイルを書くだけならば、pTeXでも可能である（起動オプションに`-kanji=utf8`を指定）が、その場合でもASCII＋JIS X 0208の外の文字を「直接」処理することはできない。これに対してupTeXは、最初からUnicodeを前提としているので、全てのUnicode文字をJISの文字と全く同様に扱うことができる。つまりjapanese-otfパッケージ等の補助を必要としない。

```latex
\documentclass[uplatex,papersize,a5paper]{jsarticle}
%
%                パッケージ読込なし！
%
\begin{document}
万有引力の法則を発見した科学者は誰か。
\begin{itemize}
\item[㋐] 森鷗外
\item[㋑] 内田百閒
\item[㋒] 鄧小平
\item[㋓] 李承燁
\item[㋔] ウィリアム・ヘンリー・ゲイツⅢ世
\item[㋕] 以上のどれでもない
\end{itemize}
\end{document}
```

![ex02.png](https://qiita-image-store.s3.amazonaws.com/0/14550/8ebb9dd8-9031-cd84-07fa-81e75a65b868.png)

ただし、**Unicode内部処理が可能なのは和文のみ**であり、欧文に関しては、upTeX は従来の8ビット欧文TeX（pdfTeXを含む）と同じ能力しか持たないことを改めて注意しておく。（欧文の処理については[後の節](#欧文のUTF-8入力との併用)を参照されたい。）「欧文文字」を和文扱いにしてUnicode内部処理を利用するというトリック[^trick]は原理的には可能であるが、和文処理を目的であるという性質に起因した様々な制限があり、またそもそもそのような用途は想定されていないので、標準のupLaTeXにそのためのサポートは存在しない。以下で、upLaTeXの和文Unicode処理に関する注意点を挙げる。

  * 実際に文字が出力（表示・印刷）されるかどうかは、その為に用いられるフォントに文字の字形（グリフ）があるかに依存する。通常、日本語用のフォントが使用されているはずなので、日本語の文脈に現れない文字（例えばジョージア文字）は使用できない。特にdvipdfmxの通常の設定では、Adobe-Japan1の字形に対応しないUnicode文字は使用できない。
  * さらに、全ての文字に対して全角幅であることを仮定している（pTeXの和文フォントと同じ）ので、例えフォントに字形が存在しても、それが**全角幅でない場合は正しく処理されない**。JIS X 0213（拡張JIS）の一部の記号（例えばU+228A[1-2-36][^u228a]“⊊”）は、日本語フォントで全角幅になっていないことが多いことに注意。JIS X 0208にあるロシア文字・ギリシャ文字は全角幅で「正常に」出力されるが、無論それはロシア語・ギリシャ語の組版としては全く役に立たない。
  * Unicode規定の文字合成、リガチャ、その他のグリフ置換は（例えフォントがその為の情報を持っていたとしても）一切適用されない。従って、JIS X 0213に含まれる文字でUnicodeでは合成が必要であるもの（例えば1-4-87[^u304b309a]“か゚”（＝304B 309A））は使用できない。
  * BMPの外にある文字については、次小節を参照。
  * 中国語・韓国語の出力については、[後の節](#中国語・韓国語の扱い)を参照。
  * pTeXと同じく、`-kanji`オプションで入力コードを指定できるが、既定のUTF-8以外の指定では直接入力可能な文字はJIS X 0208に限定され、ShiftJIS2004等の符号化方式は使えない。この場合でも、次に述べるコード入力（`\UI`）は使用できる。

Unicode文字の直接入力が困難な場合は、拙作の[pxbaseパッケージ]を読み込むと、`\UI{‹コード値の16進›}`でそのコード値の文字が出力できる。

```latex
\documentclass[uplatex,papersize,a5paper]{jsarticle}
\usepackage{pxbase} % \UIを使用する
\begin{document}
「超絶技巧練習曲」「ハンガリー狂詩曲」等の難度の高い
ピアノ曲が有名な、ハンガリー生まれの作曲家は誰か。
\begin{itemize}
\item[\UI{32D0}] 森\UI{9DD7}外
\item[\UI{32D1}] \UI{9127}小平
\item[\UI{32D2}] ウィリアム・ヘンリー・ゲイツ\UI{2162}世
\item[\UI{32D3}] いい加減にしろ
\end{itemize}
\end{document}
```

![ex03.png](https://qiita-image-store.s3.amazonaws.com/0/14550/d9afdcf3-9281-904c-1c19-75f985d26445.png)

#### 半角カタカナの扱い

upLaTeXにおいては、半角カタカナは他の和文文字と（字幅を除いて）全く同様に扱われる。すなわちUTF-8で入力して処理できる。

```latex
\documentclass[uplatex,a4paper]{jsarticle}
\begin{document}
笑った → ﾜﾗﾀ → ﾜﾛﾀ → ﾜﾛｽ
\end{document}
```

![ex04.png](https://qiita-image-store.s3.amazonaws.com/0/14550/ef893846-eb41-788b-d1d0-f9e41c4b38aa.png)

### Unicode文字の利用：BMP外の文字

upTeX自身はBMP（基本多言語面）の文字（コード値U+10000未満の文字）とそれ以外の文字（U+10000以上の文字―前述の理由で実質利用可能なのはSIP（第2面）の漢字に限られる）を区別せずに取り扱う。従って、現在のupLaTeXにおいてはBMP外の文字を使うのに特段の処置は必要としない。

```latex
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{pxbase} % \UIを使うため
\begin{document}
土屋さん / \UI{5721}屋さん / \UI{2123D}屋さん \par
土屋さん / 圡屋さん / 𡈽屋さん \par
\end{document}
```

![ex05.png](https://qiita-image-store.s3.amazonaws.com/0/14550/9c12e609-e9c7-b13f-1dad-53c6df073027.png)

しかし、**2018年2月以前**のupLaTeXにおいては、当時の周辺ツール実装の事情により、upLaTeXの既定のフォント設定[^logicalfont]では敢えてBMPの文字のみが扱えるようになっていた。ここでは古いupLaTeXでBMP外の文字を使う方法を説明する。

BMP外の文字を使える設定を簡単に手に入れるには、拙作の[pxbabelパッケージ]を用いて以下のようにすればよい。直接入力も`\UI`によるコード指定も可能である。どうしてBabelが登場するのか等は取り敢えず気にしないことにしよう（気になる人は[後の解説](#中国語・韓国語の扱い)を参照）。

> <font color="#DD0000">注意：</font> 改訂新版の本記事のpxbabelについての記述はv1.1［2017/05/29］を前提にしていて、原則として新しい簡潔な書き方を採用している。古い版ではここで挙げた書き方が使えないので注意してほしい。

```latex
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{pxbase}
\usepackage[japanese]{pxbabel} % これを追加
\begin{document}
土屋さん / \UI{5721}屋さん / \UI{2123D}屋さん \par
土屋さん / 圡屋さん / 𡈽屋さん \par
\end{document}
```

> <font color="#008822">参考：</font> BXjsclsバンドルのクラス（bxjsarticleなど）を使う場合は、古いupLaTeXにおいても最初からBMP外の文字が使える設定になっている。

### 日本語のPDFしおりの作成

pLaTeXにおいてhyperrefパッケージとdvipdfmxを用いて和文文字を含むしおりや文書情報を含んだPDF文書を作る場合、[pxjahyperパッケージ]を使う必要があった。これはupLaTeXにおいても変わらない。

```latex
\documentclass[uplatex,dvipdfmx,b5paper]{jsarticle}% ドライバ指定が必要
\usepackage[bookmarks=true,bookmarksnumbered=true,
  bookmarkstype=toc]{hyperref}
\usepackage{pxjahyper}
\hypersetup{pdftitle={upLaTeX2e怪文書作成入門},pdfauthor={絶対匿名希望},
  pdfkeywords={upTeX,upLaTeX,怪文書,Unicode,CJK}}
\begin{document}
\title{{up\LaTeXe}怪文書作成入門}
\author{絶対匿名希望}
\maketitle
\section{美しい怪文書組版のために}
  （スタブ）
\section{{up\LaTeXe}の紹介}
  （スタブ）
\section{以下省略}
\end{document}
```

![ex06.png](https://qiita-image-store.s3.amazonaws.com/0/14550/4f426302-6d4e-880d-5e5a-7bd364fd4ffa.png)

> <font color="#DD0000">注意：</font> やや直感に反するが、upLaTeXを使う場合はhyperrefに`unicode`オプションは**指定してはいけない**。（pxjahyperの0.3a版では`unicode`オプションのサポートが追加されているが、実験的機能の扱いである。）

## upLaTeX使用法：応用編

### japanese-otfパッケージの利用

upLaTeXではUnicode文字は標準で使えるが、「Unicodeでも統合（包摂）されている『葛』の2つの字体を書き分ける」とか「Unicodeにない記号を使う等の目的でAdobe-Japan1のグリフを使いたい」という場合にはjapanese-otfパッケージが必要になる。

upLaTeXで[japanese-otfパッケージ]（LaTeXパッケージ名は`otf`）を読み込む時には、`\usepackage`のオプションに`uplatex`を指定する必要がある。ただし、クラスオプションに`uplatex`がある場合はそれが“グローバルに適用される”ためパッケージでの指定は不要である[^engineopt]。

この点を除けば、あとはpLaTeXの場合と全く同じように`\CID`が使えるようになる。`\UTF`はわざわざ使う意味がないが、`otf`のオプション`multi`を指定して`\UTFC`や`\UTFM`等を使うのは有意義かもしれない。（韓国語・中国語の文字を直接書きたい場合は[後の節](#中国語・韓国語の扱い)を参照。）

```latex
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{otf}
\renewcommand{\theenumi}{\ajLabel\ajKuroMaruKaku{enumi}}
\renewcommand{\labelenumi}{\theenumi}% 番号は黒丸四角で
\begin{document}
\begin{enumerate}
\item 奈良県\CID{1481}城市
\item 東京都\CID{7652}飾区
\end{enumerate}
\end{document}
```

![ex07.png](https://qiita-image-store.s3.amazonaws.com/0/14550/62ac0cdd-6c44-3064-c8cc-89e332ab019a.png)

> <font color="#DD0000">注意：</font> `deluxe`、`expert`等でjapanese-otfのフォント設定を拡張されたものに変えている場合は、その設定がCJK言語が無効である場合にのみ機能する（「BMP外の文字の扱い」と「japanese-otfの拡張設定」が両立できていないため）ことに注意。

ちなみに、直接ソースに書いた「葛」がどちらの字体になるかはフォントの設定に依存する。

> <font color="#008822">参考：</font> dvipdfmxの場合の概略を述べておく。設定されているフォントがCID-keyedでない場合は、そのフォントが（既定の属性値で）規定した字体が選択される。一方、設定されているフォントがCID-keyedである場合は、CMapの設定に依存し、`H`/`V`または`UniJIS-UTF16-H`/`V`の場合は2000JIS／83JISの例示字体、`UniJIS2004-UTF16-H`/`V`の場合は2004JISの例示字体に対応する字体が選択される。（ちなみにこの話はJISまたはUnicodeを入力符号とする和文フォント（JFM）全てに当てはまり、japanese-otfパッケージやupTeXとは無関係である。）

### 欧文のUTF-8入力との併用

普通の（8ビットの）欧文LaTeXでUTF-8入力を扱う方法として、utf8入力エンコーディング、およびその拡張版である[ucsパッケージ]のutf8x入力エンコーディングの使用がある。これはUTF-8入力をバイト列として読み込みマクロ処理を通すことでLaTeXが持っている非英語文字出力（fontenc）の枠組に持ち込もうとするものである。（下の例でBabelはフォントエンコーディングを適切に切り替える役割を果たしている。）

```latex
% 欧文LaTeX文書; 文字コードはBOM無UTF-8
\documentclass[a5paper]{article}
\usepackage[scale=.7]{geometry}
\usepackage[LGR,T2A,T1]{fontenc}
\usepackage[utf8]{inputenc} % これで欧文 UTF-8 が扱える
\usepackage[greek,russian,english]{babel}
\begin{document}
This document contains English, Română,
\foreignlanguage{greek}{Ελληνικά}, and
\foreignlanguage{russian}{русский язык}.
\end{document}
```

![ex08.png](https://qiita-image-store.s3.amazonaws.com/0/14550/fbbebe59-6045-ce7c-f87a-80efa583b71f.png)

ところが、upLaTeXの既定の設定だと、ASCII以外の全てのUnicode文字が和文文字として解釈され（つまり入力エンコーディングの処理には回らない）、和文文字のフォントで出力しようとする。結果は、字形が表示されない、全角幅で表示される等、まともなものにならない。pTeXでは、本来欧文扱いしてほしい文字（ギリシャ文字・キリル文字の一部）がJIS X 0208に入っている時に同じ現象が起こったが、upTeXではほぼ全てのUnicode文字について起こることになる。

このため、upTeXではUnicodeのブロック毎に、それに属する文字がを和文文字として解釈するか、それともあたかも欧文TeXのようにUTF-8バイト列のままにする（そしてinputencにマクロ処理させる；これを**「欧文扱い」**と呼ぶ）かを選択することができる。この機能を支援する拙作のパッケージが[pxcjkcatパッケージ]である。このパッケージの使用法の詳細はマニュアルに任せることにし、ここでは欧文中心の文書に適した一括設定を利用することにする。次の例のように`pxcjkcat`を`prefernoncjk`オプション付きで読み込めばよい。

```latex
% upLaTeX文書; 文字コードはUTF-8
\documentclass[a5paper]{article}% 欧文用クラス
\usepackage[scale=.7]{geometry}
\usepackage[prefernoncjk]{pxcjkcat} % これを追加
\usepackage[LGR,T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[greek,russian,english]{babel}
\begin{document}
This document contains English, Română, 日本語,
\foreignlanguage{greek}{Ελληνικά}, and
\foreignlanguage{russian}{русский язык}.
\end{document}
```

![ex09.png](https://qiita-image-store.s3.amazonaws.com/0/14550/c0aaf7bc-37c4-ccb2-e721-8e3398c6867f.png)

この設定では、漢字・かな・ハングル等の明らかな「CJK文字」以外は全て欧文扱いになる。`pxcjkcat`のオプションに`prefernoncjk`の代わりに`prefercjkvar`を指定すると、ギリシャ・キリル文字は欧文扱いだが、欧文引用符（“ ”）等の句読点類は和文扱いになる。

> <font color="#008822">参考：</font> pxcjkcatの`prefernoncjk`設定では、japanese-otfパッケージの読込（`nomacros`でない場合）が失敗する。これは、これらのパッケージのマクロ名に使われている`○`や`□`等の記号が欧文扱いになるからである。この場合、japanese-otfをpxcjkcatより前に読み込めばよい。どうしても順序を変えたくない場合は、japanese-otfの読込の`\usepackage`命令を`\withcjktokenforced`の引数に入れるという方法もある。さらに、`○`等の記号が入った命令を実際に使う場合は、該当の部分を`\withcjktokenforced`に入れる必要がある。

```latex
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[prefernoncjk]{pxcjkcat}
\withcjktokenforced{\usepackage[noreplace]{otf}}
\begin{document}
\withcjktokenforced{\○秘} /  % ここでも \withcjktokenforced が必要
  % これでは面倒なのでマクロにしたい…という場合、そのマクロ
  % 定義を \withcjktokenforced に入れる必要がある。
\withcjktokenforced{\newcommand{\MaruHi}{\○秘}}
\MaruHi                       % 使うときは自由
\end{document}
```

![ex10.png](https://qiita-image-store.s3.amazonaws.com/0/14550/cccacd54-7e29-48b6-ab47-0863e5a0a502.png)

### GT書体フォントの利用

pLaTeXで「[GT書体フォント]」を使用するためのパッケージには、[gtftexパッケージ]等があるが、これはupLaTeXでは使えない。（多くの場合、和文フォントを扱うパッケージはエンコーディングの影響を受けるのでそのままではupLaTeXでは使えない。）拙作の[PXgtfontパッケージ]はpLaTeX／upLaTeXの両方に対応しているので、これを用いてGT書体フォントを利用することができる。

```latex
\documentclass[uplatex,papersize,a5paper]{jsarticle}
\usepackage{pxgtfont}
\begin{document}
これは\GI{17106}論でなく髙島屋でもない。
\end{document}
```

![ex11.png](https://qiita-image-store.s3.amazonaws.com/0/14550/5e37cebd-09eb-6536-0554-11839df4bb71.png)

### 中国語・韓国語の扱い

upTeXでは日本語、韓国語、簡体字中国語、繁体字中国語の4つの「CJK言語」（と呼ぶことにする）の為のフォント設定（TFM定義）が用意されている。これらをupLaTeXで使うために適切に設定しBabelの枠組を利用して切り替える機能を提供する拙作のパッケージが[pxbabelパッケージ]である。

このパッケージの詳細は[PXbaseバンドルの解説記事]に任せるとして、ここではpxbabelを用いた例を2つ紹介する。 最初は基底言語が英語である例である。

```latex
\documentclass[a4paper]{article}% 欧文用クラス
\usepackage[scale=.7]{geometry}
\usepackage[prefernoncjk]{pxcjkcat}
\usepackage[LGR,T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[japanese,korean,schinese,tchinese,% CJKな言語
    greek,russian,english]{pxbabel}% メインはenglish
\usepackage{pxbabel}
\begin{document}
This document contains English, Română,
\foreignlanguage{japanese}{日本語},
\foreignlanguage{korean}{한국어},
\foreignlanguage{schinese}{简体中文},
\foreignlanguage{tchinese}{繁體中文},
\foreignlanguage{greek}{Ελληνικά},
\foreignlanguage{russian}{русский язык},
and tlhIngan Hol.
\end{document}
```

![ex12.png](https://qiita-image-store.s3.amazonaws.com/0/14550/354e63ef-8145-be76-3802-9f7909bf7dfe.png)

次は基底言語が日本語である例である。

```latex
\documentclass[uplatex,papersize,a5paper]{jsarticle}
\usepackage[schinese,korean,japanese]{pxbabel}% メインはjapanese
\begin{document}
1927年に人類初の大西洋単独無着陸飛行に成功した
アメリカの飛行家は誰か。
\begin{itemize}
\item[㋐] 森鷗外
\item[㋑] \foreignlanguage{schinese}{邓小平}
\item[㋒] \foreignlanguage{korean}{이승엽}
\item[㋓] William Henry Gates III
\item[㋔] 返す言葉も無い
\end{itemize}
\end{document}
```

![ex13.png](https://qiita-image-store.s3.amazonaws.com/0/14550/6118edc3-79ff-2d63-7ce5-ee740a385643.png)

なお、現在の言語が「日本語（`japanese`）である場合」と「CJK言語以外（`english`等）である場合」は「和文」フォント（和文TFM）はともに日本語用のフォントとなるが、以下のような違いがある。

  * 日本語である場合： BMPの外の文字も使用可能な特別なフォントが設定される。
  * CJK言語以外である場合： 文書クラスで指定された既定の和文フォントが設定される。ujarticleやjsarticleの場合、これはBMPの文字しか扱えない。

[前の節](#Unicode文字の利用：BMP外の文字)で述べたBMP外の文字を扱う方法はこのインタフェースを利用したものである。

## 付録：upLaTeX機能一覧

pLaTeXと比べた場合の拡張機能、およびそれに深く関わる機能を挙げる。

### upTeXの機能

  * `\disablecjktoken`：全てのUnicode文字を「欧文扱い」にする。入力に関して8ビット欧文TeXと同じになる。
  * `\enablecjktoken`：「欧文・和文扱い」の別を「本来の状態」（和文カテゴリコードに従った状態；pxcjkcatで設定した状態）に戻す。
  * `\forcecjktoken`：ASCII文字以外のUnicode文字を「和文扱い」にする。

### pxbase／bxbaseパッケージの機能

  * `\UI{<コード値16進>,...}`：指定されたUnicode符号位置の文字を出力する。upLaTeXではupTeX自身の機能を使うので他のパッケージの補助が不要になる。

### pxcjkcatパッケージの機能

  * `\cjkcategorymode{<モード>}`：Unicode文字の「和文・欧文扱い」の別を切り替える命令。`<モード>`に指定できる値は以下の通り。なお、pxcjkcatパッケージの読込時のオプションにモード値を指定することも可能。
      * `forcecjk`：upTeXの既定の設定と同じ。ASCIIブロックのみが「欧文扱い」でそれ以外の全てが「和文扱い」となる。
      * `prefercjk`：AdobeのCJK文字集合（Adobe-Japan1等）の何れかと共通部分をもつUnicode文字ブロックの文字を「和文扱い」とし、残りを「欧文扱い」とする。
      * `prefercjkvar`：`prefercjk`において、ギリシャ文字・キリル文字を全て「欧文扱い」に変更したもの。
      * `prefernoncjk`：`prefercjkvar`において、さらに一部の句読点や記号を「欧文扱い」に変更したもの。
  * `\cjkcategory{<ブロック>,...}{<カテゴリ>}`：各Unicodeブロックの「和文カテゴリコード」を直接変更する命令。`<ブロック>`にはブロックID（例えば“Cyrillic”なら`cyrl`）または非ASCII文字1つ（その文字の属するブロックを表す）で指定する。`<カテゴリ>`は設定する「和文カテゴリコード」値であり、「`noncjk`（欧文扱い）」「`kanji`（漢字扱い）」「`kana`（仮名扱い）」「`cjk`（和文記号扱い）」「`hangul`（ハングル扱い）」のいずれかである。後ろの4つはともに「和文扱い」であるが、upLaTeXでの扱いが異なる部分がある。

### pxbabelパッケージの機能

「upTeXで用意されたCJKフォント設定を用いる」（[参照](#中国語・韓国語の扱い)）目的でpxbabelパッケージを使う場合は、パッケージ読込は次のようにする。

```latex
\usepackage[korean,schinese,tchinese,japanese]{pxbabel}
```

ここでオプションには`japanese`（日本語）、`korean`（韓国語）、`schinese`（簡体字中国語）、`tchinese`（繁体字中国語）の言語オプションのうち**必要なもの**を列挙する。これによりBabelでその名前の言語が定義され、言語を指定することで対応するフォントに切り替わるようになる。また、babelパッケージ読込時の規則と同様に、一番最後に書いたオプション（上の例の場合は`japanese`）が基底言語と見なされる。（詳細は[PXbaseバンドルの解説記事]を参照。）

この目的で最低限必要なBabelの命令を挙げておく。

  * `\foreignlanguage{<言語オプション>}{<テキスト>}`：`<テキスト>`を指定の言語で出力する。
  * `\begin{otherlanguage*}{<言語オプション>}<テキスト>\end{otherlanguage*}`［環境］：環境内のテキストを指定の言語で出力する。
  * `\selectlanguage{<言語オプション>}`：使用言語を切り替える（以降のテキストを指定の言語で出力する）。切替は局所的（グルーピングに従う）である。

[BXjsclsバンドル]: https://texwiki.texjp.org/?BXjscls
[GT書体フォント]: http://charcenter.t-engine.org/tfont/about_gt.html
[PXbaseバンドルの解説記事]: http://zrbabbler.sp.land.to/pxbase.html
[PXgtfontパッケージ]: http://zrbabbler.sp.land.to/pxgtfont.html
[gtftexパッケージ]: http://w32tex.org/index-ja.html
[japanese-otfパッケージ]: https://www.ctan.org/pkg/japanese-otf
[jlreqクラス]: https://github.com/abenori/jlreq
[jsclassesバンドル]: https://texwiki.texjp.org/?jsclasses
[pxbabelパッケージ]: http://zrbabbler.sp.land.to/pxbase.html#sec-pxbabel
[pxbaseパッケージ]: http://zrbabbler.sp.land.to/pxbase.html#sec-bxbase
[pxcjkcatパッケージ]: http://zrbabbler.sp.land.to/pxbase.html#sec-pxcjkcat
[pxjahyperパッケージ]: https://github.com/zr-tex8r/PXjahyper
[ucsパッケージ]: https://www.ctan.org/pkg/ucs
[upLaTeXを使おう]: http://zrbabbler.sp.land.to/uplatex.html

[^trick]: これを実行するには“プロポーショナル幅をもつ和文VFを作る”等の高度な技術が必要になる。かつて、実際にそのようなトリックを実験的に行っていた例が存在した。
[^u228a]: SUBSET OF WITH NOT EQUAL TO/真部分集合2
[^u304b309a]: 半濁点付き平仮名か
[^engineopt]: 従って、jsclassesやBXjsclsのクラスを使う場合は、クラスオプションで`uplatex`を指定するのでパッケージ側のオプションは普通指定しない。標準クラスはそれ自身は`uplatex`を見ないが、その場合でもjapanese-otfの`uplatex`をクラスの側に指定することもできる。だから、「`uplatex`が必要なら必ずクラスの側につける」という習慣にしておくのもいいだろう。
[^logicalfont]: なお、ここでいう「フォント設定」とは所謂「論理フォント（TFM定義）」のことで、DVIウェアのフォントマップ設定とは無関係である。）