TeX 同じ一歩

この文書について

Debian 9 (strech)の時、TeX 第一歩を書いた。

1年以上放置していたので、忘れているし、定番の利用方法も代わっているかもしれない。とりあえず、Debian10(buster)に用意されているバージョンのtexliveで、これと同様なところまでできることを確認する。

とりあえずのplatex

adachi@fumita:~/work$ cat test.tex 
\documentclass{article}
\begin{document}
Hello, \TeX!
\[ \int dx = x + C. \]
\end{document}

platexの実行

adachi@fumita:~/work$ platex test.tex
This is e-pTeX, Version 3.14159265-p3.8.1-180901-2.6 (utf8.euc) (TeX Live 2019/dev/Debian) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
pLaTeX2e <2018-12-01> (based on LaTeX2e <2018-12-01>)
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)) (./test.aux)
[1] (./test.aux) )
Output written on test.dvi (1 page, 380 bytes).
Transcript written on test.log.

dviの生成

adachi@fumita:~/work$ ll test.*
-rw-r--r-- 1 adachi adachi    8 10月 13 20:58 test.aux
-rw-r--r-- 1 adachi adachi  380 10月 13 20:58 test.dvi
-rw-r--r-- 1 adachi adachi 2430 10月 13 20:58 test.log
-rw-r--r-- 1 adachi adachi   92  6月 24 16:02 test.tex
adachi@fumita:~/work$ dvipdfm test
test -> test.pdf
[1]
5292 bytes written
adachi@fumita:~/work$ ll test.*
-rw-r--r-- 1 adachi adachi    8 10月 13 20:58 test.aux
-rw-r--r-- 1 adachi adachi  380 10月 13 20:58 test.dvi
-rw-r--r-- 1 adachi adachi 2430 10月 13 20:58 test.log
-rw-r--r-- 1 adachi adachi 5292 10月 13 21:00 test.pdf
adachi@fumita:~/work$ tex -version
TeX 3.14159265 (TeX Live 2019/dev/Debian)
kpathsea version 6.3.1/dev
Copyright 2018 D.E. Knuth.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the TeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the TeX source.
Primary author of TeX: D.E. Knuth.

出来上がったpdfも同じなので、2018年の画像を再掲します。

Evinceによる表示の一部をキャプチャしたものです。(大部分が白紙なので一部の紹介にします...)

texの入ったコマンド

思いつきで、texで終わるコマンドを探したら、シンボリックリンクになっているものも多いことを発見。

