.

.

⽇本⼈の知らない TEXTEX の過去・現在・未来

.

.

...

⼋登
崇之
Takayuki YATO
2010 年 10 ⽉ 23 ⽇
TEX ユーザの集い 2010

⼋登崇之

⽇本⼈の知らない TEX

. 衝撃の事実?

唐突ですが…

⼋登崇之

⽇本⼈の知らない TEX

今どき、TEX なんて
誰も使っていない！

（TRIP テストの意味で）

今どき、TEX なんて
誰も使っていない！

. LTEX を動かす「エンジン」
A

⽇本で使われるのは pLATEX→ エンジンは pTEX

⼋登崇之

⽇本⼈の知らない TEX

. LTEX を動かす「エンジン」
A

⽇本で使われるのは pLATEX→ エンジンは pTEX
海外では pdfLATEX が主流→ エンジンは pdfTEX

⼋登崇之

⽇本⼈の知らない TEX

. LTEX を動かす「エンジン」
A

⽇本で使われるのは pLATEX→ エンジンは pTEX
海外では pdfLATEX が主流→ エンジンは pdfTEX
海外でも DVI 出⼒することがあるが……

→ やはり pdfTEX！
⼋登崇之

⽇本⼈の知らない TEX

. TEX の誕⽣と「終結」、その先
.
TX
.. E

.

作者： Donald E. Knuth
1978 年： 最初の公開版「TEX78」。SAIL ⾔語1982 年： 再実装版「TEX82」˛ 版。Pascal ⾔語
1983 年： TEX82 の 1.0 版
1990 年 3 ⽉： 3.0 版。7 ビット → 8 ビット
1990 年 9 ⽉： 3.1 版。 「終結宣⾔」
2008 年 2 ⽉： 3.1415926 版。最新版.

.

1990 年 9 ⽉： Knuth による「終結宣⾔」.
「TEX はこれ以上拡張しない」
.
..

⼋登崇之

⽇本⼈の知らない TEX

.
.

.

...

. TEX の誕⽣と「終結」、その先
.
TX
.. E

.

作者： Donald E. Knuth
1978 年： 最初の公開版「TEX78」。SAIL ⾔語1982 年： 再実装版「TEX82」˛ 版。Pascal ⾔語
1983 年： TEX82 の 1.0 版
1990 年 3 ⽉： 3.0 版。7 ビット → 8 ビット
1990 年 9 ⽉： 3.1 版。 「終結宣⾔」
2008 年 2 ⽉： 3.1415926 版。最新版

.

.

...

.

.

1990 年 9 ⽉： Knuth による「終結宣⾔」.
.
「TEX はこれ以上拡張しない」
.
..
.
.
.
「拡張版 TEX」は確実に進化を続けている. しかし、..
.
⼋登崇之

⽇本⼈の知らない TEX

. 発表のアウトライン
.
過去
..

.
TEX からpdfTEXへ
Omega の⽬指したもの.
現在..
XETEX の紹介ŰŰŰ.

⽇本語処理の違い： pTEX vs XETEX
.
.
未来
..
XELATEX で⽇本語する件について.

未来標準 TEX： LuaTEX.
..

⽇本⼈がまだ知らない⽇本語 TEX.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

.

.
..

.

エンコーディングの話

. ⽇本⼈の知っている TEX…の話は割愛します
.
pT X
.. E
作者＝ 株式会社アスキー・メディアワークス.

1980 年代後半： アスキー⽇本語 TEX
.
..
.
upT X
.. E
作者＝ ⽥中 琢爾.

2007 年： 開発開始
2010 年 4 ⽉： 0.30 版（最新版）.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

.

1990 年?： 「pTEX」初公開
2009 年 8 ⽉： 3.1.11 版（最新版）

. TEXnical な話は⾃重します
LATEX が普通に使える⽅向けの話です。
ただしごく稀に…

⼋登崇之

⽇本⼈の知らない TEX

. TEXnical な話は⾃重します
LATEX が普通に使える⽅向けの話です。
ただしごく稀に…
.

.



...

.

.

TEX レベルの話が出ることをご容赦ください。
⼋登崇之

⽇本⼈の知らない TEX

. 第 1 部： 過去
.
過去
..

.
TEX からpdfTEXへ
Omega の⽬指したもの.
現在..
XETEX の紹介ŰŰŰ.

⽇本語処理の違い： pTEX vs XETEX
.
.
未来
..
XELATEX で⽇本語する件について.

未来標準 TEX： LuaTEX.
..

⽇本⼈がまだ知らない⽇本語 TEX.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

.

.
..

.

エンコーディングの話

.
"-T X
.. E
作者： The NT S Team.

1996 年： 1.1 版

1998 年： 2.0 版（最終版）

.
..

.

.
pdfTEX..

.

.

作者： Hàn Thế Thành.

1997 年： 最初の公開版
2010 年 7 ⽉： 1.40.11 版（最新版）※. 現在の pdfTEX は "-TEX 拡張を含む..
⼋登崇之

⽇本⼈の知らない TEX

.

.

.

.
.海外の「標準 TEX」の変遷 .
..
.

.

. TEX からpdfTEX へ
TEX. エンジンと起動コマンド
2005 年辺りの状況……
エンジン
TEX
"-TEX
pdfTEX（括弧内は起動コマンド名）

Plain TEX
Plain TEX (tex)Plain "-TEX (etex)
Plain pdfTEX (pdftex)

LATEX
LATEX (latex)"-LATEX (elatex)
pdfLATEX (pdflatex)※ 実際には「pdfTEX」と「pdf-"-TEX」があった

⼋登崇之

⽇本⼈の知らない TEX

. エンジンと起動コマンド
現在の状況……
エンジン
TEX
"-TEX
pdfTEX（括弧内は起動コマンド名）

Plain TEX
Plain TEX (tex)Plain "-TEX (etex)
Plain pdfTEX (pdftex)