adachi@fumita:~/work$ ll /usr/bin |grep 'tex$'
lrwxrwxrwx 1 root   root           6  4月 18  2019 amstex -> pdftex
-rwxr-xr-x 1 root   root        1216  9月 26  2017 bg5+latex
-rwxr-xr-x 1 root   root        1222  9月 26  2017 bg5+pdflatex
-rwxr-xr-x 1 root   root        1216  9月 26  2017 bg5latex
-rwxr-xr-x 1 root   root        1222  9月 26  2017 bg5pdflatex
lrwxrwxrwx 1 root   root          24  5月  9 16:23 bibtex -> /etc/alternatives/bibtex
-rwxr-xr-x 1 root   root        1217  9月 26  2017 cef5latex
-rwxr-xr-x 1 root   root        1223  9月 26  2017 cef5pdflatex
-rwxr-xr-x 1 root   root        1216  9月 26  2017 ceflatex
-rwxr-xr-x 1 root   root        1222  9月 26  2017 cefpdflatex
-rwxr-xr-x 1 root   root        1217  9月 26  2017 cefslatex
-rwxr-xr-x 1 root   root        1220  9月 26  2017 cefspdflatex
-rwxr-xr-x 1 root   root       59728 12月 18  2018 detex
-rwxr-xr-x 1 root   root       18385  2月 28  2019 dh_installtex
lrwxrwxrwx 1 root   root           6  3月  2  2019 dvilualatex -> luatex
lrwxrwxrwx 1 root   root           6  3月  2  2019 dviluatex -> luatex
-rwxr-xr-x 1 root   root      480104 12月 18  2018 eptex
lrwxrwxrwx 1 root   root           6 12月 18  2018 etex -> pdftex
-rwxr-xr-x 1 root   root      494904 12月 18  2018 euptex
lrwxrwxrwx 1 root   root          53  4月 18  2019 exceltex -> ../share/texlive/texmf-dist/scripts/exceltex/exceltex
-rwxr-xr-x 1 root   root        1505  1月  8  2020 fig2ps2tex
lrwxrwxrwx 1 root   root          55  3月  2  2019 fig4latex -> ../share/texlive/texmf-dist/scripts/fig4latex/fig4latex
-rwxr-xr-x 1 root   root        1216  9月 26  2017 gbklatex
-rwxr-xr-x 1 root   root        1222  9月 26  2017 gbkpdflatex
lrwxrwxrwx 1 root   root           3 12月 18  2018 initex -> tex
lrwxrwxrwx 1 root   root           6  3月  2  2019 latex -> pdftex
-rwxr-xr-x 1 root   root     8294200 12月 18  2018 luajittex
lrwxrwxrwx 1 root   root           6  3月  2  2019 lualatex -> luatex
-rwxr-xr-x 1 root   root     8404728 12月 18  2018 luatex
-rwxr-xr-x 1 root   root      117392 12月 18  2018 pbibtex
lrwxrwxrwx 1 root   root           6 12月 18  2018 pdfetex -> pdftex
lrwxrwxrwx 1 root   root           6  3月  2  2019 pdflatex -> pdftex
-rwxr-xr-x 1 root   root     2190232 12月 18  2018 pdftex
lrwxrwxrwx 1 root   root           5  3月  2  2019 platex -> eptex
-rwxr-xr-x 1 root   root      406248 12月 18  2018 ptex
lrwxrwxrwx 1 root   root          55  3月  2  2019 simpdftex -> ../share/texlive/texmf-dist/scripts/simpdftex/simpdftex
-rwxr-xr-x 1 root   root        1217  9月 26  2017 sjislatex
-rwxr-xr-x 1 root   root        1220  9月 26  2017 sjispdflatex
-rwxr-xr-x 1 root   root       35280 12月 18  2018 synctex
-rwxr-xr-x 1 root   root      348488 12月 18  2018 tex
lrwxrwxrwx 1 root   root           6 12月 18  2018 texlua -> luatex
lrwxrwxrwx 1 root   root           6 12月 18  2018 texluac -> luatex
lrwxrwxrwx 1 root   root           9 12月 18  2018 texluajit -> luajittex
lrwxrwxrwx 1 root   root           9 12月 18  2018 texluajitc -> luajittex
-rwxr-xr-x 1 root   root       12581 12月 18  2018 tpic2pdftex
-rwxr-xr-x 1 root   root      119920 12月 18  2018 upbibtex
lrwxrwxrwx 1 root   root           6  3月  2  2019 uplatex -> euptex
-rwxr-xr-x 1 root   root      408728 12月 18  2018 uptex
lrwxrwxrwx 1 root   root           5  3月  2  2019 xelatex -> xetex
-rwxr-xr-x 1 root   root     2653304 12月 18  2018 xetex

コマンドの関係表

先程使ったplatexがeptexへのシンボリックリンクだった。platexとeptexがe-pTeXを呼び出しているイメージを持っていたが違った。でも、起動コマンド名で動作を変更しているらしく、platex test.tex の代わりにeptex test.tex とすると"Undefined control sequence."と言われる。

command s-link bytes
tex initex 348488
pdftex latex amstex etex pdfetex pdflatex 2190232
ptex 406248
eptex platex 480104
uptex 408728
euptex uplatex 494904
xetex xelatex 2653304
luatex dvilualatex dviluatex lualatex texlua texluac 8404728
luajittex texluajit texluajitc 8294200

platex

TeX 第一歩を踏襲して、platexを試す。documentclass{jarticle}とする。

adachi@fumita:~/work$ cat test2.tex 
\documentclass{jarticle}
\begin{document}
コンピュータ分野で1024バイトを1キロバイトという習慣があるのは知っている。
しかし、キロが10$^3$であることをさしおいて教科書に記述することではない。
教科書によっては普通は$10^3$であることを説明していないものすらある。これはまずい。

国際単位系に基づき1000倍ごとに接頭語が決められているとをまずきちんと説明すべきことだと思う。
\end{document}

今回もplatexで

adachi@fumita:~/work$ platex test2.tex 
This is e-pTeX, Version 3.14159265-p3.8.1-180901-2.6 (utf8.euc) (TeX Live 2019/dev/Debian) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./test2.tex
pLaTeX2e <2018-12-01> (based on LaTeX2e <2018-12-01>)
(/usr/share/texlive/texmf-dist/tex/platex/base/jarticle.cls
Document Class: jarticle 2018/10/25 v1.8a Standard pLaTeX class
(/usr/share/texlive/texmf-dist/tex/platex/base/jsize10.clo)) (./test2.aux)
[1] (./test2.aux) )
Output written on test2.dvi (1 page, 1008 bytes).
Transcript written on test2.log.

pdf化して

adachi@fumita:~/work$ dvipdfm test2.dvi 
test2.dvi -> test2.pdf
[1]
3687 bytes written

結果は同じに見えるので、前回の図を貼っておく

\documentclass{jsarticle} にした場合も同様。busterのファイルマネージャ(Nautilus)では正常にプレビューされるようになった。

uplatexはUnicode対応

platexではunicode文字に対処できない。①ですでにerrorになる。

unicode対応のuplatexを使う。

adachi@fumita:~/work$ cat test4.tex 
\documentclass[uplatex]{jsarticle}
\begin{document}
コンピュータ分野で1024バイトを1キロバイトという習慣があるのは知っている。
しかし、キロが10$^3$であることをさしおいて教科書に記述することではない。
教科書によっては普通は$10^3$であることを説明していないものすらある。これはまずい。

国際単位系に基づき1000倍ごとに接頭語が決められているとをまずきちんと説明すべきことだと思う。\\
■(1)JIS X 0213:2004で例示字形が変更されたものの例\\
U+845B:[葛] ヒか人か\\
U+914B:[酋] ツノか八か\\
■(2)JIS X 0213で追加された(JISX0208にない)文字の例\\
U+2460:[①] 丸に1\\
U+24D0:[ⓐ] 丸にa\\
U+5721:[圡] 土の横線の間に点\\
U+9DD7:[鷗] 品 1983以降のJISX0208になく0213に存在\\
U+9D0E:[鴎] メ 1983以降のJISX0208ではこれ\\
■(3)JIS X 0213で追加され、unicodeでサロゲートペアを使う文字の例\\
U+2000B:[𠀋] 丈の上に点\\
U+2123D:[𡈽] 土の上に点\\
■(4)JIS X 0213にはなく、unicodeでサロゲートペアを使う文字の例\\
U+20BB7:[𠮷] 土吉
\end{document}

uplatexで

adachi@fumita:~/work$ uplatex test4.tex 
This is e-upTeX, Version 3.14159265-p3.8.1-u1.23-180901-2.6 (utf8.uptex) (TeX Live 2019/dev/Debian) (preloaded format=uplatex)
 restricted \write18 enabled.
entering extended mode
(./test4.tex
pLaTeX2e <2018-12-01u02> (based on LaTeX2e <2018-12-01>)
(/usr/share/texlive/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2018/12/11 jsclasses (okumura, texjporg)
(/usr/share/texlive/texmf-dist/tex/platex/jsclasses/jslogo.sty)) (./test4.aux)
[1] (./test4.aux) )
Output written on test4.dvi (1 page, 1820 bytes).
Transcript written on test4.log.