LATEX
LATEX (latex)
pdfLATEX (pdflatex)※ LATEX は "-TEX 拡張のもののみ存在※ ⻩⾊ の部分は pdfTEX エンジンを使⽤（今の「"-TEX」の正体は pdfTEX の DVI モード）

⼋登崇之

⽇本⼈の知らない TEX

. エンジンと起動コマンド
現在の状況……
エンジン
TEX
"-TEX
pdfTEX（括弧内は起動コマンド名）

Plain TEX
Plain TEX (tex)Plain "-TEX (etex)
Plain pdfTEX (pdftex)

LATEX
LATEX (latex)
pdfLATEX (pdflatex)「pTEX」との組合せ
pTEX + "-TEX → "-pTEX（作者：北川弘典）
最新＝2010 年 4 ⽉。W32TEX に収録。
pTEX + pdfTEX はまだ無い※ この点をどう考えるかは後述
⼋登崇之

⽇本⼈の知らない TEX

. "-TEX の特⻑
TEX--XET 拡張： 右→左に書く⽂字への対応Ято ‫ יאתו‬Τακαγιούκι ‫ﺗﺎﻛﺎﻳﻮﻛﻲ‬\middle 命令：D

˛ @2 ˛ E
˛
˛
˛
˛ ffi
2
@t

レジスタ数の増加（256 → 32768）
値を式で表す： \count999=\numexpr1+(2+3)*4
TEX プログラミングを容易にする機能…
\ifcsname、\detokenize、\unexpanded、\iffontchar、\unless、\tracingifs、\scaktokens、……

⼋登崇之

⽇本⼈の知らない TEX

. "-TEX の特⻑
TEX--XET 拡張： 右→左に書く⽂字への対応Ято ‫ יאתו‬Τακαγιούκι ‫ﺗﺎﻛﺎﻳﻮﻛﻲ‬\middle 命令：.
...

˛ @2 ˛ E
˛
˛
˛
˛ ffi
2
@t

レジスタ数の増加（256 → 32768）
値を式で表す： \count999=\numexpr1+(2+3)*4
TEX プログラミングを容易にする機能…
\ifcsname、\detokenize、\unexpanded、\iffontchar、\unless、\tracingifs、\scaktokens、……

⽇本⼈ LATEX ユーザには関係がない……？

.
.

.



D

⼋登崇之

⽇本⼈の知らない TEX

. "- のない TEX は……
最近は "-TEX を要求されることが増えている
KOMA-Script ⽂書クラス
animate パッケージ
csquotes パッケージ
chemfig パッケージ
moderncv ⽂書クラス
ConTEXt（……他多数）LATEX3（開発中の次世代 LTEX）
A

⼋登崇之

⽇本⼈の知らない TEX

. "- のない TEX は……
最近は "-TEX を要求されることが増えている
KOMA-Script ⽂書クラス
animate パッケージ
csquotes パッケージ
chemfig パッケージ
moderncv ⽂書クラス
ConTEXt（……他多数）LATEX3（開発中の次世代 LTEX）
A.
..

"-TEX がないと未来がない！
⼋登崇之

⽇本⼈の知らない TEX

.
.

.

.

. pdfTEX の特⻑
PDF ファイルを直接出⼒する
TEX → DVI.→ PDF「Microtypography」―――段落組の更なる品質向上
Mergin kerning （≒ ぶら下げ組）
Font expansion （後述）
Letter spacing （字間調節）

その他の便利な機能

現在の絶対位置取得（\pdfsavepos）

⼋登崇之

⽇本⼈の知らない TEX

. PDF を直接出⼒するメリット

⼋登崇之

⽇本⼈の知らない TEX.
.

.

私⾒では……
.
機能拡張が容易になる...

. PDF を直接出⼒するメリット.
.

.

私⾒では……
.
機能拡張が容易になる...
「Microtypography」の例を観る：.
Font expansion..
語間空⽩の伸張を抑えるためにごく僅かだけ字形が伸張するのを許す.

.

← 伸縮なし← 空⽩を伸張← 字形を伸張

..

.
⼋登崇之

⽇本⼈の知らない TEX.

..

Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
adipisicing elit, sed do eiusmod tempor. 「⾮英語⽂字」の常識・⾮常識「⾮英語⽂字」（û ț ø ð）の⼊⼒は LATEX の基本だが……
.
ラテン⽂字
..

.

←Ich m\"ochte s\"u{\ss}eren K\"ase!
←Ich
m"ochte s"u"seren K"ase!（Babel）
.
..
.
キリル⽂字
..

.

.

Ich möchte süßeren Käse!

.

←Oqenp1
horoxo!（OT2 エンコーディング）
.
..

⼋登崇之

⽇本⼈の知らない TEX.

.

Очень хорошо!

. 「⾮英語⽂字」の常識・⾮常識「⾮英語⽂字」（û ț ø ð）の⼊⼒は LATEX の基本だが……
.
ラテン⽂字
..

.

←Ich m\"ochte s\"u{\ss}eren K\"ase!
←Ich
m"ochte s"u"seren K"ase!（Babel）
.
..
.
キリル⽂字
..

.

.

Ich möchte süßeren Käse!

.

.

.

.

8 ビット欧⽂ LATEX では
⾮英語⽂字は「直接」書けない？
.
..

× süßeren
⼋登崇之

⽇本⼈の知らない TEX.

.

←Oqenp1
horoxo!（OT2 エンコーディング）.
..

.

Очень хорошо!

. 「⾮英語⽂字」の常識・⾮常識「⾮英語⽂字」（û ț ø ð）の⼊⼒は LATEX の基本だが……
.
ラテン⽂字
..

.

←Ich m\"ochte s\"u{\ss}eren K\"ase!
←Ich
m"ochte s"u"seren K"ase!（Babel）
.
..
.
キリル⽂字
..

.

.

Ich möchte süßeren Käse!

.

←Oqenp1
horoxo!（OT2 エンコーディング）
.
..

誤解です！
⼋登崇之

⽇本⼈の知らない TEX.

.

Очень хорошо!

. 「⾮英語⽂字」を直接書く
例えば Latin-1 の環境では……
.
ASCII ⼊⼒..
% in US-ASCII\documentclass{article}%\usepackage[T1]{fontenc}\usepackage{mathpazo}\usepackage[german]{babel}\begin{document}.

\end{document}
.
..

.
.

.

.

Tsch\"u{\ss}!

Tschüß!
⼋登崇之

⽇本⼈の知らない TEX

. 「⾮英語⽂字」を直接書く
inputenc を追加するだけで直接書ける！
.
ASCII ⼊⼒..
% in US-ASCII\documentclass{article}%\usepackage[T1]{fontenc}\usepackage{mathpazo}\usepackage[german]{babel}\begin{document}

.

.
.

.

\end{document}.
..

Tschüß!
⼋登崇之

⽇本⼈の知らない TEX.

.

\end{document}.
..

Tschüß!
.

Tsch\"u{\ss}!

.
Latin-1 ⼊⼒.
..
% in Latin-1\documentclass{article}\usepackage[latin1]{inputenc}\usepackage[T1]{fontenc}\usepackage{mathpazo}\usepackage[german]{babel}\begin{document}. 「⾮英語⽂字」を直接書く
キリル⽂字も同様、UTF-8 も OK！

Привет!

Привет!

\end{document}
.
..

.
.

.

\end{document}.
..

Привет!
⼋登崇之

⽇本⼈の知らない TEX

.

.

.

.
UTF-8 の例..
% in UTF-8\documentclass{article}\usepackage[utf8]{inputenc}\usepackage[T2A]{fontenc}\usepackage{tgpagella}\usepackage[russian]{babel}\begin{document}.

.
KOI8-R の例.
..
% in KOI8-R\documentclass{article}\usepackage[koi8-r]{inputenc}\usepackage[T2A]{fontenc}\usepackage{tgpagella}\usepackage[russian]{babel}\begin{document}

. LTEX の⽂字コード処理A.8 ビット⼊⼒の処理⽅式
Latin-1

ü.⼊⼒ .

KOI8-R

д

.

FC

UTF-8

.

д

.ASCII は直接処理
ASCII

.

D0 B4

C4

d
64

.inputenc.\cyrd

.\"u

. ICR
L
.fontenc

T1

.出⼒ .

ü.
FC

T2A

.

(O)T1

OT2

д
E4

⼋登崇之

.

д
64

⽇本⼈の知らない TEX

.

d
64

. Omega (Ω): 最初の Unicode TEX
Omega← 16 ビット TEX + 多書字⽅向 + ¸.

.

Omega (Ω)..
作者： Yannis Haralambous、John Plaice2002 年?： 1.23 版（最終版）.
..
.
Unicode の歴史
..

.

.

1994 年?： 開発開始.

1991 年： 1.0 版（16 ビット）1993 年： UTF-8 の提案.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

1996 年： 2.0 版（16 ビット超に拡張）2001 年： 3.1 版（16 ビット超を使⽤）2009 年： 5.2 版（最新版）

. Omega の特⻑／⽬標

23‫יאתו‬



レジスタ 65536 個
ΩTP (Ω Translation Process)
⼊⼒フィルタ壮⼤な構想……
⾃然⾔語処理との連携、XML 処理……
⼋登崇之

⽇本⼈の知らない TEXtaèyuêĆ

10

Yato ‫יאתו‬

und

22

②

左→右、右→左、上→下、縦中横……

yadĞ

多書字⽅向

①

ただし 16 ビット）

yadĞ

⼀︑ヤトウ
︒
Ято
⼆︑平成 年 ⽉ ⽇

Unicode 対応

. Omega 中⽌のお知らせ

2003 年以降、開発は中断「安定版」は現れず……

中途段階の「完成版」が出なかった
要求のミスマッチ（開発者／使⽤者）
フォントを使うための前処理が煩雑

⼋登崇之

⽇本⼈の知らない TEX

. 第 2 部： 現在
.
過去
..

.
TEX からpdfTEXへ
Omega の⽬指したもの.
現在..
XETEX の紹介ŰŰŰ.

⽇本語処理の違い： pTEX vs XETEX
.
.
未来
..
XELATEX で⽇本語する件について.

未来標準 TEX： LuaTEX.
..

⽇本⼈がまだ知らない⽇本語 TEX.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

.

.
..

.

エンコーディングの話

. XETEX: 現代の Unicode TEX
XETEX ← "-TEX + Unicode + OpenType.
XTX.. E E
作者： Jonathan Kew.

1990 年代半ば： TEXGX（前⾝）2004 年 4 ⽉： 初公開版（Mac 専⽤）
2006 年 4 ⽉： Linux 版
2006 年 6 ⽉： Windows 版（作者 = ⾓藤 亮）

⼋登崇之

⽇本⼈の知らない TEX.

.

2010 年 9 ⽉： 0.9997.4 版（最新版）.
..
※ XETEX のバージョン番号は 1 に収束する……
のではないらしい

. XETEX の出⼒例.

佛説摩訶般若波羅蜜多⼼經ापार मता दयसू म्।

prajñā-pāramitā-hṛdaya-sūtram
Сутра сердца праджня-парамиты
.

⼋登崇之

⽇本⼈の知らない TEX