dviからpdfにするコマンドもシンボリックリンクを調べて

adachi@fumita:~/work$ ll /usr/bin/ |grep dvipdf
-rwxr-xr-x 1 root   root        1023  8月 25 00:03 dvipdf
lrwxrwxrwx 1 root   root           9 12月 18  2018 dvipdfm -> xdvipdfmx
lrwxrwxrwx 1 root   root           9 12月 18  2018 dvipdfmx -> xdvipdfmx
-rwxr-xr-x 1 root   root        2688 12月 18  2018 dvipdft
lrwxrwxrwx 1 root   root           9 12月 18  2018 ebb -> xdvipdfmx
lrwxrwxrwx 1 root   root           9 12月 18  2018 extractbb -> xdvipdfmx
-rwxr-xr-x 1 root   root      779296 12月 18  2018 xdvipdfmx

dvipdfmもdvipdfmxもxdvipdfmxにリンクされている。起動コマンドを見ているようだが、どれを使ってもできるものは同じ様子。

adachi@fumita:~/work$ dvipdfm test4.dvi
test4.dvi -> test4.pdf
[1
xdvipdfmx:warning: CMap has higher supplement number than CIDFont: Ryumin-Light
xdvipdfmx:warning: Some chracters may not be displayed or printed.
]
7444 bytes written
adachi@fumita:~/work$ dvipdfmx test4.dvi
test4.dvi -> test4.pdf
[1
dvipdfmx:warning: CMap has higher supplement number than CIDFont: Ryumin-Light
dvipdfmx:warning: Some chracters may not be displayed or printed.
]
7445 bytes written

表示できない文字が出るのは想定済み。

前回に比べて、土吉が出るようになった。後で一覧にする。

lualatexはもう一つのUnicode対応

もう一つの方法、lualatexを試す。

documentclassを書き換えるだけ。

uplatex\documentclass[uplatex]{jsarticle}
lualatex\documentclass{ltjsarticle}

lualatex だけでpdfの生成までやってくれるが、端末上のログは多い。ファイルも30倍近くになる。

adachi@fumita:~/work$ lualatex test5.tex 
This is LuaTeX, Version 1.07.0 (TeX Live 2019/dev/Debian) 
 restricted system commands enabled.
(./test5.tex
LaTeX2e <2018-12-01>

luaotfload | main : initialization completed in 0.072 seconds
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/ltjsarticle.cls
Document Class: ltjsarticle 2018/10/08 ltjsclasses 
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/luatexja.sty
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/luatexja-core.sty
(/usr/share/texlive/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
(/usr/share/texlive/texmf-dist/tex/luatex/ctablestack/ctablestack.sty))
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty))
(/usr/share/texlive/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/xkvutils.tex
(/usr/share/texlive/texmf-dist/tex/generic/xkeyval/keyval.tex))))
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/atbegshi.sty)
(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty)
(/usr/share/texlive/texmf-dist/tex/latex/everyhook/everyhook.sty
(/usr/share/texlive/texmf-dist/tex/latex/svn-prov/svn-prov.sty))(load cache: /h
ome/adachi/.texlive2018/texmf-var/luatexja/ltj-cid-auto-adobe-japan1.luc)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/ltj-base.sty)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/ltj-latex.sty
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/patches/lltjfont.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/tuenc.def)
(/usr/share/texlive/texmf-dist/tex/latex/ms/everysel.sty)
ABD: EverySelectfont initializing macros)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/patches/lltjdefs.sty
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/jfm-ujisv.lua)(load cache: /
home/adachi/.texlive2018/texmf-var/luatexja/extra_ipaexmincho.luc)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/jfm-ujis.lua))
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/patches/lltjcore.sty)
(/usr/share/texlive/texmf-dist/tex/latex/filehook/filehook.sty)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/patches/lltjp-geometry.sty))
) (/usr/share/texlive/texmf-dist/tex/luatex/luatexja/luatexja-compat.sty(load c
ache: /home/adachi/.texlive2018/texmf-var/luatexja/ltj-jisx0208.luc)))
(/usr/share/texlive/texmf-dist/tex/platex/jsclasses/jslogo.sty)
(/usr/share/texlive/texmf-dist/tex/latex/sttools/stfloats.sty)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexja/patches/lltjp-stfloats.sty))
 (./test5.aux) ABD: EverySelectfont initializing macros [1{/var/lib/texmf/fonts
/map/pdftex/updmap/pdftex.map}] (./test5.aux))
(see the transcript file for additional information)
 4262 words of node memory still in use:
   6 hlist, 1 vlist, 4 rule, 4 glue, 59 kern, 1 glyph, 1515 attribute, 106 glue