. 先の例のソース% ⽂字コードはUTF-8\documentclass[a4paper]{article}\usepackage{xltxtra}.
\setlength{\parindent}{0pt} .フォント名\begin{document}\fontspec[CJKShape=Traditional]{IPAexMincho}
仏説摩訶般若波羅蜜多⼼経 \par\fontspec[Script=Devanagari]{Chandas}ापार मता दयसू म्। \par}{\large\fontspec{TeX Gyre Termes}\textit{prajñā-pāramitā-hṛdaya-sūtram}\par\fontspec[Scale=0.9]{TeX Gyre Schola}Сутра сердца праджня-парамиты\par\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. XETEX の特⻑「普通の Unicode アプリ」の機能
内部 Unicode 処理、UTF-8 ⼊⼒
OS にインストールされたフォントが使える
⾼度な OpenType レンダリング

.
.
.
..

ज ◌् ञ ◌ा. trad+.
.

ाTEX の「⾮依存性」の理念からの脱却
⼋登崇之

⽇本⼈の知らない TEX

.
.

.

.

. XELTEX vs 8 ビット LTEXAA

XELATEX ⽂書の書き⽅を対⽐の形で説明する。
⽂書例：.

EnglishFrançais

How are you?
Long time no see.
My hovercraft isfull of eels.

Comment ça va ?
Ça fait longtemps.
Mon aéroglisseur est
plein d’anguilles.

.
※ Babel 関係は省略（XELATEX では代わりに Polyglossia を使う）
⼋登崇之

⽇本⼈の知らない TEX

. 8 ビット LTEX ソース
A% ⽂字コードはUTF-8\documentclass[a4paper]{article}\usepackage[utf8]{inputenc} % UTF-8⼊⼒エンコーディング\usepackage[T1]{fontenc}% T1フォントエンコーディング\renewcommand{\rmdefault}{ptm}% \rmfamilyはTimes\usepackage[scaled=0.95]{helvet} % \sffamilyはHelvetica\normalfont\begin{document}\begin{center}\begin{tabular}{p{7em}|p{9em}}\hline\centering\sffamily English &\centering\sffamily Français \tabularnewline\hline
How are you? & Comment ça va\,? \\\hline
Long time no see. & Ça fait longtemps. \\\hline
My hovercraft is full of eels. &Mon aéroglisseur est plein d'anguilles.\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. XELTEX ソースに修正中…
A% ⽂字コードはUTF-8\documentclass[a4paper]{article}% inputenc、fontenc は不要%\renewcommand{\rmdefault}{ptm}% \rmfamilyはTimes\usepackage[scaled=0.95]{helvet} % \sffamilyはHelvetica\normalfont\begin{document}\begin{center}\begin{tabular}{p{7em}|p{9em}}\hline\centering\sffamily English &\centering\sffamily Français \tabularnewline\hline
How are you? & Comment ça va\,? \\\hline
Long time no see. & Ça fait longtemps. \\\hline
My hovercraft is full of eels. &Mon aéroglisseur est plein d'anguilles.\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. XELTEX ソースに修正中…
A% ⽂字コードはUTF-8\documentclass[a4paper]{article}\usepackage{xltxtra} とにかくこれを⼊れる%\renewcommand{\rmdefault}{ptm}% \rmfamilyはTimes\usepackage[scaled=0.95]{helvet} % \sffamilyはHelvetica\normalfont\begin{document}\begin{center}\begin{tabular}{p{7em}|p{9em}}\hline\centering\sffamily English &\centering\sffamily Français \tabularnewline\hline
How are you? & Comment ça va\,? \\\hline
Long time no see. & Ça fait longtemps. \\\hline
My hovercraft is full of eels. &Mon aéroglisseur est plein d'anguilles.\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. フォント指定の⽅法.
8 ビット LATEX の場合..
既定は「Computer Modern」のセット。Hello!
\renewcommand{\rmdefault}{ptm} \rmfamily を Times に\renewcommand{\sfdefault}{phv} \rmfamily を Helvetica に.

.

多くの場合「フォントパッケージ」を使う。
\usepackage[scale=0.95]{helvet} スケールした Helvetica\usepackage{libertine}
Libertine フォント.
..
.
XELATEX の場合..
既定は「Latin Modern」のセット。Namaskāraḥ!

.

.

フォント指定の際に「属性」を指定可能。
\setmainfont[Scale=0.92,Numbers=OldStyle]{TeX
Gyre Pagella}.
..
※ 「TEX Gyre コレクション」は「Adobe 基本 35 書体」のクローン。
※ 数式フォントの話は割愛。
⼋登崇之

⽇本⼈の知らない TEX.

.

\setmainfont{TeX Gyre Termes} \rmfamily の実体\setsansfont{TeX Gyre Heros} \sffamily の実体\setmonofont{TeX Gyre Cursor} \ttfamily の実体\newfontfamily{\libertine}{Linux Libertine} 新しいファミリ命令{\fontspec{みかちゃん} ⽇本語} その場で切替

. XELTEX ソースに修正完了
A% ⽂字コードはUTF-8\documentclass[a4paper]{article}\usepackage{xltxtra}%\setmainfont[Mapping=tex-text]{TeX Gyre Termes}\setmainfont[Scale=0.95]{TeX Gyre Heros}%\begin{document}\begin{center}\begin{tabular}{p{7em}|p{9em}}\hline\centering\sffamily English &\centering\sffamily Français \tabularnewline\hline
How are you? & Comment ça va\,? \\\hline
Long time no see. & Ça fait .longtemps. \\\hline
My hovercraft is full of eels. &Mon aéroglisseur est plein d'anguilles.\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. 再度結果を確認.

.

[Mapping=tex-text] 属性の効⽤：

’

.

.

'

...
.
EnglishFrançais

How are you?
Long time no see.
My hovercraft isfull of eels.

Comment ça va ?
Ça fait longtemps.
Mon aéroglisseur est
plein d’anguilles.

.
⼋登崇之

⽇本⼈の知らない TEX

. ⽇本語を含む⽂書
XETEX では和⽂・欧⽂の区別をしないので、⽇本語 が⼊っても処理できる……
\documentclass[a4paper]{article}\usepackage{xltxtra}\setmainfont{IPAMincho} % IPA明朝\setsansfont{IPAGothic} % IPAゴシック\begin{document}\begin{center}\begin{tabular}{p{7em}|p{12em}}\hline\centering\sffamily English &\centering\sffamily ⽇本語 \tabularnewline\hline
How are you? & もうかりまっか。 \\\hline
Long time no see. & やっとかめ！ \\\hline
My hovercraft is full of eels. &私のホバークラフトは鰻でいっぱいです。\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. 組版結果は⼤惨事
でも和⽂・欧⽂の区別をしないので……

... 欧⽂も等幅になってしまう！
1.
EnglishHow are you?
Long time nosee.
My hovercraft isfull of eels.

日本語
もうかりまっか。
やっとかめ！

私のホバークラフトは鰻でいっぱいで.
⼋登崇之

⽇本⼈の知らない TEX

. 組版結果は⼤惨事
でも和⽂・欧⽂の区別をしないので……

..... 欧⽂も等幅になってしまう！
. 和⽂⽂字列中で改⾏されない！
欧⽂の理屈だと当然改⾏できない
1
2.

EnglishHow are you?
Long time nosee.
My hovercraft isfull of eels.

日本語
もうかりまっか。
やっとかめ！

私のホバークラフトは鰻でいっぱいで.
⼋登崇之

⽇本⼈の知らない TEX

. 対処法... 「和⽂等幅、欧⽂可変幅」のフォントを使う。
1

⼋登崇之

⽇本⼈の知らない TEX.
.

.

※ 下記の属性指定が必要！
.
（IPAex 明朝の場合）\setmainfont[RawFeature=-palt]{IPAexMincho}.
..

. 対処法... 「和⽂等幅、欧⽂可変幅」のフォントを使う。
1

.
.

.

※ 下記の属性指定が必要！
.
（IPAex 明朝の場合）\setmainfont[RawFeature=-palt]{IPAexMincho}.
..
.2. 以下の TEX コードを挿⼊する。

.

Unicode 規定の⾏分割処理が有効になる。
（⽇本語の「禁則処理」も含まれる。）※ この為のパッケージはまだ無い。
⼋登崇之

⽇本⼈の知らない TEX

.
.

.

.
\XeTeXlinebreaklocale "ja"
\XeTeXlinebreakskip=0pt plus 1pt\XeTeXlinebreakpenalty=0.
..

. 修正後の⽂書\documentclass[a4paper]{article}\usepackage{xltxtra}\XeTeXlinebreaklocale "ja"
\XeTeXlinebreakskip=0pt plus 1pt\XeTeXlinebreakpenalty=0\setmainfont[RawFeature=-palt]{IPAexMincho} % IPAex明朝\setsansfont[RawFeature=-palt]{IPAexGothic} % IPAexゴシック\begin{document}\begin{center}\begin{tabular}{p{7em}|p{12em}}\hline\centering\sffamily English &\centering\sffamily ⽇本語 \tabularnewline\hline
How are you? & もうかりまっか。 \\\hline
Long time no see. & やっとかめ！ \\\hline
My hovercraft is full of eels. &私のホバークラフトは鰻でいっぱいです。\\\hline\end{tabular}\end{center}\end{document}
⼋登崇之

⽇本⼈の知らない TEX

. 組版結果.
EnglishHow are you?
Long time nosee.
My hovercraft isfull of eels.

⽇本語
もうかりまっか。
やっとかめ！
私のホバークラフトは鰻でいっぱいです。

.

⼋登崇之

⽇本⼈の知らない TEX

. XELTEX の⽂字コード処理
A

XELATEX では全ての⽂字を「直接処理」する
.⼊⼒

.

ü

UTF-8

.

C2 BC

д

UTF-8

.

.

C4

E0 A4 95

.\"u
EU1

.出⼒

.

ü.

00FC

EU1

.

д

0434

क

UTF-8

क

d
64

EU1

EU1

.

.

0915

d

0064

※「ASCII ⼊⼒」は XELATEX でも使⽤可能.
namask\=ara\d{h}namaskāraḥ
.
..
⼋登崇之

⽇本⼈の知らない TEX

.
.

.

UTF-8

. ⽇本語処理の違い： pTEX vs XETEX
和欧⽂の区別pTEX［upTEX］
する

XETEX
しない

符号空間

（欧⽂）8 ビット（和⽂）JIS X 0208
［Unicode］

Unicode"-TEX拡張
禁則処理

無‡

有

○

○

約物の空⽩調整

○

×

縦書き

○

×

ルビ・割注

×

×

‡ "-[u]pTEX なら有り

⼋登崇之

⽇本⼈の知らない TEX

. ⽇本語処理の違い： pTEX vs XETEX
XETEX
しない

符号空間

（欧⽂）8 ビット（和⽂）JIS X 0208
［Unicode］

Unicode"-TEX拡張
禁則処理

無‡

有

○

○

約物の空⽩調整

○

×

縦書き

○

×

ルビ・割注

×

×

‡ "-[u]pTEX なら有り.
× = 「TEX マクロを組め！」
.
..

⼋登崇之

⽇本⼈の知らない TEX.
.

.

和欧⽂の区別pTEX［upTEX］
する. 第 3 部： 未来
.
過去
..

.
TEX からpdfTEXへ
Omega の⽬指したもの.
現在..
XETEX の紹介ŰŰŰ.

⽇本語処理の違い： pTEX vs XETEX
.
.
未来
..
XELATEX で⽇本語する件について.

未来標準 TEX： LuaTEX.
..

⽇本⼈がまだ知らない⽇本語 TEX.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

.

.
..

.

エンコーディングの話

.
現状の XELATEX は⽇本語⽂書を作れるか？
..

「⽇本の出版業界での伝統的な組版の要件」をどこまで要求するかの⽴場に依存する
各⽂字記号の字幅
適切な⾏送り禁則処理
約物の前後の空き・和欧⽂間の空き
縦書き・縦中横
圏点・ルビ

.

漢⽂・割注

. これはひどい…

⼋登崇之

⽇本⼈の知らない TEX

.
.

.

.
.
..

「TEXユーザの集い2010」は，TEXに関する研究・開発や活用
例・作品例について発表すること，（TEXに限らず）編集・組版・印刷について理解を共有すること，TEXを扱う技能を向上させること，参加者同士で交友を深めることなどを目的として開催することになりました。
昨年の「TEXユーザの集い2009」は，（実行委員会の知る限り）
TEXの名の下に国内でユーザ・開発者が集まるひさしぶりの機会
で，113名の方にご参加いただきました。参加者のうち79名からご回答いただいたアンケートを元に，今年は昨年に比べて多種多様なセッション——ポスター発表，パネルディスカッション，企画「出張！
TEX Q & A」——を加えています。それぞれにお楽しみいただけるものと願っています。
この1年間を振り返ると，電子書籍についての話題が世の中を席巻していました。バッチ処理や数式処理などの点でTEXへの期待も漏れ聞くところではあります。 一方，TEX界や出版印刷業界に目を向けると，電子書籍かどうかに関わり無く，世界の開発は進んでい
ますし，いままでの業務も遂行されています。今回の集会では，参加者間で，現在までの動向をきちんと共有し，新たな潮流へと向かう共
article クラス、A5 縦、IPA P 明朝／ゴシック
通基盤が形成されることを期待しています。

. 悲劇を⽣み出す要因.

.

⽇本語⽤の⽂書クラスがない「TEXユーザの集い2010」は，TEXに関する研究・開発や活用

例・作品例について発表すること，（T Xに限らず）編集・組版・印刷

.
..

ました。
昨年の「TEXユーザの集い2009」は，（実行委員会の知る限り）
TEXの名の下に国内でユーザ・開発者が集まるひさしぶりの機会
で，113名の方にご参加いただきました。参加者のうち79名からご回答いただいたアンケートを元に，今年は昨年に比べて多種多様なセッション——ポスター発表，パネルディスカッション，企画「出張！
TEX Q & A」——を加えています。それぞれにお楽しみいただけるものと願っています。
この1年間を振り返ると，電子書籍についての話題が世の中を席巻していました。バッチ処理や数式処理などの点でTEXへの期待も漏れ聞くところではあります。 一方，TEX界や出版印刷業界に目を向けると，電子書籍かどうかに関わり無く，世界の開発は進んでい
ますし，いままでの業務も遂行されています。今回の集会では，参加者間で，現在までの動向をきちんと共有し，新たな潮流へと向かう共通基盤が形成されることを期待しています。
⼋登崇之

⽇本⼈の知らない TEX.

.

E
jsarticle
等の pLATEX ⽤の⽂書クラスはについて理解を共有すること，T
EXを扱う技能を向上させること，参X加者同士で交友を深めることなどを目的として開催することになり
ELATEX では使えない。

. 悲劇を⽣み出す要因.

.

⽇本語⽤の⽂書クラスがない「TEXユーザの集い2010」は，TEXに関する研究・開発や活用

例・作品例について発表すること，（T Xに限らず）編集・組版・印刷

E
jsarticle
等の pLATEX ⽤の⽂書クラスはについて理解を共有すること，T
EXを扱う技能を向上させること，参X加者同士で交友を深めることなどを目的として開催することになり
LAT X では使えない。
.E E

.

⼋登崇之

⽇本⼈の知らない TEX

.

.
..

ました。
.
昨年の「TEXユーザの集い2009」は，（実行委員会の知る限り）
誰かが作ろうとしない限りどうにもならない。
. TEXの名の下に国内でユーザ・開発者が集まるひさしぶりの機会. .で，113名の方にご参加いただきました。参加者のうち79名からご . .
回答いただいたアンケートを元に，今年は昨年に比べて多種多様なセッション——ポスター発表，パネルディスカッション，企画「出張！
TEX Q & A」——を加えています。それぞれにお楽しみいただけるものと願っています。
この1年間を振り返ると，電子書籍についての話題が世の中を席巻していました。バッチ処理や数式処理などの点でTEXへの期待も漏れ聞くところではあります。 一方，TEX界や出版印刷業界に目を向けると，電子書籍かどうかに関わり無く，世界の開発は進んでい
ますし，いままでの業務も遂行されています。今回の集会では，参加者間で，現在までの動向をきちんと共有し，新たな潮流へと向かう共通基盤が形成されることを期待しています。

. 悲劇を⽣み出す要因.

.

⽇本語⽤の⽂書クラスがない「TEXユーザの集い2010」は，TEXに関する研究・開発や活用

例・作品例について発表すること，（T Xに限らず）編集・組版・印刷

E
jsarticle
等の pLATEX ⽤の⽂書クラスはについて理解を共有すること，T
EXを扱う技能を向上させること，参X加者同士で交友を深めることなどを目的として開催することになり
LAT X では使えない。
.E E

.
..

.

.
.

.
..
.

ました。
.
昨年の「TEXユーザの集い2009」は，（実行委員会の知る限り）
誰かが作ろうとしない限りどうにもならない。
. TEXの名の下に国内でユーザ・開発者が集まるひさしぶりの機会. .で，113名の方にご参加いただきました。参加者のうち79名からご . .
回答いただいたアンケートを元に，今年は昨年に比べて多種多様なセッション——ポスター発表，パネルディスカッション，企画「出張！
.
TEX Q & A」——を加えています。それぞれにお楽しみいただけるも
⽇本語⽤⾏組版規則に沿った空⽩調整がない。
のと願っています。
※ JIS
X 4051「⽇本語⽂書の組版⽅法」
この1年間を振り返ると，電子書籍についての話題が世の中を席巻していました。バッチ処理や数式処理などの点でTEXへの期待も漏れ聞くところではあります。
一方，TEX界や出版印刷業界に目
約物の前後（特に連続する場合）を向けると，電子書籍かどうかに関わり無く，世界の開発は進んでい和欧⽂間空⽩（四分空き）
ますし，いままでの業務も遂行されています。今回の集会では，参加.
者間で，現在までの動向をきちんと共有し，新たな潮流へと向かう共通基盤が形成されることを期待しています。
⼋登崇之

⽇本⼈の知らない TEX

. 約物の前後の空⽩調整
JIS X 4051 の⾏組版規則に従うと……
.
⽊ （⽕）⼟ 。⾦ 。
（⽔）.

1.0 em1.0 em（1 em = 全⾓幅）

1.5 empTEX はこの空⽩調整の機能を内蔵する（パラメタ設定は和⽂ TFM で⾏う）

⼋登崇之

⽇本⼈の知らない TEX

. 約物の前後の空⽩調整
JIS X 4051 の⾏組版規則に従うと……
.
⽊ （⽕）⼟ 。⾦ 。
（⽔）.

1.0 em1.0 em（1 em = 全⾓幅）

1.5 empTEX はこの空⽩調整の機能を内蔵する（パラメタ設定は和⽂ TFM で⾏う）.
X T X での実装⽅針.. E E→ TEX プログラミングで実装する！

.

※ 実装を⽀援するための「⽂字間トークン挿⼊機能」がある。
この機能を利⽤した中国語組版⽤パッケージ：.
⼋登崇之

⽇本⼈の知らない TEX

.

.
..

xeCJK パッケージ（作者： Sun Wenchang）
zhspacing パッケージ（作者： Yin Dian）

. 奥底のパッケージ

⼋登崇之

⽇本⼈の知らない TEX

. 奥底のパッケージ.
私のサイト：Ἐν τῷ πυθμένι τῆς TEXνοπόλεως

〜電脳世界の奥底にて〜
http://zrbabbler.sp.land.to/（今⽉にサイトを移転しました）.
以下のパッケージを公開中：.

BXjscls パッケージ：「BXJS ⽂書クラス」「新ドキュメントクラス」（作者＝奥村晴彦）の汎⽤版。
ZXjatype パッケージ： ⾏組版の改善
xeCJK をベースにして JIS X 4051 規則に近づける。
ZXotf パッケージ： AJ1 字形の利⽤「OTF パッケージ」（作者： 齋藤修三郎）の XELATEX 版。
ZXgtfont パッケージ：「GT 書体フォント」の利⽤
その他：ZXjafont、BXptool、……
.
⼋登崇之

⽇本⼈の知らない TEX

. 奥底の組版結果「TEX ユーザの集い 2010」は，TEX に関する研究・開発や活用例・作品例について発表すること，（TEX に限らず）編集・組版・印刷について理解を共有すること，TEX を扱う技能を向上させること，参加者同士で交友を深めることなどを目的として開催することになりました。
昨年の「TEX ユーザの集い 2009」は，（実行委員会の知る限り）TEX の名の下に国内でユーザ・開発者が集まるひさしぶりの機会で，113 名の方にご参加いただきました。参加者のうち 79 名からご回答いただいたアンケー
トを元に，今年は昨年に比べて多種多様なセッション———ポスター発表，パネルディスカッション，企画「出張！ TEX Q & A」———を加えています。
それぞれにお楽しみいただけるものと願っています。
この 1 年間を振り返ると，電子書籍についての話題が世の中を席巻していました。バッチ処理や数式処理などの点で TEX への期待も漏れ聞くところ
ではあります。一方，TEX 界や出版印刷業界に目を向けると，電子書籍かど.

うかに関わり無く，世界の開発は進んでいますし，いままでの業務も遂行さ

bxjsarticle クラス、A5 縦IPA 明朝／ゴシック（和⽂）、Latin Modern（欧⽂）

れています。今回の集会では，参加者間で，現在までの動向をきちんと共有...
し，新たな潮流へと向かう共通基盤が形成されることを期待しています。
⼋登崇之

⽇本⼈の知らない TEX

.

.

.

. LuaTEX: 未来標準 TEXLuaTEX ← pdfTEX + Omega.
Aleph（@）← "-TEX + Omega.
..
作者：
Giuseppe Bilotta
.
..
.

.

+ Lua（スクリプト⾔語）+ MetaPost（描画⽤⾔語）+ OpenType（FontForge のコードを利⽤）.
LuaTEX..

.

作者： Hans Hagen、Hartmut Henkel、Taco Hoekwater2005 年頃： 開発開始
2007 年： 0.10 版（初公開版）
2010 年 9 ⽉： 0.63.0 版（最新版）
2012 年末（予定）： 1.00 版（安定版）

.

⼋登崇之

⽇本⼈の知らない TEX

.

.
..

. LuaTEX: 未来標準 TEXLuaTEX ← pdfTEX + Omega.
Aleph（@）← "-TEX + Omega.
..
作者：
Giuseppe Bilotta
.
..
.

.

+ Lua（スクリプト⾔語）+ MetaPost（描画⽤⾔語）+ OpenType（FontForge のコードを利⽤）.
LuaTEX..

.

作者： Hans Hagen、Hartmut Henkel、Taco Hoekwater2005 年頃： 開発開始
2007 年： 0.10 版（初公開版）
2010 年 9 ⽉： 0.63.0 版（最新版）.
..

.
LuaTEX は pdfTEX の後継となる予定
LuaTEX は「未来標準 TEX」
⼋登崇之

⽇本⼈の知らない TEX.

2012 年末（予定）： 1.00 版（安定版）

.
.

.

.
.. .

. Lua を LTEX で使ってみる
A

⽂字列を逆順にするマクロを作る（プログラミング経験のある⼈なら解ると思う）.
% \strReverse{<⽂字列>}\newcommand*{\strReverse}[1]{% LaTeXマクロ\directlua{% Luaコード実⾏
local s = "#1"
for i = s:len(), 1, -1 do
tex.sprint(s:sub(i, i))end}}\strReverse{live saw nametag}.

※. 実は s:reverse() を使えばよいのだが…
..

⼋登崇之

⽇本⼈の知らない TEX.

.

gateman was evil

. なぜ別の⾔語を⼊れるのか？
.

\makeatletter\def\strReverse#1{\let\x@srtmp\@empty\x@strrev@a#1\relax}

.
. .





gateman was evil.

TEX 以外の⾔語を導⼊するメリットは……

⼋登崇之

⽇本⼈の知らない TEX

.



.

\def\x@strrev@a{\futurelet\x@srtok\x@strrev@b}\def\x@strrev@b{%\ifcat\noexpand\x@srtok\noexpand\relax\let\x@srnext\x@strrev@e\else\ifcat\noexpand\x@srtok\space\let\x@srnext\x@strrev@c\else \let\x@srnext\x@strrev@d\fi\fi \x@srnext}\expandafter\def\expandafter\x@strrev@c\space{%\edef\x@srtmp{\space\x@srtmp}\x@strrev@a}\def\x@strrev@d#1{\edef\x@srtmp{#1\x@srtmp}\x@strrev@a}\def\x@strrev@e#1{\x@srtmp}\makeatother\strReverse{live saw nametag}. なぜ別の⾔語を⼊れるのか？
⾃重します。

⼋登崇之

⽇本⼈の知らない TEX

. なぜ別の⾔語を⼊れるのか？
⾃重します。
The TEX language is and remains weird!
— Viktor Eijkhort

引⽤元：http://tug.org/interviews/eijkhout.html

⼋登崇之

⽇本⼈の知らない TEX

. Lua を LTEX でしつこく使ってみるA.

私のサイトでの実験：
Lua と LATEX の組合せで以下のものが「TEX プログラミングなし」で実現できる。
カウンタ値の 16 進出⼒

円周率 100 万桁

傾き（斜体）変形

ファイルのダウンロード

ソートしながら表組み

RDBS を⽂献データベースに⽂字列を指定の幅で切る

テンプレート的 LATEX

Lua からは外部動的ライブラリの読込が可能.→「無限の拡張性」があるといえる。

⼋登崇之

⽇本⼈の知らない TEX

. LuaTEX の他の特⻑
様々なレベルで TEX 処理へ「割込」可能
⼊⼒テキストのフィルタ
トークン展開時の割込処理
ノードリスト操作：
⼀度組みあがったボックスの中⾝に修正を加える

あらゆる物がカスタマイズ可能！
段落⽣成（⾏分割）処理
分綴処理
出⼒処理

⼋登崇之

⽇本⼈の知らない TEX

. XETEX vs LuaTEX
Jonathan Kew によると……
.
LuaTEX..
究極の柔軟性.

可能な限り外部実装を取り込む

実装のどんな点も制御可能

それらは⾃動的に「まともに動く」

⽂書・マクロ作成者に低⽔準の機能を提供
.

.

.
..

.

.
..

引⽤元： Jonathan Kew, “What’s new in the XETEX world?”, BachoTEX 2008
⼋登崇之

⽇本⼈の知らない TEX

.

.

.
XTX
.. E E
設定や使⽤が容易

. 未来の⽇本語 TEXTEX の進化に⽇本語 TEX も追随すべき
しかし⽇本語組版品質の妥協は許されない
.
TEX
pTEX
↓
↓
"-TEX
"-pTEX↓↓
pdfTEX
pdf-pTEX ?

.

⼋登崇之

⽇本⼈の知らない TEX

.

.
..

.

. 未来の⽇本語 TEX

⼋登崇之

⽇本⼈の知らない TEX

.

.

.

.
.

.

TEX の進化に⽇本語 TEX も追随すべき
しかし⽇本語組版品質の妥協は許されない
.
TEX
pTEX
↓
↓
"-TEX
"-pTEX↓↓
pdfTEX
pdf-pTEX ?
↓
↓
XETEX
XE-pTEX ??
LuaT
X
Lua-pT
E
EX ??
.
.. .
XETEX・LuaTEX は既に pTEX の能⼒をもつ（エンジンとしては）.
..

. 私の構想（妄想）.
LuaTEX で (u)pTEX をシミュレートする！
少なくとも (u)pLATEX と主要パッケージを動かす% ⽂字コードはUTF-8\documentclass[a4paper,12pt]{luajsarticle}\usepackage{otf} % pLaTeX⽤パッケージが使える\begin{document}% pLaTeX命令が使える\gtfamily\ebseries \CID{7652}飾区！
\par % LuaTeXの機能も使える$π$ = \directlua{ tex.print(math.pi) }\end{document}
.
葛飾区！

.

.

.

...

.

π = 3.1415926535898
⼋登崇之

⽇本⼈の知らない TEX

. 未来に進むために……
未来の⽇本語 TEX の構築に必要なものは：

⼋登崇之

⽇本⼈の知らない TEX

. 未来に進むために……
未来の⽇本語 TEX の構築に必要なものは：

.





Happy
 TEXing! .

⼋登崇之

⽇本⼈の知らない TEX

. 最後に⼀⾔
以下のソフトウェアおよび関連物の作成、保守、頒布、その他の⾯で関わっている全ての⽅々、.

TEX"-TEX
pdfTEX
.
..

Omega

pTEX

Aleph

"-pTEX

XETEX

upTEX

LuaTEX"-upTEX.

⼋登崇之

⽇本⼈の知らない TEX.

.

. 最後に⼀⾔
以下のソフトウェアおよび関連物の作成、保守、頒布、その他の⾯で関わっている全ての⽅々、.

TEX"-TEX
pdfTEX
.
..

Omega

pTEX

Aleph

"-pTEX

XETEX

upTEX

LuaTEX"-upTEX.

そして発表を聴いて下さった全ての⽅々に……
⼋登崇之

⽇本⼈の知らない TEX.

.

ध यवाद।
Thank you!
Спасибо!
Χάρις ὑμίν!
!‫תודה‬고맙습니다！
!‫ﺷﻜﺮا ﺟﺰﻳﻞ‬ありがとう！
अनुगु रहीतोसु म।
Obrigado!
谢谢！
Mulțumesc!
Մերսի:!
Dziękuję!
Хвала лепо!