_spec, 86 attribute_list, 1 write, 9 user_defined nodes
   avail lists: 1:6,2:21206,3:152,4:75,5:19,6:4,7:1778,8:548,9:102,10:9,11:4

Output written on test5.pdf (1 page, 208412 bytes).
Transcript written on test5.log.

結果のまとめ

Unicodeに対応するには前回同様、uplatexかlualatexかという所でしょう。

TeX 第一歩と結果はほぼ同じなので、画像は省略して結果を表にします。

この文書はUnicodeの中でも特に問題の起きそうなものを種類別したものです。

文字の種類 code 文字 注意点 uplatex lualatex
(1)字形変更 U+845B [葛] ヒか人か
U+914B [酋] ツノか八か ツノ
(2)0213追加
 (U+9D0E以外)
U+2460 [①] 丸に1 OK OK
U+24D0 [ⓐ] 丸にa OK OK
U+5721 [圡] 土の横線の間に点 × OK
U+9DD7 [鷗] 品 1983以降のJISX0208になく0213に追加 OK OK
U+9D0E [鴎] メ 1983以降のJISX0208ではこれ OK OK
(3)サロゲートペア U+2000B [𠀋] 丈の上に点 × OK
U+2123D [𡈽] 土の上に点 × OK
(4)0213にはない U+20BB7 [𠮷] 土吉 OK ×

システムの持っているフォントに全部のグリフが含まれているかも関係しそうなので、texだけの問題ではない可能性もあります。

uplatexはJIS X 0208 に拡張文字を加えたものをUnicodeを使って正しく表示したもののように見えます。

lualatexはJIS X 0213 に律儀に対応したものと言えそうです。

フォントの埋め込み?

よくわからないまま、調査結果を晒しておきます。

ファイルの大きさを確認します。test4がuplatex、test5がlualatexです。

-rw-r--r-- 1 adachi adachi   7447 10月 14 13:23 test4.pdf
-rw-r--r-- 1 adachi adachi 208412 10月 14 15:40 test5.pdf

フォントの埋め込みを調査しておきます。uplatexではdviからpdfを作るときに埋め込みをするので、基本的にはなにもしていないはずです。

adachi@fumita:~/work$ pdffonts test4.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
Ryumin-Light-Identity-H              CID Type 0        Identity-H       no  no  no       5  0
XHNFSU+CMR10                         Type 1C           Builtin          yes yes yes      6  0
MIIQFG+CMR7                          Type 1C           Builtin          yes yes yes      7  0

lualatexではpdfまで一気に作るので、内部的に何かをしている可能性が高いです。

adachi@fumita:~/work$ pdffonts test5.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
AVWIDQ+IPAexMincho                   CID TrueType      Identity-H       yes yes yes      4  0
VFCWIE+LMRoman10-Regular             CID Type 0C       Identity-H       yes yes yes      5  0
BYQNWU+CMR7                          Type 1            Builtin          yes yes no       6  0
ZTFRYM+CMR10                         Type 1            Builtin          yes yes no       7  0