From 6be1eae37e6575c97cf329fe530582b7da6185fc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 3 Apr 2019 21:37:56 +0000 Subject: ptex-base (3apr19) git-svn-id: svn://tug.org/texlive/trunk@50731 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/ptex/ptex-base/Changelog_eptex_beforeTL | 159 -- .../texmf-dist/doc/ptex/ptex-base/Changelog_ptex | 317 ---- Master/texmf-dist/doc/ptex/ptex-base/LICENSE | 2 +- Master/texmf-dist/doc/ptex/ptex-base/Makefile | 53 - Master/texmf-dist/doc/ptex/ptex-base/README.md | 7 +- Master/texmf-dist/doc/ptex/ptex-base/README_ptex | 32 - .../texmf-dist/doc/ptex/ptex-base/eptex_resume.pdf | Bin 694464 -> 0 bytes .../texmf-dist/doc/ptex/ptex-base/eptex_resume.tex | 1647 -------------------- Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.pdf | Bin 367905 -> 0 bytes Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.tex | 1015 ------------ Master/texmf-dist/doc/ptex/ptex-base/fam256d.tex | 160 -- Master/texmf-dist/doc/ptex/ptex-base/fam256p.tex | 75 - Master/texmf-dist/doc/ptex/ptex-base/jfm.pdf | Bin 132440 -> 0 bytes Master/texmf-dist/doc/ptex/ptex-base/jfm.tex | 239 --- .../texmf-dist/doc/ptex/ptex-base/jtex_asciimw.pdf | Bin 251872 -> 0 bytes .../texmf-dist/doc/ptex/ptex-base/jtex_asciimw.tex | 653 -------- .../doc/ptex/ptex-base/jtexdoc_asciimw.pdf | Bin 145704 -> 0 bytes .../doc/ptex/ptex-base/jtexdoc_asciimw.tex | 403 ----- .../doc/ptex/ptex-base/ptexdoc_asciimw.pdf | Bin 264764 -> 0 bytes .../doc/ptex/ptex-base/ptexdoc_asciimw.tex | 924 ----------- .../doc/ptex/ptex-base/ptexskip_asciimw.pdf | Bin 164929 -> 0 bytes .../doc/ptex/ptex-base/ptexskip_asciimw.tex | 387 ----- 22 files changed, 6 insertions(+), 6067 deletions(-) delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/Changelog_eptex_beforeTL delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/Changelog_ptex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/Makefile delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/README_ptex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/fam256d.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/fam256p.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jfm.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jfm.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.tex delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.pdf delete mode 100644 Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.tex (limited to 'Master/texmf-dist/doc/ptex/ptex-base') diff --git a/Master/texmf-dist/doc/ptex/ptex-base/Changelog_eptex_beforeTL b/Master/texmf-dist/doc/ptex/ptex-base/Changelog_eptex_beforeTL deleted file mode 100644 index b936cc6553e..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/Changelog_eptex_beforeTL +++ /dev/null @@ -1,159 +0,0 @@ - -2008. 1. 1: 一応第1版としておこう. - -2008. 1. 2: document の更新.数値積分という sample の追加. - -2008. 1. 3: いつのまにか作業中に etex.ch を書き換えていたので修正. - teTeX3 下でのコンパイルについての補足を追加. - -2008. 1. 4: TeX--XeT 機能を試験的にサポート. - 数式の baseline を揃え方を変える - \mathdisplacementstate を追加 (in pTeX) - -build 80105.11, 21 - o \lastnodetype, \currentiflevel を e-TeX の動作に合わせた. - o 日時表記を 80000+100*月+日+時間/100 の数値に変更. - o ./trip の使い方などを記入. - o \currentiflevel まわりの typo を fix. - o W32TeX と合わせたときの compile 手順(未チェック)を記入 - o upTeX と合わせたときの compile 手順を改稿(compileだけ) - o README.txt から HOWTOINST.txt を分離. - -build 80106.14, 19 - o W32TeX と合わせたときの compile 手順が正しくなかったのを修正. - o document のさらなる整備,resume.tex のコンパイル要件がわからなく - なった - -build 80108.19 - o 「peTeX との一本化」.角藤さんが Windows 用 build を提供してくれる - ことになったので,W32TeX と合わせた build の解説を削除. - o ↑に伴う,ptex-hack-1.diff の削除.余計な ptex-orig.diff の廃止. - -build 80110.20 - o upTeX とのマージ方法に関する部分を修正. - o 浮動小数点演算拡張の部分 fp.diff を WEB change file の形式に変更. - 同時に,減算で ∞ - ∞ の結果が NaN になっていなかったのを修正. - -build 80113.22 - o 浮動小数点演算(以下 fp)でのワーク領域を確保する量の間違いにより, - Segfault する可能性があるバグを修正(実際には平方根の計算などが - 54 桁で行われている場合があったことによるので,そちらの方を修正し - た) - o resume.pdf は発表時としては使わないことにした(スライドを別に作っ - て,そちらを使う予定).しかしこのファイルがもと. - -build 80120.11, 19 - o fp → integer の変換ミスを修正. - o eptexdefs.lib を作成.それに伴い eptex.src を少々改定 - o upTeX-0.20 に合うように更新. - o license をちゃんと決めた.(「通りすがり2」さん,ありがとうございます) - o doc/ に浮動小数点演算のサンプル tri.tex を追加 - -build 80125.09 - o fp.pdf が壊れていたので修正. - -build 80131.21 - o TeX--XeT での displacement node の取扱いを改良し,和欧文混在時の - 組版結果がちょっと良くなった. - o resume.pdf の更新. - -build 80316.xx - o 生存証明(笑) - o 浮動小数点演算に MPFR library を使用してみた.格納形式が変更され, - 仮数部が10進21桁から2進 78 bit(implicit 79 bit)に. - -注意:上の 80316.xx の路線はもはや継続されていません. - -build 90111.20 - o TeX Live 2008 下でのコンパイルに対応 - o pteTeX3-20080616 (+ upTeX-0.25) 下でのコンパイルに対応 - (ttkさん,角藤さん,ありがとうございます) - o INSTALL.txt の大幅な書き直し. - -build 90218 - o 80131.21 版ぐらいの修正で trip test が異常な結果になっていたこと - への修正(副作用あるかも) - o ドキュメント類の書き直し. - o 小数点以下(大体の時間を表す)はあまり意味がないので今回から省略. - o e-pTeX, e-upTeX 本体の version も起動時に出力するようにした. - どんどん banner が長くなってくる(笑) - -注意:本来はこの 90218 のリリースの予定はなかった.FAM256 パッチの調整に手間 - 取りそうだったので,bugfix だけでも先に出すことにしたのだった. - -build 090220 - o 「FAM256パッチ」を作成,追加. - (このパッチを使用しない場合は 90218 版からの変更はバージョン番号 - の変更のみ) - o 「デビ丸」さんの指摘により,バージョン番号を 6 桁とした. - (デビ丸さん,ありがとうございます) - -build 090223 - o コンパイルスクリプトの変更. - できるだけ upTeX 側のversionが変わっても通るようにした. - -build 090309 - o FreeBSD (on qemu) でも一部開発を行うことに. - o ptexenc による pTeX の修正と,本 e-pTeX による pTeX の修正が全く - かち合わないと勘違いをしていた.これに伴い,ptexenc があることを - 動作要件とすることに. - o e-TeX の条件分岐拡張(\ifcsname ... \endcsname)の部分で - 漢字を考慮していなかった動作だったのを修正. - o texmfmem.h, ptexenc まわりの再検討.これにより,-funsigned-char や - 「case 12」が不要になり,eplatex.fmt 作成時に segfault するバグも - 潰せたと思う. - -build 090927 - o FAM256 patch を標準で有効に.このため,有効時にバージョンの末尾に - ついていた「FAM256-PATCHED」はもはやつかない. - o 黒木さんなどから「e-TeX ベースにした方が良いのでは」という意見を - いただいたので,そのようにしてみた. - o コンパイルのベースとなる環境がたくさんあるので,とりあえず - 今回は ptetex3-20090610 と ptexlive-20090904 のみ作業してみた. - o I forgot to include copy of BSD license ^^; - o Implementation of floating-point arithmetic is deleted due to - its half-hearted implementation. - (Someday I want to re-implement floating-point arithmetic in TeX, - but not inside e-pTeX) - o Several files rewrite in English. - -build 091003 - o Fixed several typos. (Thanks to Mr. Debimaru) - o In eptexdoc.tex, graphicx and color packages don't use anymore. - (now correctly displayed in xdvi) - -build 100131 - o languages.def was added in the archive. - o Support upTeX-0.29. - (In upTeX-0.29, pTeX is updated to 3.1.11.) - -build 100201 - o Bug fix: typo in script/install - (euptex.fmt and euplatex.fmt ware generated in compatible mode) - -build 100420 - o Based on ptexlive for TeX Live 2009. - o Change installation method. - o fam256.ch: fixed typo in error message. - -build 101231 - o Based on TeX Live 2010. - o \pdfstrcmp primitive (of pdfTeX) is now supported. - (Thanks to Akira Kakuto) - -build 110102 - o Fixed typo in scripts/unpack.sh. - o \pdfstrcmp compares Kanji characters by their UTF-8 encoded strings. - o re-included otfstable.zip and utfsrc.zip. - -build 110227 - o Fixed a conflict between the status of a box (TeX--XeT extension) and - the direction of a box (pTeX extension), - using ptex-base.ch.boxdir.diff and etex-lrstat.ch. - o Implemented \pdfsavepos. - o Modified the behavior of \lastnodetype. (Thanks to Peter Breitenlohner) - o (about pTeX) Included the following patches: - ptex-base.ch.110119PB.diff: patches by Peter Breitenlohner. - ptex-base.ch.110223_radical.diff - ptex-base.ch.110224_boxdim.diff (<- not bugfix) - o pxdvik and dvipdfmx now handle \dtou primitive correctly. diff --git a/Master/texmf-dist/doc/ptex/ptex-base/Changelog_ptex b/Master/texmf-dist/doc/ptex/ptex-base/Changelog_ptex deleted file mode 100644 index 2d7e4bae543..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/Changelog_ptex +++ /dev/null @@ -1,317 +0,0 @@ -2009/08/17: (p3.1.11) - ptex: 2バイト文字間のグルーがおかしくなるバグを修正 - \{y|t}baselineshift が数式にも反映されるように修正 - (ありがとうございます 角藤さん、土村さん) - -2006/07/18: (p3.1.10) - ptex, tftopl, pltotf, jbibtex: -kanji オプションが -version オプションの - 漢字コード情報に反映されるよう修正。 - Makefile.in: texmf.cnf 中のパス記述が teTeX-3.0 の記法に近くなるように修正 - (ありがとうございます 土村さん) - ptex: 変数の初期化忘れのため、環境によって組版結果が異なる症状を修正 - (ありがとうございます 土村さん、角藤さん) - pltotf, tftopl: 16区の漢字の扱いに失敗する不具合を修正 - (ありがとうございます TANAKA Takujiさん) - -2005/10/17: (p3.1.9) - mkconf: platex の検索パスに tex/platex を入れないように修正 - ptex: 単語の先頭で LIG/ を行うようなTFMを使用するとベースラインシフトが - 0でない場合に異常終了するバグを修正 - -2005/03/07: (p3.1.8) - Makefile.in: make install の最後に mktexlsr の実行を追加 - Makefile.in, INSTALL.txt: teTeX-3.0のTEXMFディレクトリの変更に伴い修正 - (ありがとうございます、角藤さん)。 - -2004/12/14: (p3.1.8) - ptex: コントロールシーケンス名の処理誤りを修正。 - (例:\Te^^5e^58 ⇒ \Te^^58 となり、\TeX として評価されない) - ptex: コントロールシーケンス直後の ^^形式が漢字として認識されて - しまう場合があるのを修正 (例:\TeX^^83A ⇒ \TeXア) - (以上、ありがとうございます、井上さん)。 - ptex: 端末やログファイルでの改行位置のタイミングの修正 - (ありがとうございます、角藤さん)。 - -2004/12/09: (p3.1.7) - ptex: ^^形式を含むコントロールシーケンス名の処理誤りを修正。 - ptex: 表示不可能文字の範囲を3.1.4と同じにした。 - (Missing character では ^^ 形式で出力)。 - mkconf: sjis,jis,eucの各エンコード名のTEXINPUTSを作成するようにした。 - また、TEXINPUTS.xetex の次に作成するようにした。 - -2004/12/02: (p3.1.6) - ptex: tetex-2.99.4.20041128-beta に対応(ありがとうございます、角藤さん)。 - INSTALL.txt: ファイル名とTDSに関するコメントを追加 - (ありがとうございます、角藤さん)。 - -2004/11/29: (p3.1.5) - ptex: コントロールシーケンス名の、^^形式の文字と次の文字を漢字と - してみなす場合があるのを修正(ありがとうございます、井上さん)。 - ptex: Missing character などのメッセージでの表示不可能文字を - ^^ 形式で出力するように修正。 - -2004/11/08: (p3.1.5) - ptex: JISエンコーディングファイルを読み込んだ後、`漢字イン' の状態が - ファイルの終わりを越えて有効になってしまう場合があるのを修正 - (ありがとうございます、井上さん)。 - -2004/10/12: - pltotf: SJISコードのPLファイルから、TFMファイルを正しく作れない - のを修正(ありがとうございます、角藤さん、青木さん)。 - -2004/09/02: (p3.1.4) - ptex: 行末記号を漢字の第1バイトに当たる文字にした場合、行の次の文字 - と共に漢字にしようとしてしまうのを修正。 - ptex: 1バイト文字のうち、漢字の第1バイトに当たる文字のカテゴリー - コードが無効な文字となってしまうのを修正。 - ptex: ^^形式で入力された文字コードが漢字の第1バイトに当たる場合、 - 次の文字と共に漢字にしようとしてしまうのを修正。 - ptex: \string で扱う文字の漢字判定を厳密化。 - jbibtex: 改行コードCRに対応。 - (以上、ありがとうございます、井上さん) - ptex: 数式内で \char を使用した場合に1バイト文字が漢字と誤認識される - バグを修正。 - (ありがとうございます、角藤さん) - 契約条文和訳を修正。 - -2003/10/07: (p3.1.3) - ptex: -kanji=sjis のとき、\kansujichar で、期待した文字が設定され - ないのを修正(ありがとう、角藤さん)。 - -2003/09/30: - ptex: 端末/ログへのメッセージで、印字できない文字が出力されることが - あるのに対処。 - -2003/08/05: - pconvert: usage メッセージの変更。pltotf, tftopl, pdvitype のとき、 - fixwrites にオプション($target)を指定するようにした。 - -2003/06/23: (p3.1.2) - configure: mktempを使わないように修正 - -2003/06/17: (p3.1.2) - Makefile.in: BSD版 make で texmf.cnf の作成に失敗しているのを修正 - -2003/02/18: (p3.1.2) - ptex: \kansuji プリミティブを復活させた。 - ptex: \kansujichar プリミティブにより、\kansuji で出力される文字を設定 - 可能にした。 - -2003/02/14: (p3.1.1) - ptex: 漢字が ^^ 形式でコンソールに表示されるのを修正。 - ptex: \uppercase, \lowercase で core を出す場合があるのを修正。 - -2003/02/13: (p3.1) - ptex: main_memory、hash_extra を大きくし、膨大なマクロ定義をすると、 - 「!Missing control sequence inserted.」のエラーになるのを修正。 - -2003/02/03: (p3.0.6) - ptex: tetex-2.0 への対応 - ptex: sjis 動作以外のとき、\char\sjis が正しく動かないのを修正 - ptex: 実験的に入れてあったプリミティブ(\kansuji、\tozen)を取り除いた - ptexextra.h: BANNER 文字列の更新 - ptexextra.c: tetex-2.0 への対応 - -2002/11/22: - Makefile.in: euc(jis), sjis 用フォーマットを作成するよう修正 - platex 用のリンクを作成するようにした - mkconf: iniptex の記述を削除 - -2002/11/15: (p3.0.5) - ptexextra.c: web2c-7.3.11 (teTeX-beta-20021114) への対応 - -2002/10/29: (p3.0.4) - --version の1行目のフォーマットを変更 - jbibtex: 認識できないオプションで core を出すのを修正 - -2002/10/28: (p3.0.3) - ptex: バナーのフォーマットを変更 - tftopl.ch: pTeX用のHELPを使っていないのを修正 - pltotf.ch: pTeX用のHELPを使っていないのを修正 - -2002/10/24: (p3.0.2) - web2c-7.3.9 に対応。 - -2002/01/18: (p3.0.1) - 以下のソースを用いたたときでもコンパイルできるようにした。 - * tetex-supp.tar.gz - * web2c-7.3.3.tar.gz - * teTeX-src-beta-20011202.tar.gz - -2002/01/15: (p3.0) - ptex-base.ch: fix hyphenation. - -2001/10/03: - README.txt: rewrite - INSTALL.txt: rewrite - ptex-base.ch: version 3.0 - ptexextra-plain.c: removed local_maintainer and this_bug_address - ptexextra-src-special.c: removed local_maintainer and this_bug_address - jbibextra.c: removed local_maintainer and this_bug_address - maintain.h: removed local_maintainer and this_bug_address - version.c: modified message - -2001/07/26: - Change Licence to modified BSD license - COPYRIGHT: new file - COPYRIGHT.jis: new file - INSTALL.txt: new file - README.txt: cut short and move to INSTALL.txt - version.c: change licence filename (l.87,91, COPYING -> COPYRIGHT) - -2001/02/13: - version.c: typo (l.89, build -> build) - ptexhelp.h: typo (l.56, versobe -> verbose) - Changes.txt: typo (20001/02/09 -> 2001/02/09) - -2001/02/09: - REAMDE.txt: rewrite for 2.1.10 - version.c: rewrite the copyright message. enable usage() function. - ptexhelp.h: newfile - help.h: removed - kanji.h.in: include "ptexhelp.h" - ptexextra-plain.c: rename TEXHELP to PTEXHELP. - ptexextra-src-special.c rename TEXHELP to PTEXHELP. - Makefile.in: depend on ptexhelp.h - -2000/11/13: (p2.1.10) -2000/11/10: - ptex.ch: can't load JFM which the number of char_type less than - the glue types. - pltotf.ch: can't convert property list which has fullwidth space - '0x2121(JIS)' in charsintype. - -2000/08/17 - mkconf: modify path separator to semicolon(;) - -2000/03/18 - README.txt: fixed web2c-7.2 -> teTeX-1.0 (l.77) - -2000/03/01 (p2.1.9) - ptexextra-plain.c, ptexextra-src-special.c: version number 2.1.8 -> 2.1.9 - -2000/02/29 (p2.1.9) - README.txt: rewrite. - -2000/02/28 (p2.1.9) - correspond to TeX 3.14159 with Web2c 7.3.1 and tex-src-special. - Makefile.in: distclean cleans tftopl.ch and pltotf.ch - ptexextra-plain.c, ptexextra-src-special.c: newfile - COPYING: newfile - -1998/04/09 (p2.1.8) -1998/03/26 (p2.1.8.beta1) - correspond to TeX 3.14159 with Web2c 7.2. - -1998/03/19 (p2.1.7) - fix bug: \leaders - -1998/02/26 (p2.1.6) - fix bug: \inhibitxspcode - -1997/08/27 (p2.1.5) - official release. - -1997/08/27 (TFtoPL v1.3) - fix bug: occers core dump when loading a JFM. - -1997/08/14 (p2.1.5, beta12) - fix bug: kinsoku process doesn't work for ligatured character. - -1997/08/07 (p2.1.5, beta11) - changed specification: How to insert \xkanjiskip at surrounding a \hbox - (back to the p2.1.4 specification). - -1997/08/01 (p2.1.5, beta10) - fix bug: caused line breaking after a kinsoku penalty by - the \jcharwidowpenalty. - -1997/07/29 (p2.1.5, beta9) - fix bug: A penalty of kinsoku doesn't work well. - fix bug: italic correction is not inserted. - -1997/07/11 (p2.1.5, beta8) - fix bug: A penalty of kinsoku doesn't work well. - fix bug: Inserted \kanjiskip before widow KANJI character when the line - holds only it (embeded 2.1.5.beta6). - fix bug: Inserted \kanjiskip between kern of head of the line and - the next widow KANJI character (since from jTeX 1.7 p1.0.9G). - changed specification: How to insert \xkanjiskip at surrounding text-math. - -1997/06/29 (p2.1.5, beta7) - fix bug: pTeX occers coredump, when \{y,t}baselineskip is not equal zero, - and where explicit kern after ligature like `diff\/'. - changed specification: How to insert \xkanjiskip at surrounding text-math. - -1997/06/16 (p2.1.5, beta6) - fix bug: The \{y,t}baselineskip isn't work except the first place in - a paragraph. - fix bug: Doesn't hyphenation when the value of \{y,t}baselineskip is - not equals zero. - fix buf: Printed `(EUC)' in banner instead of making as JIS-version. - fix bug: `make install' increase the TEXINPUTS.{ptex,platex,platex209} at - texmf.cnf. - -1997/05/13 (p2.1.5, beta5) - fix bug: Fail to read euex10.tfm. - -1997/05/01 (p2.1.5, beta4) - fix bug: \char{\jis,\euc,\sjis,\kuten} after a 1byte character that have - a possibility of ligature like the "`" causes coredump or worng result. - -1997/03/17 (p2.1.5, beta3) - change banner strings. - -1997/03/14 (p2.1.5, beta3) - fix bug: can't run as iniptex/virptex. - -1997/03/12 (p2.1.5, beta2) - fix bug: \calcpos return wrong number. - -1997/02/27 (p2.1.5, beta1) - correspond to TeX 3.14159 with Web2c 7.0. - -1995/11/21 (p2.1.4) - new feature: accept kanji filename. - -1995/11/17 (p2.1.3) - fix bug : try_break routine doesn't corect action when the list - has disp_node or dir_node (Error `disc4'). - -1995/11/07 (p2.1.2) - fix bug : \kanjiskip doesn't inserted after JFM glue/kern. - -1995/10/11 - include jbibtex (Shouichi Matsui) and - pdvitype (Thanks, Kazunori Asayama) - -1995/09/20 (p2.1.1) - fix bug : \xkanjiskip doesn't inserted after italic correction. - fix bug : italic correction doesn't inserted when \{y,t}baselineshift - is used. - -1995/09/08 (p2.1) - fix bug : \xkanjiskip doesn't inserted after math mode which correct - italic kern spacing. - -1995/08/29 - rename `find_first' to `find_first_char' for djgpp 1.12. - (Thanks, Kazunori Asayama) - -1995/03/25 - fix bug : Three minuses sequence (---) doesn't become em-hyphen. - -1995/03/11 - imprement \kanji primitive. - -1995/01/17 - translate/modify pTeX 2.0 change file for TeX 3.1415. - -1994/12/17 - translate/modify pTeX 2.0 change file for TeX 3.141. - -1994/10/17 - translate/modify pTeX 1.0.9F change file which based on TeX 2.99 to - pTeX 2.0 which based on TeX 3.14. - -== EOF === diff --git a/Master/texmf-dist/doc/ptex/ptex-base/LICENSE b/Master/texmf-dist/doc/ptex/ptex-base/LICENSE index 14b562dcc89..7392f6e8454 100644 --- a/Master/texmf-dist/doc/ptex/ptex-base/LICENSE +++ b/Master/texmf-dist/doc/ptex/ptex-base/LICENSE @@ -1,5 +1,5 @@ Copyright (C) 2010 ASCII MEDIA WORKS. -Copyright (C) 2016-2018 Japanese TeX Development Community +Copyright (C) 2016-2019 Japanese TeX Development Community All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/Master/texmf-dist/doc/ptex/ptex-base/Makefile b/Master/texmf-dist/doc/ptex/ptex-base/Makefile deleted file mode 100644 index 5dd25d6f87b..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -DOCTARGET = jfm eptexdoc -# following documents are not maintained anymore; -# even some descriptions might be different from -# current status of pTeX -# jtex_asciimw jtexdoc_asciimw -# ptexdoc_asciimw ptexskip_asciimw -# eptex_resume -PDFTARGET = $(addsuffix .pdf,$(DOCTARGET)) -DVITARGET = $(addsuffix .dvi,$(DOCTARGET)) -KANJI = -kanji=jis -FONTMAP = -f ipaex.map -f ptex-ipaex.map -TEXMF = $(shell kpsewhich -var-value=TEXMFHOME) - -all: $(PDFTARGET) - -eptexdoc.pdf: eptexdoc.tex fam256p.tex fam256d.tex - platex $(KANJI) eptexdoc.tex - platex $(KANJI) eptexdoc.tex - mendex -J -s gind.ist eptexdoc.idx - platex $(KANJI) eptexdoc.tex - platex $(KANJI) eptexdoc.tex - dvipdfmx $(FONTMAP) eptexdoc.dvi - rm -f *.aux *.log *.toc *.idx *.ind *.ilg *.out eptexdoc.dvi - -.SUFFIXES: .tex .dvi .pdf -.tex.dvi: - platex $(KANJI) $< - platex $(KANJI) $< - platex $(KANJI) $< - rm -f *.aux *.log *.toc -.dvi.pdf: - dvipdfmx $(FONTMAP) $< - -.PHONY: install clean -install: - mkdir -p ${TEXMF}/doc/ptex/ptex-base - cp ./LICENSE ${TEXMF}/doc/ptex/ptex-base/ - cp ./README* ${TEXMF}/doc/ptex/ptex-base/ - cp ./Makefile ${TEXMF}/doc/ptex/ptex-base/ - cp ./*.pdf ${TEXMF}/doc/ptex/ptex-base/ - ls ./*.tex | \ - grep -v ptex.tex | grep -v ascii-jplain.tex | grep -v kinsoku.tex | \ - xargs -I % cp % ${TEXMF}/doc/ptex/ptex-base/ - cp ./Change* ${TEXMF}/doc/ptex/ptex-base/ - mkdir -p ${TEXMF}/tex/ptex/ptex-base - cp ./ptex.tex ${TEXMF}/tex/ptex/ptex-base/ - cp ./ascii-jplain.tex ${TEXMF}/tex/ptex/ptex-base/ - cp ./kinsoku.tex ${TEXMF}/tex/ptex/ptex-base/ - cp ./*.ini ${TEXMF}/tex/ptex/ptex-base/ - cp ./eptex.src ${TEXMF}/tex/ptex/ptex-base/ - cp ./eptexdefs.lib ${TEXMF}/tex/ptex/ptex-base/ -clean: - rm -f $(DVITARGET) $(PDFTARGET) diff --git a/Master/texmf-dist/doc/ptex/ptex-base/README.md b/Master/texmf-dist/doc/ptex/ptex-base/README.md index 23e865fb9c0..211b67d7e31 100644 --- a/Master/texmf-dist/doc/ptex/ptex-base/README.md +++ b/Master/texmf-dist/doc/ptex/ptex-base/README.md @@ -1,6 +1,9 @@ # ptex-base -The bundle contains plain TeX format and documents for pTeX and e-pTeX. +The bundle contains plain TeX format for pTeX and e-pTeX. +Documentation for pTeX and e-pTeX are included in ptex-manual bundle +([CTAN](https://ctan.org/pkg/ptex-manual), +[GitHub](https://github.com/texjporg/ptex-manual)). ## Character encoding @@ -22,6 +25,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)). ## Release Date -2018-08-18 +2019-04-03 Japanese TeX Development Community diff --git a/Master/texmf-dist/doc/ptex/ptex-base/README_ptex b/Master/texmf-dist/doc/ptex/ptex-base/README_ptex deleted file mode 100644 index e7697afae5c..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/README_ptex +++ /dev/null @@ -1,32 +0,0 @@ ---------------------------------------------------------------------------- -● 日本語 TeX(pTeX: publishing TeX)について ---------------------------------------------------------------------------- - - * 日本語 TeX(pTeX)は、本格的な商業出版に耐える TeX を開発する - ことを目標にしています。 - - * pTeX は、横組み専用の「日本語 TeX」に縦組み機能を追加したもの - です。日本語化のバグフィックスはすべて pTeX に対してのみ行ない、 - 横組のみの日本語 TeX に対しては行ないませんので、ご了承ください。 - - * pTeX は、WEB のチェンジファイルを使って実現されています。 - - * インストールの手順については、付属の INSTALL.txt ファイルを参照 - してください。 - - * pTeX の使用および配付に関しては、付属の COPYRIGHT ファイルを - 参照してください。 - ---------------------------------------------------------------------------- -● 問い合わせ先など ---------------------------------------------------------------------------- -pTeX についてのお問い合わせは、電子メールで ptex-staff@ml.asciimw.jp 宛て -にお願いします。 - -pTeX の WEB ページ(http://ascii.asciimw.jp/pb/ptex/)では、バグ情報や -インストールのヒント、pTeX で追加されたプリミティブ一覧などを掲載して -います。こちらもご覧ください。 - -------------------------------------- -株式会社アスキー・メディアワークス -=============================================================== EOT ===== diff --git a/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.pdf b/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.pdf deleted file mode 100644 index 7a91fe6e152..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.tex b/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.tex deleted file mode 100644 index 07449968fc9..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/eptex_resume.tex +++ /dev/null @@ -1,1647 +0,0 @@ -%#!eplatex resume.tex -\documentclass[a4j,papersize]{jsarticle} -\usepackage[all]{xy} -\usepackage{moreverb,manfnt} -\usepackage[14Q,20mm,ls175,nohiragino]{jd} -\makeatletter -\fpinit -\tracingstats=1\xspcode'134=3 -\def\JTeX{J\TeX} -\def\etrip{{\tt e-TRIP}} -\def\trip{{\tt TRIP}} -\def\mf{{\fontencoding{U}\fontfamily{manual}\selectfont METAFONT}} -\renewcommand{\section}{% - \jd@startsection{section}{1}{\z@}{\z@}{3}{1.1zh}{1zh}% - {\normalfont\LARGE\headfont\raggedright}} -\renewcommand{\subsection}{% - \jd@startsection{subsection}{2}{\z@}{\z@}{2}{1zh}{0.25zh}% - {\normalfont\large\headfont\raggedright}} -\input shl-tab -\newdimen\@baselineskip -\def\WEB{\texttt{WEB}} -\def\eTeX{$\epsilon$-\TeX}\def\pdfTeX{pdf\/\TeX} -\def\epTeX{$\epsilon$-\pTeX}\def\peTeX{pe\TeX} -\def\NTS{\leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}% - \kern-0.2emS$}\,} -\def\XeTeX{\leavevmode - \setbox0=\hbox{X\lower.5ex - \hbox{\kern-.15em\reflectbox{E}}\kern-.1667em \TeX}% - \dp0=0pt \ht0=0pt \box0 } -% ↑ http://wiki.contextgarden.net/Talk:XeTeX のを改変 - -% from etex_man.sty -\DeclareFontShape{OT1}{cmr}{bxrev}{n}{<-> xbmc10}{} % for right-to-left text -\DeclareTextFontCommand{\revrm}{\fontseries{bxrev}\fontshape{n}\selectfont} -\def\TeXXeT{\TeX-\revrm{\TeXXeTstate=1\beginR\TeX-\endR}} -\def\emph#1{{\rm\bfseries\mathversion{normal}#1}} - -\def\xymtt#1{\hbox to 0zw{\hss\texttt{#1}\hss}} -\jdAdjust -\count0=0\thispagestyle{empty} -\jdNline{16}{} -\jdNline{3}{\huge\emph{計算数学II 作業記録}} -\makeatletter -\jdNline{-1}{} -\jdNline[r]{2}{\Large 05班 ``epsilon'',北川 弘典} -\jdNline[r]{1}{\large \number\year/\two@digits\month/\two@digits\day - \space\two@digits\hour:\two@digits\minute} -\makeatother -\newpage -\tableofcontents - -\newpage -\section{注意事項} -\begin{itemize} -\item 成果物の\epTeX は\verb+http://www.ms.u-tokyo.ac.jp/~kitagawa/+で公 - 開しております. -\item 角藤さんが2007/12/30にp\TeX${}+{}$\eTeX の実験\footnote{こち - らは\peTeX と呼称.正式にはどうlogoを組むか分からないので,この表現 - で許してもらおう.pとeの位置が反対なのがおもしろいと共に幸いである - けれども,こちらの名称の由来はp(\eTeX)という実装方法であったからだ - ろう(と推測してみる).pe\TeX の登場でこちらもやる気がかき立てら - れ,\epTeX がより完成度が高いものとなりえた.}を公開されたが,これ - は本プロジェクトとは全く関係のないものである. -\item この文書は概ね着手した順番に並んでいるが,「形式化」以降は順番が - 若干入り乱れている.また後になるほど実際の作業と同時進行して書いた - 部分が多くなってくる. -\item 本文書は計算数学IIの発表に用いるには長すぎるということで,発表当日 (2/1) - に使うのは別に作ったスライドだけとした.しかし,もちろん,この文書 - は残すつもり. -\item \emph{一部のversionのAdobe Readerではヘブライ文字がちゃんとでない - ようですが,原因はまだよくわかりません.} -\item 阿部 紀行さん,角藤 亮さん,「教職男」さん,「通りすがり2」さんをは - じめとする方々に(このようなところで申し訳ないが)深くお礼を申し上 - げます. -\end{itemize} -\newpage - -\section{テーマについて} -\subsection{背景} -Knuth教授の開発された狭義の\TeX では,日本語が通らない.それを日本語に対 -応させようという試みとして,NTT \JTeX\footnote{千葉大の桜井さんがメンテ. -\verb+http://www.math.s.chiba-u.ac.jp/~sakurai/software.html+.} とアス -キーの\pTeX\footnote{\verb+http://www.ascii.co.jp/pb/ptex/+が公式ページ -である.}が有名であり, -後者の\pTeX は縦組みもできるということもあって,日本では標準的になったと -いってもよい.(狭義の)\TeX に対応する\LaTeX マクロについても,J\TeX, -\pTeX のそれぞれに対応版が存在し,接頭辞を拝借してp\LaTeX などのように呼 -ぶ. - -\eteiri - -\def\heb#1{\leavevmode\smash{\fontencoding{U}\fontfamily{heb}\selectfont #1}} -一方,それ以外の\TeX の拡張として,例えば次のようなものがある. -\begin{itemize} -\item \eTeX\ (eTeX). 各種機能が拡張されて - いる.詳細は後述. -\item $\Omega$ (Omega). \TeX をUnicodeに対応させて多言語処理を実装させたものであ - る.これに対応する\LaTeX マクロは$\Lambda$ (Lambda) と呼ばれる. -公式ページは\verb+http://omega.enstb.org/+. -\item \heb{\char'200}(Aleph). $\Omega$に\eTeX 相当の機能を取り込んだも - の.対応する\LaTeX マクロは \heb{\char'214} (Lamed) と呼ばれる. -\item \pdfTeX. \TeX\ sourceから直にpdfを作成できるようにしたもの.今は - \eTeX がベースとのこと.公式ページは -\verb+http://www.tug.org/applications/pdftex/+. -\end{itemize} - -\eteiri - -さて,\TeX はある種のプログラミング言語であり,変数,つまりレジスタも -\verb+\count+(4\,byte整数),\verb+\dimen+($2^{-16}$\,pt単位で,整数部 -14\,bit,小数部16\,bitの固定小数点数),\verb+\box+などのいくつかの種類が -あり,各種類0\,〜\,255のindex で,つまり1 種類につき256個ずつ使えるようになっ -ていて,\pTeX でもそれを引きずっている.しかし,MusiX\TeX などのような巨 -大なマクロパッケージでは,全く同じsourceでも(p\LaTeX では日本語まわりで -余計にレジスタを使うので)欧文\LaTeX では処理できるが.p\LaTeX では処理で -きないといった事態がすでに発生している.一方,前出の\eTeX による拡張では, -レジスタは各種$2^{15}$個使えるように改良されているので,拡張機能を使う状 -況では実質的には起こりえないと思ってよい.. - -\eteiri - -欧文の\LaTeX を使おうとして端末上で\verb+latex+と打つと,そこで起動する -のは元々の\TeX ではなく,大幅に機能拡張された\pdfTeX が互換モードで動い -ているという状況が最近では発生している,現に,作業を行ったPCでは\TeX\ -Live 2007という\TeX 関連のファイルをまとめたもの(\pTeX は入ってない)に, -自分で\pTeX を追加して使っているのだが,以下のように\pdfTeX が起動した. -このことから考えると,世界的には\eTeX の機能が利用できることが -当たり前になりつつあるといってもよいのかもしれない.つまり,特に,各種 -256個というレジスタの制限はもはやobsoluteになりつつあるといえるだろう. - -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  [h7k doc]$ latex -  This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) -  (後略) -\end{verbatim} -\end{adjustvboxheight} - -\subsection{テーマの提示} -前置きが長くなったが,以上の背景から,本班では\emph{\pTeX に$\bm -\epsilon$-\TeX の機能の一部,特にレジスタ数の話についての機能を組み込む} -ということを第1の目標とした. - -第2の目標は半分ネタである.\TeX ソース内で使用できる算術演算はすべて整数 -(と固定小数点数)の四則演算であるため,例えば3次方程式の解の近似計算などは -FortranとかCとかの他の言語でやらなければならなかった.これを\TeX の内部でで -きたら,いちいち計算用プログラムの結果を貼り付けたり\verb+\input+で読んだ -りする必要が無くて,楽になるに違いない\footnote {そう考えるのは多分僕だけ -だ.},と僕は考えたので,(速度はある程度は度外視することにして)\emph{\TeX への浮 -動小数点演算の実装}を次の目標にした\footnote{Beebe\nobreak\cite{beebe}のtitleは -Extending \TeX\ and \mf\ with Floating-Point Arithmeticであるが, -そちらは「Lua等のスクリプト言語による(IEEE 754rに基づくような) -実装」というアプローチを示しているだけである.}. - -\section{\TeX 周辺のcompile方法} -\pTeX の改造をするためには,それがどのようにcompileされているかを知らな -ければもちろんできない.僕は昔から\TeX 関係のプログラムを自分でソースか -らコンパイルしていた(Unix系統なら土村さんによるptetex3のおかげで,だい -ぶ簡単になった)ので知っていたのでこれを調べる時間はほとんど0で済んだ. - -\TeX の一番元々のソースは{\tt tex.web}というファイルであり,はっきり冒頭 -に -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  % This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved. -  % Copying of this file is authorized only if (1) you are D. E. Knuth, or if -  % (2) you make absolutely no changes to your copy. (The WEB system provides -  % for alterations via an auxiliary file; the master file should stay intact.) -  % See Appendix H of the WEB manual for hints on how to install this program. -  % And see Appendix A of the TRIP manual for details about how to validate it. - -  % TeX is a trademark of the American Mathematical Society. -  % METAFONT is a trademark of Addison-Wesley Publishing Company. -\end{verbatim} -\end{adjustvboxheight} -\noindent とあるように,これがKnuth教授の製作したファイルそのままである.このファ -イルは\WEB という言語/書式で書かれている. - -\subsection{\WEB の説明} -ここについては松山\nobreak\cite{matsu3}を読んだ方が, -以下の僕の下手な説明よりわかりやすいかもしれないが,まあ,お付き合いくだ -さい. - -\WEB の詳細はKnuth~\cite{webman}とか -から得られるが,大雑把に言うと,Pascalでかかれたプログラムのソースを小さ -く分割して,各分割の断片は\TeX ソースによ -る説明文を必要なら付属させて,それらを(ほとんど任意の順序で)並べたもの -である. -上の説明では非常にわかりにくいので,実例を別に挙げるこおにしておこう(付 -録参照). -\eteiri - -さて,\WEB で書かれたファイル(例えば\verb+fuga.web+)を\verb+tangle+とい -うプログラムに通すと,そこからPascalで書かれたプログラムのソースだけが抜 -き出され,\verb+fuga.pas+とか\verb+fuga.p+ができる.一方で,\verb+weave+ -というプログラムに通すと,\verb+fuga.web+中に書かれた解説文がPascalソー -スとともに整形され,\TeX ソース\verb+fuga.tex+を得る.これを\TeX で処理 -すると,綺麗に整形されたソース付きのドキュメントが得られる,という寸法で -ある\footnote{ちなみに,tangleは「もつれる/させる」,weave /w\'i:v/は「織る」と -いう意味である.{\tt tangle}は\WEB ソース中に適当な順序で置かれたプログラ -ムの各断片をちゃんと並べ直すが,吐かれたPascalソースは読もうとする気が失せ -るほどぐちゃぐちゃである.}. - -また,\WEB にはchange fileという機能が用意されており,ちょうどパッチファイ -ルの役割を果たす.構造も似ており,\newpage -\begin{adjustvboxheight} -\narrowbaselines -\begin{verbatim} -  @x -  変更前の部分 -  @y -  変更後の部分 -  @z -\end{verbatim} -\end{adjustvboxheight} -\noindent の繰り返しからなっている.\verb+@x+の行が\verb+@x l.1701 hogehoge...+など -のようになっている(注釈が書かれている)ことも多い.{\tt tangle}や{\tt -weave}の引数にはこのchange fileを\WEB ソースとともに指定することができて, -例えば,\par -\noindent \ \ \ \ {\tt >\ tangle fuga.web fuga.ch} - -\noindent とすると,{\tt fuga.web}の内容を{\tt -fuga.ch}でパッチしたものについて,{\tt tangle}処理が行われる.また,{\tt -tie}というプログラムを使えば,\WEB ソースとchange fileから,change file適 -用後の\WEB ソースを作ったり,複数のchange fileをまとめることができる -\footnote{厳密には,これは{\tt CWEB}のプログラムらしい.名前の由来は英単 -語が「結ぶ」という意味だからであろう.Star Warsの某帝国軍戦闘機とは関係は -ないだろう.}. - -\subsection{Web2Cと\TeX のコンパイル} - -さて,{\tt tangle}で{\tt tex.web}を処理すると{\tt tex.p}が生成されるが, -現在はWeb2Cという実装方法でこれを処理している.詳細は松山\nobreak\cite{matsu3} -に譲るが,{\tt tex.web}に{\tt tex.ch}というWeb2C実装特有の拡張やシス -テム依存部分(入出力とか,時計)を納めたパッチを適用して,それを{\tt -tangle}にかけて{\tt tex.p}を生成する.その後,{\tt web2c}というプログラ -ム(と付属する小ツール)によって,{\tt tex.p}は{\tt texini.c}, {\tt -tex0.c},~$\ldots$というCソースにまで変換される.それらと(もともとCソー -スで準備されているシステム依存部分である){\tt texextra.c}とかをコンパイ -ル,リンクして,ようやく実行可能形式が出来上がるというわけである. - -これを図にしてみよう: -\jdAline[c]{\small\narrowbaselines\xymatrix{% -\texttt{tex.web}\ar[r]&\fbox{\tt tangle}\ar[r]&\texttt{tex.p}\ar[rr]^-{\rm -Web2C}&&\text{C source}\ar[rr]^-{\rm C\ compiler}&&\texttt{tex}\\ -&\texttt{tex.ch}\ar[u]}} - -同様に,\pTeX のコンパイルは次のように行われる\footnote{最後のC -compiler のところは省略した.また,厳密には{\tt ptex-base.ch}と{\tt -ptex.web}から{\tt ptex.ch}を作り,それを適用して{\tt tangle}に食わせてい -るが,そこら辺は省略.}: - -\jdAline[c]{\small\narrowbaselines\xymatrix{\texttt{% -tex.web}\ar[r]&\fbox{\tt tie}\ar[r]&\texttt{ptex.web}^*\ar[r]&\fbox{\tt -tangle}\ar[r]&\texttt{ptex.p}^* \ar[rr]^-{\rm Web2C}&&\text{C source}\\ -&\texttt{tex.ch}\ar[u]&&\texttt{ptex-base.ch}^*\ar[u] }} - -さらに,今回の準主役とも言える\eTeX では,こうなっている: -\jdAline[c]{\small\narrowbaselines\xymatrix{ {\tt -tex.web}\ar[r]&\fbox{\tt tie}\ar[r]&\texttt{etex.web}\ar[r]&\fbox{\tt -tangle}\ar[r]&\texttt{etex.p} \ar[rr]^-{\rm Web2C}&&\text{C source}\\ -{\begin{array}{c}\texttt{etex.ch}^{\dagger}\\{\tt -etex.fix}^{\dagger}\end{array}}\ar[ur] &{\begin{array}{c}{\tt -tex.ch0}^{\dagger}\\\texttt{tex.ch}\\\texttt{tex.ch1}^{\dagger}\\{\tt -tex.ech}^{\dagger}\\(\texttt{etex.web})\end{array}}\ar[r] &\fbox{\tt -tie}\ar[r]&\texttt{etex.ch}\ar[u] }} - -ここで,$*$, $\dagger$とかはファイルのあるディレクトリを表している.なお, -{\tt etex.fix}は実際には中身はなかった. - -\newpage -ここから,第1の目標,つまり\pTeX に\eTeX の機能の一部をマージ -すること,を実現させるためには,大雑把に言えば,${\tt tex.web}+{\tt -tex.ch}+\text{\tt ptex-bash.ch}^*+{\tt etex.ch}^{\dagger}$とするか,${\tt -tex.web}+{\tt tex.ch}+{\tt etex.ch}^{\dagger}+\text{\tt ptex-bash.ch}^*$と -(ここでの加法はもちろん非可換である!)すればよいだろう,と想像がつく. -どちらを選んでもよかったが,ここでは\pTeX をベースとしたいという意味で, -前者を採用することにした\footnote{これによりproject名が\emph{$\bm -\epsilon$-\pTeX}と決まった.$\varepsilon$-(\pTeX)のつもりであ -る.もちろんこの文書も\epTeX -で組版している.}. - -\section{$\bm \epsilon$-\TeX のマージ} -\subsection{\pTeX の準備} - -というわけで,主に編集するのは{\tt etex.ch}である. -しかし,\pTeX を元に作業をするので,\pTeX がコンパイルできることを確かめ -ておかねばならない.その手順は大まかには\TeX wiki~\cite{texwiki}の後 -半部にある「古い情報」にある通りである.しかし,te\TeX\ 3.0下では無事にあ -るようにコンパイルができるのだが,\TeX\ live 2007だとWeb2Cのバージョンが -新しく,途中で以下のようなエラーを出して止まってしまった: -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  gcc -DHAVE_CONFIG_H -I. -I.. -I../.. -I../.. -O2 -s -march=pentium-m -fomit-f -  rame-pointer -c ptexextra.c -o ptexextra.o -  ptexextra.c: In function 'parse_options': -  ptexextra.c:956: error: too few arguments to function 'printversionandexit' -  ptexextra.c: In function 'getjobname': -  ptexextra.c:1722: error: number of arguments doesn't match prototype -  texcoerce.h:908: error: prototype declaration -  make: *** [ptexextra.o] Error 1 -\end{verbatim} -\end{adjustvboxheight} -これは{\tt printversionandexit}関数と{\tt getjobname}関数の宣言がWeb2Cの -version upに伴って変わってしまったのが原因である.修正箇所は -{\tt ptex756.diff}にdiffの形で書いている. -また,{\tt tftopl}とかについては{\tt tangle}の段階でエラーが出るようであ -るが,これらは本projectと関係ないので省略する: -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  This is TIE, CWEB Version 2.4. (Web2C 7.5.6) -  Copyright (c) 1989,1992 by THD/ITI. All rights reserved. -  (../tftopl.web) -  (../tftopl.ch) -  ....500....1000....1500 -  (No errors were found.) -  ../tangle ./tftopl.web tftopl.ch -  This is TANGLE, Version 4.5 (Web2C 7.5.6) -  *1*6*18*26*44*88*96*100 -  ! Hmm... 1 of the preceding lines failed to match. (change file l.378) -  @y -   *114*126 -  Writing the output file.....500.. -  Done. -  (Pardon me, but I think I spotted something wrong.) -  make: *** [tftopl.p] Error 1 -\end{verbatim} -\end{adjustvboxheight} - -さて,とりあえずのたたき台として\pTeX の\WEB ソース,つまり{\tt -tex.web}, {\tt tex.ch}, {\tt ptex-base.ch}を1つにまとめた{\tt -ptex-orig.web}を{\tt tie}によって作成した.その後,{\tt ptex-orig.web}中 -の最初の部分である「{\tt This is TeX}」の部分などを若干修正した.修正箇所は -diffの形で{\tt ptex-orig.diff}としてある. - -\subsection{$\bm\epsilon$-\TeX の機能} -\eTeX のマニュアル\nobreak\cite{etexman}を元に\eTeX の主な機能を見てみることにする. -\eTeX にはCompatibility modeとExtended modeの2つが存在し,前者では\eTeX -特有の拡張は無効になるのでつまらない.後者がおもしろい. - -拡張機能を使うに\xspcode`*=3\xspcode`-=3{}はファイル名を渡すときに{\tt *} -をつけるかコマンドラインオプションとして{\tt -etex}スイッチをつければいい -が,\eTeX 拡張に関わる追加マクロ\footnote{例えば,\TeX ではレジスタに -\verb+\@tempcnta+などの「別 -名」をつけることが非常によくある.この機能については我々が実際に使うのははplainマクロや -\LaTeX マクロによって提供されており,当然256個制限の環境下を前提として組 -まれている.}は当然ながらそれだけで -は駄目である.「plainマクロ for \eTeX」({\tt etex.fmt}というのが一番マシ -かな)では自動的に追加マクロである{\tt etex.src}が呼ばれる.\LaTeX 下では -ちょうど{\tt etex.src}に対応した{\tt etex} パッケージを読み込む必要がある. - -\paragraph{レジスタの増加} -最初に述べたように,\TeX では6種類のレジスタが各256個ずつ利用できる.そ -れぞれのレジスタには\verb+\dimen75+などのように0\,〜\,255の番号で指定できる -他,予め別名の定義をしておけばそれによって指定することもでき -る\makeatletter\advance\c@footnote-1\footnotemark\makeatother. -これらのいくつかは特殊な用途に用いられる(例えば -\verb+\count0+はページ番号などのように)ことになっているので,さらにuser -が使えるレジスタは減少する. - -\eTeX では,追加のレジスタとして番号で言うと256\,〜\,32767が使用できるように -なった.上のpdfによると最初の0\,〜\,255と違って若干の制限はあるようだが,そ -れは些細な話である.追加された(各種類あたり)$32768-256=32512$個のレジ -スタは,メモリの効率を重視するためsparse registerとして,つまり,必要な時に始めてツリー構造の中で確保 -されるようになっている. - -\paragraph{式が使用可能に} -\TeX における数量の計算は充実しているとは言い難い.例えば, - - \verb+\dimen123+${}\leftarrow($\verb+\dimen42+${}+{}$\verb+\@tempdima+ -$)/2$ - -\noindent という計算を元々の\TeX で書こうとすると, -\begin{verbatim} -  \dimen123=\dimen42 \advance\dimen123 by \@tempdima \dimen123=0.5\@tempdima -\end{verbatim} -のように書かないといけない.代入,加算代入,乗算代入,除算代入ぐらいしか -演算が用意されていない状態になっている(上のコードのように,$d_2\mathrel{+\!\!=} -0.8 d_1$というような定数倍を冠することは平気). - -\eTeX では,そのレジスタの演算に,他のプログラミング言語で使われているような数式の表現が使えるようになった.上のPDFでは実例として -\begin{verbatim} -  \ifdim \dimexpr (2pt-5pt)*\numexpr 3-3*13/5\relax + 34pt/2<\wd20 -\end{verbatim} -が書かれている.これは,\def\mpt{\,\mathrm{pt}} -\[ - 32\mpt=(2\mpt-5\mpt)\left(3-\mathop{\mathrm{div}}(3\cdot 13,5)\right) -+\frac{34\mpt}{2}<\text{{\tt \char'134 box20}の幅} -\] -が真か偽かを判定していることになる\footnote{divは整数除算を表したつもり -である.整数除算は余りが被除数の符号と等しくなるように計算される.}. - -\newpage -\paragraph{{\tt\char'134 middle} primitive} -\TeX に\verb+\left+, \verb+\right+というprimitiveがあり,それを使えば括 -弧の大きさが自動調整されるのはよく知られている.\eTeX では, -さらに\verb+\middle+ primitiveが追加された. - -具体例を述べる. -\def\set#1#2{\setbox0=\hbox{$\displaystyle #1,#2$}% -\left\{\, \vphantom{\copy0}#1 \,\right|\!\left.\, \vphantom{\copy0}#2 \,\right\}} -\def\eset#1#2{\left\{\, #1 \,\middle|\, #2 \,\right\}} -\[ \set{n+\frac12}{n\in \omega} \eset{n+\frac12}{n\in \omega} \] - -これは以下のsourceで出力したものである: -\begin{adjustvboxheight} -\narrowbaselines -\begin{verbatim} -  \def\set#1#2{\setbox0=\hbox{$\displaystyle #1,#2$}% -  \left\{\, \vphantom{\copy0}#1 \,\right|\!\left.\, \vphantom{\copy0}#2 \,\right\}} -  \def\eset#1#2{\left\{\, #1 \,\middle|\, #2 \,\right\}} -  \[ \set{n+\frac12}{n\in \omega} \eset{n+\frac12}{n\in \omega} \] -\end{verbatim} -\end{adjustvboxheight} - -両方とも集合の表記を行うコマンドである.\TeX 流の\verb+\set+では2つの -\verb+\left+, \verb+\right+の組で実現させなければならず,そのために$|$の -左側と右側に入る式の最大寸法を測定するという面倒な方法を使っている.その -上,この定義では\verb+\textstyle+以下の数式(文章中の数式とか)ではそのま -ま使えず,それにも対応させようとすると面倒になる.一方,\eTeX 流の -\verb+\eset+では,何も考えずに -\verb+\left+, \verb+\middle+, \verb+\right+だけで実現できる. - -\paragraph{\TeXXeT\ \rm({\tt TeX-{}-XeT})} -left-to-rightとright-to-leftを混植できるという機能であるらしい. -ヘブライ語あたりの組版に使えるらしいが,よく知らない. -ここでのRtoLはLtoRに組んだものを逆順にしているだけのような -気がする. -%\footnote{例えば{\TeXXeTstate=1\beginR ``Tea, Earl Grey, -%hot.''\endR}のように.}. -\eteiri - -とりあえず一目につきそうな拡張機能といったらこれぐらいだろうか.他にも -tracing機能や条件判断文の強化などあるが,そこら辺はパッとしないのでここ -で紹介するのは省略することにしよう. - -この中で,\TeXXeT 機能だけは,「\TeX から\pTeX への変更部分とかちあって, -作業に非常に手間がかかる」と予想した(根拠はなし.あえて言えば勘).それ -に,僕は右→左の言語をアラビア語やヘブライ語ぐらいしか知らず,これらは -Arab\TeX などを使うことで\pLaTeX でも入力できるので,ひとまず\TeXXeT 機能だ -けは実装を見送り\footnote{目次からも分かる通り,最終的には実装することに -なるが.},他はできる限り実装することにした. - -\subsection{{\tt etex.ch}の改変} -ここから実際の作業であり,ひどく退屈な作業である. -まず{\tt etex.ch}先頭の著作権等に関する部分を -書き換えておく. - -{\tt etex.ch}中の{\tt @x ... @y ... @z}のところにはありがたいことにコメ -ントがついていて,どういう理由でパッチが当たるのかと,当たる行番号までわ -かるようになっている\footnote{但し,ここに書かれている行番号は{\tt -tex.web}に対してのそれであろう.しかし{\tt ptex-orig.web}でもあまり行番 -号は変わらない.}.次は{\tt etex.ch}の抜粋である: -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  %--------------------------------------- -  @x [15] m.208 l.4087 - e-TeX saved_items -  @d un_vbox=24 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )} -  @y -  @d un_vbox=24 {unglue a box ( \.{\\unvbox}, \.{\\unvcopy} )} -   {( or \.{\\pagediscards}, \.{\\splitdiscards} )} -  @z -  %--------------------------------------- -  @x [15] m.208 l.4097 - e-TeX TeXXeT -  @d valign=33 {vertical table alignment ( \.{\\valign} )} -  @y -  @d valign=33 {vertical table alignment ( \.{\\valign} )} -   {or text direction directives ( \.{\\beginL}, etc.~)} -  @z -  %--------------------------------------- -  @x [15] m.208 l.4113 - e-TeX middle -  @d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )} -  @y -  @d left_right=49 {variable delimiter ( \.{\\left}, \.{\\right} )} -   {( or \.{\\middle} )} -  @z -%--------------------------------------- -\end{verbatim} -\end{adjustvboxheight} - -\TeXXeT 機能の実装はとりあえず見送ったと書いたので, -上で言うところの{\tt e-TeX TeXXeT}などとコメントが振られている部分をバッサリ -削除するとともに,{\tt ptex-orig.web}にそのまま{\tt etex.ch}が適用できな -いところを調べ,{\tt tex.web}と{\tt ptex-orig.web}も見ながら修正していく. -\eTeX 拡張の本質的な部分は,(\pTeX でもそうだったが){\tt etex.ch}の後 -半部の以下の部分に集中して現れるので,そこでも -\TeXXeT 関連と思われる場所を削除した. -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  %--------------------------------------- -  @x [54] m.1379 l.24945 - e-TeX additions -  @* \[54] System-dependent changes. -  @y -  @* \[53a] The extended features of \eTeX. -  (中略) -  @* \[54] System-dependent changes. -  @z -  %--------------------------------------- -\end{verbatim} -\end{adjustvboxheight} - -削除しすぎたような場合は{\tt tangle}時に警告メッセージが表示される(断片 -が欠けていた場合)か,C sourceのコンパイルでエラーが出るので,退屈ではあっ -たが,そんなに厳しくは無かった. - -なお,{\tt ptex-orig.web}にそのまま{\tt etex.ch}が適用できな -いところを調べるのは簡単である.そのようなところがあった場合,{\tt -tie}で適用後の\WEB ソースを作ろうとすると,以下のようなメッセージが表示 -されるからである. -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} -  [h7k eptex]$ tie -m ep.web ptex-orig.web ../etexdir/etex.ch -  This is TIE, CWEB Version 2.4. (Web2C 7.5.6) -  Copyright (c) 1989,1992 by THD/ITI. All rights reserved. -  (ptex-orig.web) -  (../etexdir/etex.ch) -  ....500....1000....1500....2000....2500....3000....3500....4000....4500....5000. -  ...5500....6000....6500....7000....7500....8000....8500....9000....9500....10000 -  ....10500....11000....11500....12000....12500....13000....13500....14000....1450 -  0....15000....15500....16000....16500....17000....17500....18000....18500....190 -  00....19500....20000....20500....21000....21500....22000....22500....23000....23 -  500....24000....24500....25000....25500....26000....26500....27000....27500....2 -  8000....28500.. -  ! Change file entry did not match (file ../etexdir/etex.ch, l.200). - -  (Pardon me, but I think I spotted something wrong..) -\end{verbatim} -\end{adjustvboxheight} -ちょっとずつ{\tt etex.ch}を改変するごとに上のようなコマンドを走らせれば, -次に修正するべき場所がわかるという話である. - -\subsection{\trip\ test, \etrip\ test} -\trip\ testとは,Knuth教授による\TeX のdebugの補助ツールである.これは\TeX -のソースコードの全部分を渡るように作られたテスト入力であり,大量のlogを -出力する.一度自分の計算機で\trip\ testを行い,その結果が「正しい」出力と -異なっていたなら,それはどこかにbugが潜んでいるに違いないということを意 -味する.Knuth教授自身も,Knuth~\cite{trip}の中で以下のように述べている. -\begin{adjustvboxheight} -\narrowbaselines\begin{indented}{2zw} -If somebody claims to have a correct implementation of \TeX, I will not -believe it until I see that {\tt TRIP.TEX} is translated properly. -I propose, in fact, that a program must meet two criteria before it -can justifiably be called \TeX: (1)~The person who wrote it must be -happy with the way it works at his or her installation; and (2)~the -program must produce the correct results from {\tt TRIP.TEX}. -\end{indented} -\end{adjustvboxheight} -その意味では,p\TeX の段階でももはや\trip\ testはパスしない.\TeX で出ていた\\ -  \verb+! Bad character code (256).+\\ -というerrorはもはや出ないし,内部モー -ドが出力される所でもいちいち\verb+yoko direction+などが出力される.しか -し我々は\pTeX をベースとしているので,\epTeX の動作をチェックするという -今の文脈では.\pTeX による出力を\trip\ testの「正しい」出力と -考えてもよいだろう. - -\eteiri さらに,今回は\eTeX の機能も組み込んでいるのだから,\eTeX による -\trip\ testの出力とも比較する必要があった.Extended mode -の出力は当然\TeX による\trip\ testの -出力とは異なる.幸い,その内容は文献\nobreak\cite{etrip}に記述されている.また, -\eTeX では,\eTeX 特有の拡張機能をテストするための,同様の -\etrip\ testというものが別に用意されている. - -\eteiri ひとまず\TeXXeT 以外を追加した\epTeX により\trip, \etrip\ testを -行わせてみた.出力結果 -は,\pTeX による結果とも\eTeX による結果とも若干異なっていたが,その差異 -は,\TeX${}\to{}$\pTeX による出力結果の差異と\TeX${}\to{}$\eTeX による出 -力結果の差意を合わせたものでしかない.また,\epTeX による\etrip\ testの結 -果は\eTeX のそれと大きく異なるが,それは「\epTeX が\TeXXeT を実装していな -いことによるもの」「\pTeX に合うように{\tt etex.ch}を変更したことによる, -内部パラメタの若干の変更」「\pTeX の機能による,\verb+yoko direction+とか -の追加出力など」がほとんどであり,十分に予測ができたものであった.その意 -味では,(日本語処理以外には)criticalなbugはこの時点でなかったと言ってい -いだろう\footnote{なお,第6章でさらなる\trip, \etrip\ testをパスさせるた -めのdebugを行っている.}. - -この\trip, \etrip\ testは,実際に\epTeX のdebugに役に立った.11/1 -近傍で,すでに「通常のソースファイルを入力しても出力は同じ」状況にはなっ -ていた.しかし,\trip\ testをかけると,異常なpenalty値\footnote{penalty -(罰金)とは,改行/改ページの制御に使われる量であって,box, glueとともに -\TeX での組版において重要な役割を果たしている.}の出力が見られた. -そこで,\eTeX によるpenalty拡張を\epTeX に実装するところにbugが埋まっていると見 -当を付けて,そこを見直した結果,\verb+etexdir/etex.ch+(つまり,もともと -の\TeX${}\to{}$\eTeX のchange file)にある2箇所の修正箇所が,\epTeX 用の -\verb+etex.ch+には何故か抜け落ちていたことが分かり,この\epTeX のbugを修正す -ることができたのである. - -\eteiri -なお,この時点でも\epTeX は\eTeX の\TeXXeT 以外の全ての機能を実装してい -たことを注意しておこう. -\newpage -\section{浮動小数点演算の実装} -もう一つのテーマの柱,浮動小数点演算の実装に入ろう. - -まず,サポートする精度についてであるが,計算速度から言えば4\,byteの所謂 -「単精度」が良く,コードも簡単になる.しかし単精度は有効桁数が7桁前後しか -ない.しかし,実際の数値計算では,この7桁程度の精度では不足し,倍精度以上 -が使われる場合が多いと思われる.浮動小数点演算の実装の目的が「\TeX に数値 -計算をやらせる」ことであるので,倍精度以上は必須である. - -\subsection{基本方針} -何よりも,\TeX の既存部分の\WEB ソースを改変するところを最小限に留めることを最 -優先にした.使い勝手から言えば,新しいレジスタの種類を(例えば -\verb+\real+とかいう名前で)定義して,他のレジスタと同様に扱えるようにし -たほうがよいのだが,それは\TeX の内部処理を大きく変更することとなり,bug -も混じる可能性も増える. - -\eteiri -ここで,\TeX の数量にまつわるレジスタの種類を思い出そう: -\begin{itemize} -\item \verb+\count+:$-2147483647$から$+2147483647$までの整数 (number) を格納する. -\item \verb+\dimen+:$1$\,sp${}=2^{-16}$\,ptを刻み幅として,絶対値が - $2^{30}$\,sp${}=16384$\,pt より小さい長さ (dimension) を格納する. -\item \verb+\skip+:いわゆるglue.自然長 (width part),伸び量 - (stretch part),縮み量 (shrink part)を持っており,後者2つは無限大も - 指定できる(しかもその無限大にはrank があったりする). -\item \verb+\muskip+:数式モードでの\verb+\skip+に相当する. -\end{itemize} -前者2つは内部でも4\,byteであり,後者2つは4\,byte変数3つ分を記憶領域 -として使っている.\TeX のソースを見ると,レジスタがこれら(と -\verb+\toks+, \verb+\box+)だけであることに依存したコードが書かれていたの -で,新たに浮動小数点数用のレジスタと専用の記憶領域を確保したりするのは労 -力がかかるだけだと判断した.そのように考えてみると,\verb+\skip+が -12\,byte以上を使っていることになる. - -\eteiri -すると,1つのglueに浮動小数点数1つを納めるようにするのが楽である.せっか -く12\,byteあるのに8\,byte分しか使わないのは勿体ないので,12\,byte分にでき -る限り収まる限りの精度とすることにした.なお,Web2Cでサポートされている -Pascalの機能は限定的なものであるので,Pascal規格内にある浮動小数点演算の -サポートについても不安である.そこで,ここでは\emph{整数演算のみを用いて実装}す -ることとした.そのため,仮数部の演算は本質的には多 -倍長整数の演算であるので速度は非常に遅いことを覚悟しなければならない.. - -\eteiri -高レベルな機能は\TeX のマクロ機能を使い実装することを考えると,とりあえ -ず実装すべき機能として,以下を決めた: -\begin{itemize} -\item 浮動小数点定数値を表現するglueを返す:\verb+\real+\footnote{他のコ - マンドがfpを接頭辞にしているのにこれだけそうじゃないのは変かもしれ - ないが,かといって\verb+\fp+にするのは短すぎる気がするし,演算コマ - ンド側を\verb+\realadd+などとすると長すぎると思ったからである.当 - 然ながら,Fortranの{\tt REAL*}\hskip0.1zw$x$が根底にある.}. -\item 2項演算:\verb+\fpadd+, \verb+\fpsub+, \verb+\fpmul+, - \verb+\fpdiv+, \verb+\fppow+.結果は第1引数のレジスタに上書き. -\item 単項演算:\verb+\fpneg+,その他初等関数達. -\item 浮動小数点数の出力,及び型変換. -\end{itemize} -\newpage -格納形式は色々と悩んだが,最終的には以下に述べるように落ち着いた.2進で -格納すると基数変換とかいう変なものを組む必要がある\footnote{もちろん -debug時であっても.僕は暗算は異常に弱いし.}ので,10進で行った.但し指数 -部については諸事情により$16$\,bit分としている. -\jdAline[c](1){\unitlength=5mm -\begin{picture}(30,2) -\put(0,0){\line(0,1){1.5}} -\put(0,0){\line(1,0){30}} -\put(10,0){\line(0,1){1.5}} -\put(20,0){\line(0,1){1.5}} -\put(30,0){\line(0,1){1.5}} -\put(0,1){\line(1,0){30}} - -\put(7,0){\line(0,1){1}} -\put(2,0){\line(0,1){1}} -\put(1,0){\line(0,1){1}} -\put(11,0){\line(0,1){1}} -\put(21,0){\line(0,1){1}} - -\put(8.5,0.5){\line(0,-1)1} -\put(8.5,-0.6){\makebox(0,0)[t]{\small $A_1$ (3)}} -\put(1.5,0.5){\line(0,-1)1} -\put(1.5,-0.6){\makebox(0,0)[t]{\small $F$}} -\put(4.5,0.5){\line(0,-1)1} -\put(4.5,-0.6){\makebox(0,0)[t]{\small $E$}} -\put(15.5,0.5){\line(0,-1)1} -\put(15.5,-0.6){\makebox(0,0)[t]{\small $A_2$ (9)}} -\put(25.5,0.5){\line(0,-1)1} -\put(25.5,-0.6){\makebox(0,0)[t]{\small $A_3$ (9)}} - -\put(0,1){\line(1,-1){1}} -\put(0,0){\line(1,1){1}} -\put(10,1){\line(1,-1)1} -\put(10,0){\line(1,1)1} -\put(20,1){\line(1,-1)1} -\put(20,0){\line(1,1)1} - -\put(5,1.25){\makebox(0,0)[b]{\small width part}} -\put(15,1.25){\makebox(0,0)[b]{\small stretch part}} -\put(25,1.25){\makebox(0,0)[b]{\small shrink part}} - -\end{picture}} -\eteiri -一つのglueの自然長,伸び量,縮み量は\TeX 内部ではそれぞれ32\,bit整数とし -て扱われている.これらをこの順に並べて,1つの96\,bit領域とみなし -て書いたのが上の図である. -\begin{enumerate} -\item 各32\,bit部分では上位2\,bitは未使用とする\footnote{dimensionの表現 - では最上位bitは符号,次のbitはOverflow検出用のような意味を持ってい - る.そのため,これらの2\,bitも使ってしまうと何かと面倒になるように - 思われた.}.そ - れぞれの残り30\,bitで10進9桁を格納する. -\item 仮数部は図の$A_1$, $A_2$, $A_3$で示した領域とする.これらの後ろに()でく - くった数字はそこの10進での桁数を表す.合計で10進21 - 桁分の領域となり,(図の)左側を上位として21桁を格納する.小数点が - $A_1$での100の位と10の位の間に来た状態を「正規化されている」と称する. -\item 指数部は$E$で示した部分で,2進数で16\,bit分の領域をもっている.ここ - には実際の指数($-32767$--$32767$)を32767をバイアスした値が格 - 納される.但し,この$E$の値が65535のときは,(正負の)無限大として - 扱う. -\item $F$で表した部分は0, 1, 2のどれかが格納され,符号bitとしての役割を持つ. - 0は正,1は負,2はNaNを表す. -\item 以上の説明では見にくいので,このglueが表現している値を述べると,以下のよ - うになる. -\[ - \begin{cases} -(1-2F)(10^{18}A_1+10^9A_2+A_3)\cdot 10^{E-32767-20}, -&{\rm if}\ F\neq2;\\ -{\rm NaN},&{\rm if}\ F=2. -\end{cases} -\] -また,width partに実際に格納されている値は$1000(E+65536F)+A_0$である. - -\end{enumerate} - -\TeX ソース中での浮動小数点数の表記は,他のプログラミング言語でもよく用い -られているごく普通の表記を採用するが\footnote{Fortranでは指数部に{\tt -D}や時には{\tt Q}などを許容したりしているけれども,それらは\epTeX では認 -めない.},\TeX 本来の読み取りルーチンを一部流 -用した部分があるため,小数点は大陸式の`,'も認め,符号は複数あってもいい -(その場合,実際の符号は全部掛けたものになる)ことになった. - -\subsection{内部表現と四則演算} -実際の演算をglueに「パックされた」状態で行うのは余り良くないように感じた. -なぜなら,初等関数の実装を最初から念頭に置いていたが,それを21桁精度のままで計算す -るのは精度の面で非常に不安だったからである. -そうすると,内部での計算の実装は,21桁とは限らない任意長\footnote{とは -いっても,さすがに数千桁とか数万桁とかはたかが21桁の計算の内部処理として -はしないだろう.個人的には60桁もあれば十分と感じている.}の計算に対応で -きるようにした方がよい. - -上を考慮に入れて,浮動小数の内部表現である4\,byte整数型の配列$q$を以下 -のように定める: -\jdAline[c]{\unitlength=5mm -\begin{picture}(30,2) -\put(0,0){\line(1,0){15}} -\put(20,0){\line(1,0){10}} -\put(0,1){\line(1,0){15}} -\put(20,1){\line(1,0){10}} -\put(0,0){\line(0,1){1.5}} -\put(2.5,0){\line(0,1){1}} -\put(5,0){\line(0,1){1.5}} -\put(10,0){\line(0,1){1.5}} -\put(15,0){\line(0,1){1.5}} -\put(20,0){\line(0,1){1.5}} -\put(25,0){\line(0,1){1.5}} -\put(30,0){\line(0,1){1.5}} -\put(1.25,0.5){\makebox(0,0){\small $n$}} -\put(3.75,0.5){\makebox(0,0){\small 符号}} -\put(7.5,0.5){\makebox(0,0){\small 指数部}} -\put(12.5,0.5){\makebox(0,0){\small $a_0$}} -\put(22.5,0.5){\makebox(0,0){\small $a_{n-1}$}} -\put(27.5,0.5){\makebox(0,0){\small $a_{n}$}} -\put(2.5,1.1){\makebox(0,0)[b]{\small $q[0]$}} -\put(7.5,1.1){\makebox(0,0)[b]{\small $q[1]$}} -\put(12.5,1.1){\makebox(0,0)[b]{\small $q[2]$}} -\put(22.5,1.1){\makebox(0,0)[b]{\small $q[n+1]$}} -\put(27.5,1.1){\makebox(0,0)[b]{\small $q[n+2]$}} -\put(17.5,0.5){\makebox(0,0){$\cdots\cdots\cdots\cdots$}} -\end{picture}} -ここで,各$a_i$, $0\le i\le n+1$は0\,〜\,999の範囲の自然数であって,符号部は -(前節のように)0が正,1が負,2がNaNを表す.即ち,仮数部を基数1000で表現 -している\footnote{乗法を行う場合,基数の平方が処理系の内部で扱える必要は -ないように感じるが,それを考えると,基数に32768とか10000とかを使った方が, -メモリも計算の手間も減ることになる.しかし,glueに格納するのが21桁である -から,1000にするのもそんなに悪くないように思う.}ことになる.$a_{n}$は桁 -上がりなどの際に用いられ,所謂「正規化された状態」では$a_n=0$, $a_{n-1}\ge -100$である.また,指数部は(正規化された状態では)$-32767$\,〜\,$32767$の範囲 -の整数が通常の浮動小数点数を,32768が無限大を表す.NaNや0に符号の区別は -なく,当然ながらIEEE 754/754r規格には全然適合しない.$n$を「浮動小数点数 -の長さ」と以降呼ぶことにする. - -このような配列は,最初の実装では,その都度動的に確保,解放することにした -\footnote{このポリシーは5.6節で変更される.}.\TeX でのメモリ管 -理はすべて\TeX 自身が行う\footnote{起動時に巨大な4\,byte整数型の配列を確 -保して,あとは全部その枠内で行われる.配列確保と解放はそれぞれ -$\langle{\it pointer}\rangle:={\it get\_node}(\langle{\it -length}\rangle)$と{\it free\_node}($\langle{\it -pointer}\rangle,\langle{\it length}\rangle$)で行われる.ここで -$\langle{\it pointer}\rangle$は先頭要素のindexであり,$\langle{\it -length}\rangle$は確保された配列の要素数である.}ことが伝統的になっている - (\cite{arizawa}) ので,ここでも当然それに従う. - -\eteiri 浮動小数点の四則演算を大きくわけると,仮数部同士の計算と,指数部 -の調整に2分される.前者は前に書いたように多倍長整数の四則計算となるので, -Knuth~\cite{TAOCP}にある「古典的な」アルゴリズムをそのまま用いることがで -きる. - -これらのアルゴリズムは(割り算を除けば)そんなに長くはなく,指数部や符 -号の処理,無限大やNaNの処理の方が分量的には多い.整数演算として得られた -仮数部を正規化する処理や,加法や減法で行われる2引数の指数部を揃え -る処理,また乗法や除法で行われる,列の長さを延長したり縮小したりする処理 -の方にいっそう気を使った. - -%%% 要検討:除算をNewton法で,short_mult - -\subsection{入出力と型変換} -演算はできるようになっても,それを入出力することができなければどうしようも -ない.浮動小数点はglueとして\verb+\skip+レジスタに格納されるので, -\verb+\skip+レジスタに対して直にpackされた値を指定したり,あるいは -\verb+\the+で出力をしたりすれば一応はいいのだが,それでは非常に使い勝手 -が悪い. - -\eteiri -入力側についてのほとんどの処理は -浮動小数点数を読み込み,内部表現の配列の形に変換して返す\textit{scan\_float}\ -procedureによって行う. -これは整数を読み込む\textit{scan\_int}や長さを読み取る -\textit{scan\_dimen},glueを読み取る\textit{scan\_glue}の各procedureに対 -応するものとして考えたもので,コードも大いに参考にさせてもらった. -2項演算のコマンドの2つめの引数を読み取る部分もこのprocedure「だけ」で行 -われる. - -\textit{scan\_dimen}では整数部分を読むのに\textit{scan\_int}を用いて,次 -に小数部を独自に読み取るという方法をとっていたが,同じ方法では21桁の数値 -を読み取ることはできない.そこで,\textit{scan\_float}では,先に(すぐ後 -で述べる)内部表現の配列を21桁分確保し,それに上の方から数字を詰めていく -という方法をとった.22桁め以降が存在した場合は,Knuth~\cite{TAOCP}に従い「基本 -的には四捨五入だが,丸める桁が5である場合は最も近い偶数になるように」丸め -る\footnote{この丸め方は内部演算で共通である.全部の下位の桁を見てるわけ -では無いので,丸め誤差は最大で0.6\,ulpぐらいになるはずである.}.こうし -て仮数部を読めるだけ読んだ後,もし{\tt e}または{\tt E}があれば,その後に -指数部が続くものと認識して,指数部を\textit{scan\_int}で読み取る.こうし -て仮数部も指数部も両方読み込んだ後は,\textit{scan\_float}はこれをglueと -してpackし,それを返す. - -\eteiri -また,「浮動小数点数を読み取る」とはいっても,文字列で書かれた{\tt --1.701E5}だけを「読み取る」のではあまり便利ではないので, -既存のskipレジスタや,countレジス -タやdimenレジスタも指定できるようにしてある.skipレジスタの場合は,ある -浮動小数点数を表現していない可能性も考えられるので,そのチェックを行うよ -うにしてある.一方,countレジスタやdimenレジスタはそのようなことについて -はチェックする必要はない. -なお,dimensionを直に,例えば\verb+1.2mm+とか指定された場合は,最初に出会う -文字が1であるから,浮動小数点数が文字列表記されているものと見なされるの -で,意図した結果は絶対に得られないことに注意. - -\eteiri -出力部で問題になるのは「どの書式 -で出力するか」である.ご存知のようにFortranでは{\tt FORMAT}文が,C言語では -{\tt printf}文の第一引数が出力書式の設定を担っており,何桁出力するだとか,指数 -形式にするのかそうでないのかとか,いくつかの設定項目が用意されている.今 -回ではそういう本格的な出力機能を実装することはせずに,primitiveとしては以 -下に絞ることにした: -\begin{enumerate} -\item\verb+\fpfrac+:仮数部を$\pm a.bcd\cdots$の形で出力する.最後に0が - 続かない範囲内でできるだけ多くの桁を出力する.正数の場合は符号は出 - 力されない. -\item\verb+\fpexpr+:指数部をそのまま出力する. -\end{enumerate} -浮動小数点数全体を一度に出力するprimitiveを準備しなかったのは,「そうい -うのはマクロ機能があれば用が足りる」ことである.また,\TeX の数式組版能 -力を生かさないのは勿体ないことではないか,とも考えたからである. -\skip1=\real-1234567890123456.4 -例えば$-1234567890123456.4$を{\tt\fpfrac\skip1{}E\fpexpr\skip1}と出力す -るよりかは, -$\fpfrac\skip1\times10^{\fpexpr\skip1}$など -と表示させる方が見栄えが良い. -桁数指定については(dimensionの表示とかにもそのような -機能は無いので)見送ることにした. - -\eteiri -countレジスタやdimenレジスタから浮動小数点数の変換が実装されたのだから, -逆の,即ち浮動小数点数から整数やdimensionへの変換も実装されるべきである. -しかし,dimensionの\TeX での内部表現を考えると,2つの処理はあまり違わないよ -うにできる.dimensionへの変換は浮動小数点数をsp単位に(つまり,65536をか -けて)したものの整数部をとれば終わってしまう. -丸め方については,0に近い方に丸めるとしたが,dimensionへの変換は一連の計 -算の最後で行うことと決めておけば.あまり不都合は起こらないように感じる. - -\subsection{虫取り} -以上の機能を実装した所で(実際は実装と半分平行した感じで)debugを行った. -もはや\trip\ test等には頼ることはできず,全部自分でなんとかしなければならな -い.元からtypoが多い方なのでbugは多量に及び,かなりの時間と気力をdebugに -とられてしまった.debugは主に加算や平方根を求めるNewton法,$e$のTaylor展 -開による計算などの繰り返しで行った.演算アルゴリズムの部分にも,タイプミ -スや僕の詰めの甘さ(加減算での符号の処理など)が見られたが,厄介だったのは -\TeX 自身のメモリ管理による動的確保/解放の処理であった. - -先の脚注に書いたように,\TeX でのメモリ確保は最初に巨大な配列が確保され -た後はすべて\TeX 内部の\textit{get\_node}関数などによって行われるのであっ -た.動的確保で避けて通れない問題として,初期化忘れと解放忘れ,それに2重 -の解放がある.前者については対処方法は簡単なのだが,後者2つが曲者だった. -浮動小数点数を内部で表現する配列は自分で作ったことがよくわかっているから, -それについては問題ない. - -\eteiri -一方,実はglueの格納についても動的確保/解放が使 -われている.glueはwidth, stretch, shrinkの3つの部分があると書いたが,内 -部ではさらに\textit{glue\_ref\_count}という量が各glueについて設けられてい -る.これは名前の通り「何個の変数がこのglueを指しているか」というのを示す -値であって,glueを解放するように\textit{delete\_glue\_ref} procedureで指令 -しても,\textit{glue\_ref\_count}が0でない限り\footnote{本来はnull値基準 -なのだが,そこまで細かい所はどうでもいい.}実際には解放されないようになっ -ている.そして,skipレジスタに実際に格納されているのは実際のglueの値へのポイ -ンタとなっている. - -動作確認をしたところ,\verb+\fpadd+などであるskipレジスタの値が演算結果に -よって書き換えられるような場合に,書き換え元のglueは(他にそれを参照して -いる変数が無い限り)解放されるべきであるにも関わらず,なぜか解放されない -まま,いわば次々と過去の遺物だけが増えていってしまうという事態が起こった -\footnote{\verb+\tracingstats+に例えば3ぐらいの値を指定しておけば, -\TeX でのメモリ消費量がページ出力時に表示される用になる.}. -1回あたりでは些細な量としかならないが,しかしbugはbugである.これを除去 -するために,解放指令を1回多く入れたら,今度は無限ループやらsegmentation -faultが出て強制終了するという事態が発生した. - -結局,\textit{scan\_float} procedureの内部で既存のglueを取り出す所で -reference countが1増加しているのではないかという結論に達し, -\textit{glue\_ref\_count}だけを1減少させる処理をそこに加えた所,うまく動くよう -になった. - -\subsection{初等関数} -次に,初等関数の実装である.基本的には,関係式を用いて引数を0近傍のある値 -にまで持っていって,そこから先をTaylor展開などを用いて計算させ,関係式を逆に -用いて元に戻すというものである.平山\nobreak\cite{mppack}での実装と奥村% -\nobreak\cite{okuc}を大いに参考にした. - -ここで,関係式の適用と逆向きの適用により誤差が入り込む余地があるので, -そこをなんとかするために内部の四則演算を任意精度でできるように実装したの -である.本節の関数の計算では.$n$桁の引数が与えられた時に,内部では -$n+15$桁で計算を行っている.この分量は「まあこれぐらい桁を増やしておけば -いいか」という勝手な推測で選んだものであって,適切かどうかは知らない. - -\paragraph{平方根 (\textit{fp\_sqrt})} -$a$の平方根$\sqrt a$の計算は,方程式$1-a/x^2=0$から導かれるNewton法 -$x_{n+1}:=(3-ax_n^2)x_n/2$を用いることにした.このNewton法では$1/\!\sqrt -a$が2次収束で計算され,収束後$x_\infty$に$a$をかければ,$\sqrt a$が得られ -る.$a$ -は$[0.1,10)$の範囲内に入るように変換して計算することとして,初期値$x_0$ -は,$a$の上位桁をいくつかとったものの平方根を奥村 -\nobreak\cite{okuc}に載っているアルゴリズムを使用して計算したものとした. - -なお,この関数のdebug中に,ずっと前に書いた「列の長さの縮小」の丸め処理 -にbugが見つかった.原因は{\bf while}\ $i0$では単調増加で$x=1$のときに$u=0$となる.当然収束を速めるためには -$|u|$が小さい方がよいので,$x$を1の近傍の範囲に帰着させて計算をおこな -うようにする. -帰着方法は単純で,まず適切な$10^n$を掛けて$x\in [1,10)$と -させ,以下のようにさらに変換する: -\def\from{\leftarrow} -\begin{alignat*}{4} -x \in[1,1.5)&\Longrightarrow \text{\inhibitglue(そのまま)\inhibitglue},\qquad& -x \in[1.5,3)&\Longrightarrow x\from x/2,\\ -x \in[3,6)&\Longrightarrow x\from x/4,& -x \in[6,10)&\Longrightarrow x\from x/8. -\end{alignat*} -こうすると,$|u|\le 0.2$となり,収束速度はかなり速いものと予想される.逆 -変換に必要な$\log 10$, $\log 2$, $\log 4$, $\log 8$については,$\log 10$ -と$\log 64$を定数として内部に持っておくこととした. - -対数関数$\log x$を実装してしまえば,逆双曲線関数は以下の式 -で計算可能である: -\begin{align*} -\mathop{\rm arcsinh} x&=\log(x+\sqrt{x^2+1}),\\ -\mathop{\rm arccosh} x&=\log(x+\sqrt{x^2-1}),\qquad x\ge 1\\ -\mathop{\rm arctanh} x&=\frac12\log\frac{1+x}{1-x},\qquad |x|<1 -\end{align*} -この中でarctanhの実装はlogのそれの内部に入り込む形になっているので,引数 -が小さい場合には$\log x$の内部計算部(即ち,本節の最初に示したTaylor展開 -の計算)にそのまま引き渡してしまうようにした. - -しかし,この式では$x\simeq 0$であるとき,$x+\sqrt{x^2+1}\simeq 1$となる -ので桁落ちが発生する.そこで,$x$の有効桁数が$3n$であるとき, -$|x|<10^{-n-5}$であれば,次のTaylor展開式を用いてarcsinhを計算することにし -た: -\[ -\mathop{\rm arcsinh} x=x-\frac{x^3}6+\frac{3x^5}{40}-\cdots. -\] -\paragraph{逆三角関数 (\textit{fp\_arc\_tri})} -逆三角関数は多価だが,常識的に考えれば$\arcsin x$, $\arctan x\in -[-\pi/2,\pi/2]$, $\arccos x\in[0,\pi]$とするのが適当だろう.$\arcsin -x=\arctan (x/\!\sqrt{1-x^2})$であるから,$\arctan x$だけ計算すればよいが, -これはいつものように級数展開 -\[ - \arctan x=\sum_{n} \frac{(-1)^nx^{2n+1}}{2n+1},\qquad |x|\le 1 -\] -を用いる.$\arctan x=\pi/2 - \arctan x^{-1}$, $\arctan x=\pi/4 - \arctan -((1-x)/(1+x))$を用いれば,$|x|\le \tan \pi/8=\sqrt 2-1=0.414\cdots$まで -できて,収束は保証される. -\paragraph{べき乗 (\textit{fp\_pow\_int})} -一般には$a^b$の計算は$\exp(b\log a)$とすればよいが,それでは$(-2)^5$など -の$a\in[-\infty,0)$, $b\in\mathbb Z\setminus\mathbb N$のときが計算できな -い.このため,指数部分が整数のときの累乗を計算する関数 -\textit{fp\_pow\_int}を作った.方針は奥村\nobreak\cite{okuc}に従い,例えば$b=1701$の -ときは,$1701=1024+512+128+32+4+1$であるから,$x_0:=a$, $x_{n+1}:=x_n^2$ -としたとき,$a^b=x_0x_2x_5x_7x_9x_{10}$として求めれば良い. - -気になるのは$0^0$の扱いだが,本来はNaNとするのが正当な扱いであろう.しか -し,ここでは手抜きし,\textit{fp\_pow}でも\textit{fp\_pow\_int}でも1とし -た.後から考えたり見つけたりしたこじつけを3つばかり: -\begin{itemize} -\item $a^b=\exp(b\log a)$を無理やり$a=b=0$の -ときにも適用して,``$0^0=\exp(0\log 0)=\exp(0\cdot -\infty)=\exp 0=1$''. -\item $m^n=\#\{f\colon n\longrightarrow m\}$である\footnote{集合論的定義に従い, -$m=\{0,1,\ldots,m-1\}$として考えている.}から, -$0^0=\#\{f\colon0\longrightarrow 0\}=\#\{f\colon -\emptyset\longrightarrow\emptyset\}=1$となる. -\item 二項定理$(1+m)^n=\sum_{i=0}^n {n\choose i}m^i$を$m=n=0$のとき成立 - させるために必要. -\end{itemize} - -\subsection{高速化} -一応以上に挙げた関数の実装は行ったが,これらの関数は演算の途中経過が求ま -る度に動的確保/解放を行っており,arcsinを求めるだけで800回以上の動的確保 -を行っていた.これは速度的に非常に不利であるので,できる限り動的確保を行 -わずにすむように書き直す必要があった. - -方針としては次の通りである:各演算では,当然引数と結果を格納するための領 -域と,一時領域が必要になるが,引数の有効桁数が(つまり,引数を表現するの -に必要なメモリ領域の量が)わかっていれば,一時領域の大きさはそこから計算 -することができる.元々の呼び出し元は\textit{do\_float\_operation}という1 -つのprocedureである\footnote{ここで\TeX のコマンドで渡された演算指令が最 -終的に実行され,結果を表現するglueが得られる.}.よって,必要な一時領域の上限が -わかるので,演算を実際に呼び出す前に適当な所で確保しておけば良い. - -演算の種類によって一時領域の量は次の様になった: -\jdAline[c](1){\small\tabrowsep=0.5zw%\setbox0=\hbox{fp}\advance\tabrowsep-\dp0 -\btabular{c/lrr/r}\vline -\emph{演算}&\multicolumn{1}{c}{\emph{procedure名}}&% -\emph{ 引数 }&\emph{ 返り値 }&% -\multicolumn{1}{c}{\emph{一時領域}}\\\hline -$+$, $-$&\textit{fp\_add\_or\_sub}&$n$, $n$&$n$&$n+3$\\ -$\cdot$&\textit{fp\_mul}&$m$, $n$&$m$&$m+n+3$\\ -$/$&\textit{fp\_div}&$n$, $n$&$n$&$5n+15$\\ -$/$ (short)&\textit{fp\_short\_div}&$n$&$n$&$2n+10$\\ -$a^2$&\textit{fp\_square}&$n$&$n$&$2n+3$\\ -$\lfloor\cdot\rfloor$, $\lceil\cdot\rceil$% - &\textit{fp\_ceil\_floor}&$n$&$n$&$n+3$\\\hline -\smash{$\sqrt{\hskip0.5zw}$}&\textit{fp\_sqrt}&$n$&$n$&$4n+32$\\ -$\exp$&\textit{fp\_exponent}&$n$&$n$&$4n+32$\\ -$\sin$, $\cosh$ etc.&\textit{fp\_tri\_hyp}&$n$&$n+5$&$5n+40$\\ -$\log$(内部)&\textit{fp\_log\_inner}&$n$&$n$&$4n+12$\\ -$\log$&\textit{fp\_log}&$n$&$n$&$6n+48$\\ -$\arcsin$ etc.&\textit{fp\_arc\_tri}&$n$&$n+5$&$8n+120$\\ -arcsinh etc.&\textit{fp\_arc\_hyp}&$n$&$n+5$&$8n+120$\\ -$a^b$ if $b\in\mathbb Z$&\textit{fp\_pow\_int}&$n$&$n$&$3n+24$\\\vline -\etabular} -一時領域の欄の単位は -4\,byteであり,引数と返り値はそれぞれを表す浮動小数点数の「長さ」を表してい -る\footnote{動作切り替えのブール値や整数の引数はすべて省略している.}. -但し,下半分の演算については,上半分の四則演算等の一時領域は除いて計算し -ている. - -ここで,初等関数の演算のために,$\pi$, $\log 10$, $\log 64$を定数としてもっ -ておくことは前節に書いた.この定数の初期化と一時領域の確保は同時に行って -も良いだろう,しかし,一時領域と定数たちだけでメモリの$80+184+3\cdot -23=333$要素が使われることになり,常時確保しておくのは気が引ける -\footnote{現在のように贅沢にメモリが使える環境ではごく僅かの量である.な -お,内部演算は最大$3(8+5)=39$桁で行われるので,四則演算に必要な一時領域 -は80要素あれば充分となるのだが,80113.22より前の版では,長さ18で四則演算 -されてしまうバグがあった.}.そこで, -この「初期化」を行う\verb+\fpinit+コマンドと,逆に一時領域や定数たちを解 -放する\verb+\fpdest+コマンドを作り,\emph{浮動小数点演算を使用する場面の -前後にこれらのコマンドを実行させる}ようにした.なお,実装の簡略化のため, -二重確保や二重解放のチェックは全く行っておらず,一時領域が確保されてない -状態で演算を行おうとしたときのエラー処理も全く行っていない.確保されてな -い状態で演算を行えば,最悪の場合はセグメンテーション違反で落ちることにな -るので気をつけること. - -\section{形式化} -浮動小数点演算を実装したところで,説明文をつけたりinstall script -をつけたりする段階へと入ることにした.ここら辺を行う直前になって,角藤 -さんの\peTeX が登場した\verb+^^;+. - -\eteiri -一番苦労したのは,「\epTeX のためにどのファイルを修正したのか分からない」 -ということであった.{\tt ptexextra.c}の変更は,コマンドラインオプション -{\tt -etex}をつけるためにやったことを覚えていたが,結構それ以外にも変更 -したファイルがあったものだった.なお,僕はMakeの使い方が分からないので, -コンパイルとインストールは基本的には(自分の環境用の)bash scriptとして -準備して,何をやっているかは別途テキストファイルに書いておいた. - -\pTeX から\epTeX への修正部分を分類してみると,その性格の違いからいくつも -のファイルに分けた方が気分がいいと思ったので,そのようにした.実質的に何 -もしてない{\tt ptex-orig.diff}を削除したり,{\tt ptex-hack-1.diff}(次章 -参照)を入れたり取ったりとかで整理した結果,本プロジェクトの最終結果とし -ては以下のようになった: -\footnote{以下は{\tt README.txt}からの引用である.}. -\eteiri -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} - ■ファイル構成 - ---------------------------------------------------------------------- - README.txt このファイル. - Changelog 更新履歴 - HOWTOINST.txt インストール方法について - doc/ 浮動小数点演算についての簡易説明書 - ks2/ 「計算数学II」での詳細な作業記録 - build buildするための(自分用の)bash script - install installするための(自分用の)bash script - trip TRIP, e-TRIP testを実行させるbash script - eptex.src etex.srcをe-pTeX用に改変したもの.ほとんど同じ - eptexdefs.lib etexdefs.libをe-pTeX用に改変したもの.ほとんど同じ - ep1.diff \ - pconvert.diff |- e-TeX機能のマージに使用するpatch群 - etex-sysdep.ch | - etex.diff / - fp.ch 浮動小数点演算の実装部 - ptex756.diff pTeXをWeb2C-7.5.6に対応させるpatch - uptex.diff \_ upTeXとマージしようとするときに使用するpatch群 - up1.diff / -\end{verbatim} -\end{adjustvboxheight} - -\newpage -\section{細かい機能追加} -\subsection{\TeXXeT の実装} -角藤さんによる\peTeX に触発されて\footnote{対抗して, -と言った方が実状にあっているが.},\epTeX でも\TeXXeT 機能の実装を試みる -ことにした.浮動小数点演算の部分は\eTeX 拡張とは完全に切り離せるので, -{\tt fp.diff}を組み込まない状態でも作業を行える. - -作業方法は「\eTeX のマージ」で行ったものとほとんど同じである.オリジナル -の{\tt etex.ch}と前に作った対\pTeX 用の{\tt etex.ch}を見比べ,\TeXXeT 機 -能で後者に抜けているものがあれば加えたりした.これにより,新たな{\tt -etex.diff}は\TeX から\pTeX への変更に伴う部分だけとなり,分量が減った. - -\eteiri \verb+\beginR+と\verb+\endR+ではさまれた区間は右から左に文字が組 -まれる区間であるが,そのまま{\tt etex.ch}の方法を使うと日本語が通らずに, -強制終了したりdviが読めなくなったりする.これの原因を次のように考えた: - -\begin{indented}{2zw} -right-to-leftを実現させる部分に,「全ての」構成要素を逆順にするという -\textit{reverse}\ functionがある.例えばLtoRの状況で「{\tt -...abcdefABghCDEFij...}」:小文字は欧文文字,大文字は2つで和文文字を表す -となっていたものが,このprocedureにより{\tt ...jiFEDChgBAfedcba...}と反転され -てしまい,それによってエラーが発生する.従って,和文文字のところは反転せず -に{\tt ...jiEFCDhgABfedcba...}という結果を得るようにすれば,エラーは起き -ないのではないか? -\end{indented} - -\eteiri -\pTeX のソースで\verb+if font_dir[f]<>dir_default then+とかいう -フレーズが何回かあったので,これを2\,byte文字と1\,byte文字の判定と考えること -で上の処理を実装したところ,一応はうまくいくようになった. -しかし,組版規則はどうか,というと当然 -のことながら「怪しい」.ただ単に全部左右が入れ替えられるだけであるからだ. - - -\subsection{副産物} -\TeXXeT 関連のdebugを行っていたときに,和欧文混在の文章をright-to-leftに -したら上下位置がおかしくなることに気づいた.「全てを逆順に」がここでも悪 -さをしており,\pTeX により和欧文間に挿入されるbaseline補正の指 -標\textit{disp\_node}までも逆順にされてしまうからだった. - -\pTeX では,和文と欧文の境目に\textit{disp\_node}が挿入され,このnode以降 -の文字のbaseline補正がそこで示されるようになっている.したがって,和文→ -欧文と切り替わるときのnodeでは\verb+\ybaselineshift+とかが,逆に切り替わ -るときのnodeでは0が対応している.よって,一時変数を使って, -\textit{reverse} functionで反転させるときに,\textit{disp\_node}の値も入 -れ替えてしまえばいいのではないか,と推測される.それで実際大抵の場合には -うまくいったように思えた\footnote{1/30追記:実際には,こんな簡単な処理 -ではダメだった.段落全体がRtoLの状態のとき,どうやら,各行はdisplacement -nodeで始まっており,その後に\TeXXeT 関連のnodeとかがくるようで,こういう -場合が曲者だったりする.global変数\textit{revdisp}を作り,その変数に「現 -在のdisplacementの値」を代入するようにしておくことで,何とか対処療法的に -片付けて,\emph{「大抵の場合にはうまく動くのではないか」という段階にはなったけ -れども,\pTeX の内部動作を良く理解しているわけではないので,非常に怪し -い}.使うときには注意してください.}. - -\eteiri -こうしてなんとか解決した直後に, -たまたま\TeX フォーラム% -\footnote{\verb+http://oku.edu.mie-u.ac.jp/tex/+}を覗いたら,奥村さんに -よる「\pTeX への -提案もどき」と称した次の投稿\cite{okupt}があった(以下引用): -\newpage -\begin{adjustvboxheight} -\small\narrowbaselines\begin{indented}{2zw} -\begin{verbatim} -その1: \ybaselineshiftの仕様変更 - -和文と欧文のベースラインを調節するための\ybaselineshiftを使っても数式部 -分のベースラインが変わらない。数式も欧文なみと見て移動したい。 - -例: - -\ybaselineshift=0.12zw -第5章第$n=5$節 - -その2: 段落の頭での引用符の挙動の改善 - -デフォルトのpTeXでは引用符で始まる段落の頭が\parindent+0.5zw下がりになる。 -jsarticle,jsbookでは\everyparを使ったハックで補正しているが,pTeX本体に -段落頭のJFMグルーをなくすスイッチを付けられないか。 - -(後略) -\end{verbatim} -\end{indented} -\end{adjustvboxheight} - -この「その1」というのは,僕も散々悩まされてきた問題であった.古くは高校の -部活の部誌(縦書き)の組版で,最近では数学科オリパンフ\nobreak\cite{ori} -の組版でも遭遇し,非常に腹が立った.「その2」は現状のjsclassesでのハック -で十分だと思い,またこちらは難しそうだった. - -「その1」のパッチを作るのは,\textit{disp\_node}が挿入される位置を調べ,そ -こでいかほどの値がセットされるかを調べればいいので,さほど -困難な作業ではなかった.互換性のために従来の\pTeX の動作も残し,スイッチ -で切り替えるようにしたが,スイッチの定義は\verb+\TeXXeTstate+(\TeXXeT -がonならば1,offならば0)のそれが非常に参考になった. -\eteiri -最初は\epTeX 内部に本パッチを取り込んでいたが,(後に述べるように)角藤 -さんが\epTeX をW32\TeX に導入するときに外されたと聞いたので,こちらでも -外しておくことにした. -\subsection{さらなる虫取り} -本稿では,\etrip\ testをしたときの\eTeX との差異をもっと少なくすることを -行う.まず,通常の\trip\ testを行ったときに,そのままでは -\verb+http://oku.edu.mie-u.ac.jp/%7Eokumura/texfaq/qa/50546.html+ -と同様の症状,すなわち\verb+, direction+がいくつか余計に残ってしまうこと -から対処を始めた.これの原因は\pTeX でboxの中身をdumpしたときに -\verb+, yoko direction+の表示部である. -boxが{\tt yoko}でも{\tt tate}でも{\tt -DtoU}方向\footnote{{\tt DtoU}方向ってなんだろうね.}でもないときは -\verb+yoko+などが表示されず,ただ\verb+, direction+と表示されてしまうの -だった. -{\tt ,}が出てくる場所は1箇 -所だったので,ここだけdirection表示のコードを別にすることで解決. - -\eteiri -次に,\verb+\lastnodetype+と\verb+\currentiflevel+の調整に入った. -\eTeX でコマンドがどう処理されているかを調べると,各nodeにはソース中で型 -を表す自然数が割り振られており,その値に1を足すとかの若干の補正をして出 -力するだけだった.そうすると話は速く,\TeX${}\to{}$\pTeX の拡張で内部パ -ラメータがどれだけ変更されているかを調べ,それに合うように両コマンドを -hackするだけであった. - -これらのコマンドの正しい動作は,\eTeX のマニュアル\nobreak% -\cite{etexman}に与えられている.\pTeX で追 -加されたnodeや条件判断文には,既存の番号より大きい値を与えるようにした. -具体的には,下の表のようになった.上が\verb+\currentiflevel+,下が -\verb+\lastnodetype+の動作で,番号が太字なのは\pTeX 特有のものである -\footnote{当然ながら,\verb+\iffp+は本プロジェクトの浮動小数点演算の実装 -に特有である.}. -なお,これに合わせるように{\tt etexdefs.lib}を更新した{\tt -eptexdefs.lib}も作ってある: - -{\def\cs#1{{\tt\char`\\#1}}\makeatletter -\newenvironment{multilist}[2]% - {$$\setbox\z@=\hbox\bgroup % catch some funny things -> \mathord - \let\a=\empty - \let\b=\empty - \count@=\z@ - \toks@={#2}% - \def\item##1\cr - {\ifnum \count@=\z@ - \count@=#1% - \expandafter\def\expandafter\b\expandafter{\b\y{}}% - \fi - \advance\count@ by\m@ne - \expandafter\def\expandafter\a\expandafter{\a\x{##1}}}% - \ignorespaces}% - {\loop - \ifnum \count@>\z@ - \expandafter\def\expandafter\a\expandafter{\a\expandafter\z\b\relax}% - \advance\count@ by\m@ne - \repeat - \def\x##1{\expandafter\y\b\relax{##1}}% - \def\y\y##1##2\relax##3% - {\ifx @##1@% - \def\b{##2\y{##3}}% - \else - \def\b{##2\y{##1&##3}}% - \fi}% - \def\z\y##1##2\relax{\def\b{##2\y{##1}}}% - \a - \def\x - {\expandafter\egroup\expandafter\halign\expandafter\bgroup - \expandafter&\the\toks@\cr}% - \def\y##1{\expandafter\def\expandafter\x\expandafter{\x##1\cr}}% - \b - \x\egroup $$} -\begin{adjustvboxheight}\small -\begin{multilist}{4}{\hfil\qquad#:&\quad#\qquad\hfil} -\item 1&\cs{if}\cr -\item 2&\cs{ifcat}\cr -\item 3&\cs{ifnum}\cr -\item 4&\cs{ifdim}\cr -\item 5&\cs{ifodd}\cr -\item 6&\cs{ifvmode}\cr -\item 7&\cs{ifhmode}\cr -\item 8&\cs{ifmmode}\cr -\item 9&\cs{ifinner}\cr -\item 10&\cs{ifvoid}\cr -\item 11&\cs{ifhbox}\cr -\item 12&\cs{ifvbox}\cr -\item 13&\cs{ifx}\cr -\item 14&\cs{ifeof}\cr -\item 15&\cs{iftrue}\cr -\item 16&\cs{iffalse}\cr -\item 17&\cs{ifcase}\cr -\item 18&\cs{ifdefined}\cr -\item 19&\cs{ifcsname}\cr -\item 20&\cs{iffontchar}\cr -\item \bf 21&\cs{iftdir}\cr -\item \bf 22&\cs{ifydir}\cr -\item \bf 23&\cs{ifmdir}\cr -\item \bf 24&\cs{iftbox}\cr -\item \bf 25&\cs{ifybox}\cr -\item \bf 26&\cs{iffp}\cr -\end{multilist} -\end{adjustvboxheight} -\begin{adjustvboxheight}\small -\begin{multilist}{3}{\hfil\qquad#:&\quad#\qquad\hfil} -\item -1&none (empty list)\cr -\item 0&char node\cr -\item 1&hlist node\cr -\item 2&vlist node\cr -\item 3&rule node\cr -\item 4&ins node\cr -\item 5&mark node\cr -\item 6&adjust node\cr -\item 7&ligature node\cr -\item 8&disc node\cr -\item 9&whatsit node\cr -\item 10&math node\cr -\item 11&glue node\cr -\item 12&kern node\cr -\item 13&penalty node\cr -\item 14&unset node\cr -\item 15&math mode nodes\cr -\item \bf 16&direction node\cr -\item \bf 17&displacement node\cr -\end{multilist} -\end{adjustvboxheight}} - -\eteiri -これでだいぶ\trip, \etrip\ testの動作はうまくいくようになった.状況を述 -べると,以下のようになる. -\begin{itemize} -\item \emph{Compatibility modeでの\trip\ testの,\pTeX との差異}\\最後の - 方の{\tt 1440 strings of total length 25223}等が異なるだけ. - ソース中の文字列が多くなっていたりすることなどによるものだろう. -\item \emph{\trip\ testの,\eTeX との差異(両方ともCompatibility mode)}\\ -↑を除けば,\pTeX での\trip\ testでも出ている差異なので,問題はな - いと考えられる. -\item \emph{\trip\ testの,\eTeX との差異(両方ともExtended mode)}\\ -「両方ともCompatibility mode」のときの差異と同じような雰囲気. -\item \emph{\etrip\ testの,\eTeX との差異} -\begin{itemize} -\item \verb+\lastnodetype+のチェックで3箇所失敗する.\pTeX の仕様に関わ - るのではないか? -\item Memory usageが多かったり,directionが表示されたりとか,明らかに - \pTeX 拡張によると考えられるもの. -\end{itemize} -\end{itemize} - - -\section{他環境でのコンパイル} -今まで\TeX\ Live 2007上で開発を行ってきたが,\TeX\ Liveは非常に巨大であり, -これを気楽にダウンロード,コンパイルということはやはりし辛いものである. -一方,これ以外に主に使われている(と信じる)\TeX\ distributionとしては, -以下がある. -\begin{itemize} -\item {\bf te\TeX\ 3.0}:Thomas Esserさんが作っていたUnix系OS用のもの.適 - 度な大きさで便利だったのだが,残念ながら3.0をもって開発中止に. -ソースは{\tt CTAN/systems/unix/teTeX/3.0/distrib/}からダウンロードできる. - おそらく大半のlinux distributionがこれをベースにした\TeX 環境を導 - 入している. -\item {\bf ptetex3}:土村さんによるte\TeX 3.0$\,+{}$日本語環境を簡単に - 整えるためのpatch集.公式ページは\\ - \verb+http://www.nn.iij4u.or.jp/~tutimura/tex/ptetex.html+. -\item {\bf up\TeX}:ttkさんによる,p\TeX の内部コードをUnicodeにする実験. - ptetex3内のUnicodeサポート活動 ({\tt ptexenc}) と少なからず関係. - 下のW32\TeX でも使えるが,本来はptetex3へのパッチ. - 公式ページは - \verb+http://homepage3.nifty.com/ttk/comp/tex/uptex.html+. -\item {\bf W32\TeX}:角藤さんの作られているWindows用\TeX\ - distributionの通称.おそらくWindows上で\TeX を利用している人ならほとん - どが入れてるはず\footnote{cygwinでコンパイルしたものを使って,W32\TeX - を使ってない人という人が若干いる模様.}.\\ -公式ページは -\verb+http://www.fsci.fuk.kindai.ac.jp/kakuto/win32-ptex/web2c75.html+. - -ここから一番近いミラーは数理の大島研.インストールにはTA - の阿部さんの「\TeX インストーラ」が非常に便利である. -\end{itemize} -\eteiri - -とりあえず上2つはなんとかサポートするようにするべきだろう.W32\TeX につ -いては,TAの阿部さんからの要望である. - -\subsection{W32\TeX} -W32\TeX のソースは前節の大島研のFTPなどからダウンロードすることができる. -「どうやらVisual C++がコンパイルに必要らしい」ということはわかっていたの -で,MicrosoftのサイトからMicrosoft Visual C++ 2005 Express Editionと -Platform SDKをインストールし,また最新のCygwinもインストールをして,環境 -を整えた\footnote{Platform SDKが必要であることを知るまでに数時間を無駄に -した.}. - -しかし,ここから先が大変だった.p\TeX のソースは{\tt -756/texk/web2c/ptexdir/}にある.どうやら土村さんによるptexenc拡張を取り -入れている様子であった.しかし,なぜかその直上のディレクトリのmakeがうま -くいかず,{\tt tangle}とか{\tt web2c}とかは元々のバイナリのものを使わな -ければならなかった.これらでいろいろ悪戦苦闘したあげく,結局{\tt -ptexdir}のソースをベースにすることは諦めることにした. - -その後,いろいろと慣れないWindows環境のことを調べ,なんとかコンパイルで -きるところまでこぎつけた.しかし,阿部さんから作ったbinaryが動作不良とい -う報告を受け,結構悩むことになった.おそらくDLLまわりの事情だったと思う -のだが,「W32\TeX に取り込む」という角藤さんからの報告が来たので,こちら -でのWindowsバイナリの開発はやらなくても良いような状況になってしまった. - -\subsection{te\TeX\ 3, ptetex3 (ptexenc), up\TeX} -これらはみなWeb2C-7.5.4環境がオリジナルである.従って, -{\tt ptex756.diff}を使わないことが必要になるが,前者2つについては,それ -ぐらいだけであまり注意は必要なかった.ptetex3独自拡張の{\tt ptexenc}について -も,コンパイル時にライブラリを追加するぐらいであった.up\TeX につ -いても,\WEB ソースについては同じであったが,できるプログラム名を{\tt -euptex}などとしてみたため,C headerなどの修正が少し面倒になった. - -後者の{\tt ptexenc}, up\TeX で心配であることは,日本語が\TeXXeT で通るか,とい -うことであった.僕が先に行った\TeXXeT への和文対応では,漢字などの -2\,byte文字が,内部では2つのnodeで表現されていることを前提としたもので -あった.そのため「Unicode拡張によって1文字3\,nodeとかになっていないだろ -うか」と心配した.\WEB\ change fileをざっとざっと見てみた所,どうやらその -ような事態は起こっていないように思えた.どうやら動いてはいるようである. - -\eteiri -このときついでに,{\tt fp.diff}をchange fileの形式に書き直したりもした. -そこで\textit{fp\_sub\_absolute\_value} procedure内で -$\infty-\infty\neq{\rm NaN}$というbugを発見して,修正することができた. - - - -\newpage -\section{今後の課題と,それにまつわる雑感} -今まで書いたような作業をしてきて,最初に気づいたことは,\emph{自分の英語 -力の無さ}である.英語の数学書とかは(英文については)たいした苦もなく読 -めるのだが,一方でいざ自分で書こうとすると表現が全く思い浮かばない.\WEB -ソースを書き換えるにあたっては,とりあえずの英語で間に合わせたけれども, -意味の余り取れないような文章になっているであろうことは確実である.院試ま -でになんとかしたいものだ\verb+^^;+ - -\eteiri 内容面について.浮動小数点の実装をしたはいいが,Pascalの,それも -ごく基本的な仕様に沿っただけの実装であり,速度的にも不利であると思われる. -Beebe~\cite{beebe}にあるように,C製の何か信頼性のおける高速多倍長数値計算ライブ -ラリを利用するというのが手っ取り早くまた安全な方策であろう.しかし,僕は -自分で浮動小数点演算を実装したことがなかったので,一回は自分でコードを書 -いてみたかった. - -また,\eTeX で長さ量とかには\verb+\dimexpr+などがあ -り式の表現が使えるのに,浮動小数点演算ではまだその機能がないとか,やっぱ -り出力書式指定の機能がないというのも気 -になる話である.後者はマクロを頑張っていじればなんとかできそうな気もする. - -\eteiri -最後に,避けて通れない問題であるが,bugの問題がある.特に浮動小数点演算 -の方は自分で書き起こしたものであるから,どんなbugが潜んでいるかは分から -ない.だいぶbugは取れたような気もするが,それは現時点での思い込みであっ -て,やはり心配である. - -\eteiri -ひょっとすると,\pTeX の寿命はもはやあまり長くないのではないかと -心配している.最初に紹介した\TeX の拡張たちや,\pdfTeX を拡張してスクリプ -ト言語Luaを組み込んだLua\TeX,また\XeTeX なんかの存在を聞いてると,純粋な -\TeX に日本語を対応させただけのp\TeX の存在意義は過去の遺産の継承ぐらいし -かなくなり,主流は世界的にもこれらの拡張のどれか or その発展形 -{---}{---}Lua\XeTeX とでも呼べばいいのだろうか?\inhibitglue {---}{---}に -なっていきそうな予感がする.ちょうど,日本電気のPC-9800シリーズと所謂 -「DOS/Vパソコン」の関係のように. - -\eteiri しかし,せっかくこの計算数学IIで「\pTeX に対して,\eTeX の機 -能のマージと浮動小数点演算の実装を行う」ということが大っぴらにできたのだ -から,このまま終わるのは非常に虚しいと思っている.こんなことを言うと「何 -を言っているんだ」と言われそうだが,up\TeX などと共に,\pTeX の地位 -向上に寄与できたらいいな,と思っている. - -\eteiri -以上,いろいろ書いてきたが,冬休み中やそれ以降に,この\epTeX まわりがと -んでもないおおごとになってしまったことには驚きである.取り上げてもらえる -のはうれしいことではあるが,\epTeX がどんどん自分の中に抱えきれないもの -になっているような気もしている. - -\newpage -\section{付録} -\subsection{$\bm\varepsilon$-\pTeX のコンパイル方法のイメージ} -{\tt eptex-xxxxx.xx.tar.bz2}内の{\tt HOWTOINST.txt}とかを見れば分かる話では -あるが,図にしておくとなにかと便利である. - -\begin{adjustvboxheight} -\small\narrowbaselines -\begin{center} -\xymatrix{\ -\texttt{../tex.web}\ar[r]&\fbox{\tt -tie}\ar[r]&\texttt{ptex.web}\ar[r]&\fbox{\tt tie}\ar[r]&(*)\\ -&\xymtt{../tex.ch}\ar[u]&\texttt{ptex.ch}\ar[ur]&\texttt{etex.ch}\ar[u]&% -{\begin{array}{c}\texttt{etex-sysdep.ch}\\\texttt{fp.ch}\end{array}}\ar[ul]\\ -&\xymtt{ptex-base.ch}\ar[ur]^-{\xymtt{tie -c ...}}& -\texttt{etex.diff}\ar[r]^-{\rm patch}&\\ -&&\texttt{../etexdir/etex.ch}\ar[r]^-{\rm cp} -&\texttt{etex.ch}\ar[uu]} -\ \\[0.5\baselineskip]\ -\xymatrix{ -(*)=\texttt{eptex.web}\ar[r]&\fbox{\tt tangle}\ar[r]& -\texttt{eptex.p}\ar[rr]^-{\rm Web2C}&&\text{{\tt tex1.c}\ etc.}% -\ar[rr]^-{\text{C compiler}}&&\texttt{eptex}\\ -&&&\texttt{pconvert.diff}\ar[u]_-{\text{patch to {\tt pconvert}}}& -\texttt{ep1.diff}\ar[r]^-{\rm patch}&\\ -&&&&&\hbox to 0zw{\hss\texttt{ptexextra.c} etc.\hss}\ar[uu] -}\ -\end{center} -\end{adjustvboxheight} - -\subsection{\WEB の実例:\texttt{ks1.web}} -このファイルがあるディレクトリ,もしくは公開場所にある{\tt ks1.web}は,僕 -が計算数学Iのレポートに書いたCarmichael数を探索するプログラム({\tt -ks1.f90}, Fortran 90)を\WEB に翻訳したものである. - -ここでは,(本来の\WEB では日本語が通らないので)松山さんの日本語版 -WEB~\cite{jpweb}を使わせてもらうことにした.この日本語版\WEB による -{\tt jtangle}, {\tt jweave}コマンドがそれぞれ{\tt tangle}, {\tt weave}の -代わりとなる. - -僕はPascalのコンパイラを所持していなかったので,Web2Cを利用してコンパ -イルを行った. -\begin{adjustvboxheight} -\narrowbaselines\small -\begin{verbatim} - [h7k doc]$ web2cdir=/home/h7k/ks2/texk/web2c/web2c - [h7k doc]$ cat $web2cdir/common.defines $web2cdir/texmf.defines ks1.p|$web2cdir/ - web2c -t -hks1-a.h -cks1 |$web2cdir/fixwrites > ks1.c - [h7k doc]$ gcc -o ks1 ks1.c -\end{verbatim} -\end{adjustvboxheight} -{\tt jtangle}, {\tt jweave}コマンドでできた{\tt ks1.p}, {\tt ks1.tex}や, -上のようにC言語に変換して得られた{\tt ks1.c}, {\tt ks1.h}も同じディレク -トリに置いておいた. -なお,{\tt ks1-a.h}というのはWeb2Cが吐くCソースを -きちんとコンパイルできるようにするための最小限の設定である. - - -\newpage -\begin{thebibliography}{99} -\bibitem{matsu3} 松山 道夫,「\TeX 読み物その3 \TeX の成立ちに関する - 諸々」.\\ -\verb+http://www.matsuand.com/downloads/texread/texread3.pdf+ -\bibitem{webman} Donald\ E.~Knuth. \textit{The \WEB\ System of - Structured Documentation}. Stanford Computer Science Report - CS980, 1983.\\ -例えば\verb+http://www.ctan.org/tex-archive/systems/knuth/WEB/WEBman.tex+ - とかにある. -\bibitem{texwiki} 奥村氏の\TeX\ wikiの「Make」の項.\\ -\verb+http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Make+ -\bibitem{etexman} The \NTS\ Team. \textit{The \eTeX\ manual}. \\ -\verb+http://www.tug.org/texlive/Contents/live/texmf-dist/doc/etex/base/etex_man.pdf+ -\bibitem{trip} Donald E. Knuth. \textit{A torture test for - \TeX}. Stanford Computer Science Report CS1027, 1984.\\ -\verb+http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/knuth/tex/tripman.tex+ -\bibitem{etrip} The \NTS\ Team. \textit{A torture test for \eTeX}.\\ 旧版\ -(Ver.~2) が以下にある.現在はVer.~2.2で,\TeX\ Live 2007とかには入ってい - る.\\% -\verb+http://tug.ctan.org/cgi-bin/getFile.py?fn=/systems/e-tex/v2/etrip/etripman.tex+ -\bibitem{TAOCP} Donald E.\ Knuth. -{\it The Art of Computer Programming}, Volume 2: Seminumerical -Algorithms. Addison-Wesley, third edition 1998. -\bibitem{arizawa} 有澤 誠 編,『クヌース先生のプログラム論』,共立出版, -1991 -\bibitem{jpweb} 松山 道夫,日本語版\WEB(試供版).\\ -\verb+http://www.matsuand.com/downloads/jWEB/jWEB-0.0.7.tar.gz+ -\bibitem{pascal} K.\ イェンゼン,N.\ ヴィルト 著,A.\ B.~ミケル,L.\ F.~% - マイナー 改訂,原田 賢一 訳,\\ -『情報処理シリーズ2 PASCAL 原書第4 - 版』,培風館,1981 -\bibitem{mppack} 平山 弘,高精度計算プログラムMPPACK 1.0. -\verb+http://phase.hpcc.jp/phase/mppack/+ -\bibitem{okuc} 奥村 晴彦,『C言語による最新アルゴリズム辞典』,技術評論 - 社,1991 -\bibitem{beebe} Nelson H. F. Beebe. Extending \TeX\ and \mf\ - with Floating-Point Arithmetic. \textit{TUGboat}, 28 (3), - November 2007. -\verb+http://www.math.utah.edu/~beebe/talks/2007/tug2007/tug2007.pdf+ -\bibitem{ori} 数学科3年オリエンテーション係,『2007年度 数学科オリパン - フ』,2007.9\\ -(数理266(学部生用控え室)に結構残部がある模様.) -\bibitem{okupt} 奥村 晴彦,「pTeXへの提案もどき」,2008.1.4.\\ -\verb+http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=29+ -\end{thebibliography} - -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.pdf b/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.pdf deleted file mode 100644 index 6d36050dafb..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.tex b/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.tex deleted file mode 100644 index 407e7b22a64..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/eptexdoc.tex +++ /dev/null @@ -1,1015 +0,0 @@ -%#!make eptexdoc.pdf -\documentclass[a4paper,11pt]{jsarticle} -\input fam256p.tex -\usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry} -\usepackage{amsmath,mathtools,amssymb,multicol,comment} -\usepackage[dvipdfmx]{graphicx} -\usepackage[T1]{fontenc} -\usepackage{booktabs,enumitem} -\usepackage{lmodern} -\usepackage[dvipdfmx,hyperfootnotes=false]{hyperref} -\usepackage{pxjahyper} -\usepackage[bold,deluxe]{otf} -\usepackage{hologo} -\usepackage{makeidx}\makeindex - -%%%%%%%%%%%%%%%% -\makeatletter -\newcommand{\OMEGA}{$\Omega$} -\def\epTeX{$\varepsilon$-\pTeX}\def\eTeX{$\varepsilon$-\TeX} -\def\upTeX{u\pTeX}\def\pTeX{p\kern-.15em\TeX} -\def\NTS{\leavevmode\hbox{$\cal N\kern-0.35em\lower0.5ex\hbox{$\cal T$}% - \kern-0.2emS$}\,} -\def\headfont{\normalfont\mathversion{bold}\gtfamily\bfseries} -\def\node#1{\textit{#1}} -\def\.#1{\texorpdfstring{% - \leavevmode\hbox{\texttt{\textbackslash#1}}\ifmmode\else\textcompwordmark\fi}{\textbackslash #1}} -\let\orig@cs=\. -\def\ind@cs#1{\orig@cs{#1}\indcs{#1}} -\def\indcs#1{\index{{\texttt{\textbackslash #1}}}} -\newlist{cslist}{description}1 -\setlist[cslist]{% - style=nextline,itemsep=\medskipamount,listparindent=1zw, - font=\normalfont\mdseries} -\def\csitem[#1]{\item[\llap{$\blacktriangleright$~}\let\.=\ind@cs#1]} -\def\emph#1{{\bfseries\gtfamily\mathversion{bold}#1}} -\def\listx{\def\makelabel{\hbox to 1em{\hfil\textbullet\hfil}}\def\@{\hfill} -\labelwidth=13zw\leftmargin15zw\itemindent=0zw} -\def\paragraph#1{\par\medskip\par\noindent\emph{■#1}\par\nobreak} -\def\Pkg#1{\textsf{#1}} -\catcode`\<=13 -\xspcode`\\=3 -\xspcode`\*=3 -\xspcode`\-=3 -\xspcode23=3 % \textcompwordmark -\def<#1>{\ensuremath{\langle\hbox{\normalfont\itshape #1\/}\rangle}} - -\font\man=manfnt at 10pt -\def\dbend{\raise0pt\hbox{\man\char'177}} -\AtBeginDvi{\special{pdf:mapfile otf-ipaex.map}} -\def\delbit#1#2{\underbracket[0.4pt]{#1}_{\text{#2}}} - -\def\TeXXeT{\TeX-\reflectbox{\bfseries\TeX-}} - -\newenvironment{multilist}[2]% - {$$\setbox\z@=\hbox\bgroup % catch some funny things -> \mathord - \let\a=\empty - \let\b=\empty - \count@=\z@ - \toks@={#2}% - \def\item##1\cr - {\ifnum \count@=\z@ - \count@=#1% - \expandafter\def\expandafter\b\expandafter{\b\y{}}% - \fi - \advance\count@ by\m@ne - \expandafter\def\expandafter\a\expandafter{\a\x{##1}}}% - \ignorespaces}% - {\loop - \ifnum \count@>\z@ - \expandafter\def\expandafter\a\expandafter{\a\expandafter\z\b\relax}% - \advance\count@ by\m@ne - \repeat - \def\x##1{\expandafter\y\b\relax{##1}}% - \def\y\y##1##2\relax##3% - {\ifx @##1@% - \def\b{##2\y{##3}}% - \else - \def\b{##2\y{##1&##3}}% - \fi}% - \def\z\y##1##2\relax{\def\b{##2\y{##1}}}% - \a - \def\x - {\expandafter\egroup\expandafter\halign\expandafter\bgroup - \expandafter&\the\toks@\cr}% - \def\y##1{\expandafter\def\expandafter\x\expandafter{\x##1\cr}}% - \b - \x\egroup $$} - -\makeatletter -\def\hex#1{% -{\count@=#1\@tempcnta=#1\@tempcntb=\@tempcnta\relax -\divide\@tempcntb by 16% -\ifnum\count@=0\else - \multiply\@tempcntb by16% - \advance\@tempcnta-\@tempcntb - \divide\@tempcntb by16% - \hex{\the\@tempcntb}% - \ifcase\@tempcnta\relax 0\or1\or2\or3\or4\or5\or6\or - 7\or8\or9\or A\or B\or C\or D\or E\pr F\fi -\fi}} -\clubpenalty=8000\widowpenalty=8000 - -\normalsize -\bigskipamount=\baselineskip -\medskipamount=.5\baselineskip -\smallskipamount=.25\baselineskip - -\usepackage{etoolbox} -\newenvironment{curve}{% - \par\medskip - \bgroup\small\leftskip=\dimexpr\textwidth-44zw\relax\@totalleftmargin=\leftskip - \parindent1zw\noindent\kern-\leftskip\hbox to\leftskip{\dbend\hss}% - \bigskipamount=\baselineskip - \medskipamount=.5\baselineskip - \smallskipamount=.25\baselineskip - \everypar{\everypar{}}\ignorespaces -}{\par\egroup\medskip} - -\renewenvironment{theindex}{% - \def\presectionname{}\def\postsectionname{}% - \section*{\indexname} - \@mkboth{\indexname}{\indexname}% - \plainifnotempty % \thispagestyle{plain} - \parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem - \raggedright - \begin{multicols}{2} - }{ - \end{multicols} - \clearpage - } - -\patchcmd\@verbatim\@totalleftmargin{\dimexpr\@totalleftmargin+2zw\relax}{}{} -\patchcmd\quote{\list{}}{\par\list{\topsep\medskipamount}}{}{} -\patchcmd\@verbatim{\trivlist}{\trivlist\addvspace\medskipamount\noautoxspacing}{}{} -\patchcmd\endverbatim{\endtrivlist}{\endtrivlist\addvspace\medskipamount}{}{} -\expandafter\let\csname endverbatim*\endcsname =\endverbatim -\patchcmd\verb{\ifmmode\hbox\else\leavevmode\vadjust{}\fi\bgroup} - {\ifmmode\else\leavevmode\vadjust{}\fi\hbox - \bgroup\textcompwordmark\noautoxspacing\noautospacing}{}{} -\patchcmd\verb@egroup{\egroup}{\egroup\textcompwordmark}{}{} - -\usepackage{shortvrb} -\MakeShortVerb*{|} -%%%%%%%% macros for index (simplified from doc.sty) -\newif\ifscan@allowed -\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus1fill}% -\def\pfill{\unskip~\dotfill\nobreak} - -\long\def\@footnotetext{% - \insert\footins\bgroup - \normalfont\footnotesize - \interlinepenalty\interfootnotelinepenalty - \splittopskip\footnotesep - \splitmaxdepth \dp\strutbox \floatingpenalty \@MM - \hsize\columnwidth \@parboxrestore - \protected@edef\@currentlabel{% - \csname p@footnote\endcsname\@thefnmark - }% - \color@begingroup - \@makefntext{% - \rule\z@\footnotesep\ignorespaces}% - \futurelet\next\fo@t} -\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t - \else \let\next\f@t\fi \next} -\def\f@@t{\bgroup\aftergroup\@foot\let\next} -\def\f@t#1{#1\@foot} -\def\@foot{\@finalstrut\strutbox\color@endgroup\egroup - \ifx\pltx@foot@penalty\@undefined\else - \ifhmode\null\fi - \ifnum\pltx@foot@penalty=\z@\else - \penalty\pltx@foot@penalty - \pltx@foot@penalty\z@ - \fi - \fi} - -\makeatother -%%%%%%%%%%%%%%%% - -\def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax} - -\frenchspacing -\begin{document} -\title{\emph{\epTeX について}} -\author{北川 弘典\null -\thanks{\url{http://osdn.jp/projects/eptex/wiki/},\ -e-mail: \texttt{h\_kitagawa2001(at)yahoo.co.jp}}} -\date{version 180226,\today} -\maketitle - -\tableofcontents - -\newpage -\section{はじめに} -\epTeX は,東京大学理学部数学科3年生対象の2007年度の授業「計算数学II」 -\footnote{\url{http://ks.ms.u-tokyo.ac.jp/}.}において北川が作成したプログ -ラムである.もともとは\pTeX\ 3.1.10を基盤として,\eTeX\ 2.2相当の機能や -10進21桁の浮動小数点演算を追加したものであったが,今では次の点が変わっている. -\begin{itemize} - \item \TeX~Live~2011に取り込まれるにあたり, - \eTeX をベースにして,その上に\pTeX 拡張やその他追加機能を載せる方針へと - 変更された. - \item 浮動小数点演算の機能は\epTeX~090927から削除されている - \footnote{% - \TeX ソース中で浮動小数点演算を行う手段としては,例えば\LaTeX3の - 機能(\Pkg{l3fp})や,\Pkg{xint}パッケージバンドルがあるので, - そちらを利用して欲しい.}. -\end{itemize} - -製作の動機や作業過程などについては,詳しくは\cite{h7k}を参照して欲しいけ -れども,大雑把に言うと,動機は以下のように要約できる. -\begin{itemize} -\item \pTeX は,\TeX が持っている「レジスタ1種類につき256個まで」という - 制限をひきずっており,現状でも非常に多数のパッケージを読み込ませた - りすると制限にぶち当たってしまう. -\item 一方,\eTeX 拡張ではこれが「レジスタ1種類につき32768個まで」と緩和 - されており,欧文で標準となっている\hologo{pdfTeX}やその後継の\hologo{LuaTeX}, - 及び\hologo{XeTeX}でも - \eTeX の機能が取り込まれている. -\item そうすると,\pTeX だけが制限をレジスタ制限を引きずっているのは世界 - から取り残されることになるのではないか. -\end{itemize} - -\section{\eTeX 拡張について} -前に述べたように,\eTeX は\TeX の拡張の一つである.\eTeX のマニュアル -\cite{etexman}には,開発目的が以下のように述べられている. - -\begin{quotation} -The \NTS\ project intends to develop an `New Typesetting System' (\NTS) -that will eventually replace today's \TeX3. The \NTS\ program will -include many features missing in \TeX, but there will also exist a mode -of operation that is 100\% compatible with \TeX3. It will, necessarily, -require quite some time to develop \NTS\ to maturity and make it widely -available. - -Meanwhile \eTeX\ intends to fill the gap between \TeX3 and the future -\NTS. It consists of a series of features extending the capabilities of -\TeX3. -\end{quotation} - -\NTS がどうなったのか僕は知らない.しかし,少なくとも\eTeX 拡張自体は実用 -的な物であり,そのせいか$\aleph$~(Aleph), \hologo{pdfTeX}, \hologo{XeTeX}などの他の拡張 -にもマージされており,ほとんどの人が\eTeX 拡張を使うことができるようになっ -ている\footnote{\LaTeXe~2017-01-01からは,\LaTeXe のフォーマット作成段階から -\eTeX 拡張が必須となった(\cite{l2e26}).}. - -\eTeX 拡張で追加される機能について,詳しくは\cite{etexman}を参照して欲し -いが,\cite{h7k}中の4.2節「\eTeX の機能」から一部改変して引用する. - -\begin{quotation} -\eTeX にはCompatibility modeとExtended modeの2つが存在し,前者では\eTeX -特有の拡張は無効になるのでつまらない.後者がおもしろい. - -拡張機能を使うにはファイル名を渡すときに\texttt{*}をつけるか -コマンドラインオプションとして\texttt{-etex}スイッチをつければいい -が,\eTeX 拡張に関わる追加マクロは当然ながらそれだけで -は駄目である.「plainマクロ for \eTeX」(\texttt{etex.fmt}というのが一番マシ -かな)では自動的に追加マクロである\texttt{etex.src}が呼ばれる.\LaTeX 下では -ちょうど\texttt{etex.src}に対応した\Pkg{etex}パッケージを読み込む必要がある. - -\paragraph{レジスタの増加} -最初に述べたように,\TeX では6種類のレジスタが各256個ずつ利用できる.それ -ぞれのレジスタには\.{dimen75}などのように0--255の番号で指定できる -他,予め別名の定義をしておけばそれによって指定することもできる.これらの -いくつかは特殊な用途に用いられる(例えば\.{count0}はページ番号などの -ように)ことになっているので,さらにuser が使えるレジスタは減少する. - -\eTeX では,追加のレジスタとして番号で言うと256--32767が使用できるよ -うになった.上のpdfによると最初の0--255と違って若干の制限はあるようだ -が,それは些細な話である.追加された(各種類あたり)$32768-256=32512$個の -レジスタは,メモリの効率を重視するためsparse registerとして,つまり,必要 -な時に始めてツリー構造の中で確保されるようになっている. - -\paragraph{式が使用可能に} -\TeX における数量の計算は充実しているとは言い難い.例えば, -\[ -\hbox{|\dimen123|}\leftarrow\frac12(\hbox{|\dimen42|}+\hbox{|\@tempdima|}) -\] -という計算を元々の\TeX で書こうとすると, -\begin{verbatim} -\dimen123=\dimen42 -\advance\dimen123by\@tempdima -\dimen123=0.5\@tempdima -\end{verbatim} -のように書かないといけない.代入,加算代入,乗算代入,除算代入ぐらいしか -演算が用意されていない状態になっている(上のコードのように,$d_2\mathrel{+\!\!=} -0.8 d_1$というような定数倍を冠することは平気). - -\eTeX では,そのレジスタの演算に,他のプログラミング言語で使われているよ -うな数式の表現が使えるようになった.上のPDFでは実例として -\begin{verbatim} -\ifdim \dimexpr (2pt-5pt)*\numexpr 3-3*13/5\relax + 34pt/2<\wd20 -\end{verbatim} -が書かれている.これは,\def\mpt{\,\mathrm{pt}} -{\catcode`\<12\[ - 32\mpt=(2\mpt-5\mpt)\left(3-\mathop{\mathrm{div}}(3\cdot 13,5)\right) -+\frac{34\mpt}{2}<\text{{\tt \char'134 box20}の幅} -\]} -が真か偽かを判定していることになる. - -\paragraph{\.{middle} primitive} -\TeX に\.{left}, \.{right}というprimitiveがあり,それを使えば括 -弧の大きさが自動調整されるのはよく知られている.\eTeX では, -さらに\.{middle}\indcs{middle}\ primitiveが追加された. - -具体例を述べる. -{\catcode`\|12 -\def\set#1#2{\setbox0=\hbox{$\displaystyle #1,#2$}% -\left\{\, \vphantom{\copy0}#1 \,\right|\!\left.\, \vphantom{\copy0}#2 \,\right\}} -\def\eset#1#2{\left\{\, #1 \,\middle|\, #2 \,\right\}} -\[ \set{n+\frac12}{n\in \omega} \eset{n+\frac12}{n\in \omega} \]} -これは以下のsourceで出力したものである: - -{\narrowbaselines -\begin{verbatim} -\def\set#1#2{\setbox0=\hbox{$\displaystyle #1,#2$}% - \left\{\, \vphantom{\copy0}#1 \,\right|\!\left.\, % - \vphantom{\copy0}#2 \,\right\}} -\def\eset#1#2{\left\{\, #1 \,\middle|\, #2 \,\right\}} -\[ \set{n+\frac12}{n\in \omega} \eset{n+\frac12}{n\in \omega} \] -\end{verbatim}} -両方とも集合の表記を行うコマンドである.\TeX 流の\.{set}では2つの -\.{left}, \.{right}の組で実現させなければならず,そのために{\catcode`\|=12$|$}の -左側と右側に入る式の最大寸法を測定するという面倒な方法を使っている.その -上,この定義では\.{textstyle}以下の数式(文中数式とか)ではそのま -ま使えず,それにも対応させようとすると面倒になる.一方,\eTeX 流の -\.{eset}では,何も考えずに -\.{left}, \.{middle}, \.{right}だけで実現できる. - -\paragraph{\TeXXeT\ \textmd{(\texttt{TeX-{}-XeT})}} -left-to-rightとright-to-leftを混植できるという機能であるらしい. -ヘブライ語あたりの組版に使えるらしいが,よく知らない. -ここでのRtoLはLtoRに組んだものを逆順にしているだけのような -気がする. - -\medskip - -とりあえず一目につきそうな拡張機能といったらこれぐらいだろうか.他にも -tracing機能や条件判断文の強化などあるが,そこら辺はパッとしないのでここ -で紹介するのは省略することにしよう. -\end{quotation} - -\epTeX ではここに述べた代表的な機能を含め,ほとんどすべての機能を実装して -いるつもりである -\footnote{% - さらに,レジスタの個数については,各種類65536個まで使えるようになっている(次節参照). -}.ただ,\TeXXeT を和文で使うと約物 -の位置がずれたり空白がおかしかったりするけれども,そこの修正は大変に思え -るし,苦労して実装する意味があるのか疑問なので放置している. - -\medskip - -\pTeX 拡張では,\TeX と比較して\node{dir\_node}と\node{disp\_node}という2種類のノードが -追加された.前者は,現在のリストの中に違う組方向のboxを挿入する際に寸法を補正するために作られ, -\.{hbox}や\.{vbox}のコンテナとなっている. -また後者は,欧文文字のベースライン補正のために使われる. - -\epTeX~110102 まではこれらのノードも\.{lastnodetype}の値として出力させるようにした. -しかし,両者ともに\epTeX が自動的に挿入する(ユーザーが意識する必要はない)ノードであることから, -\epTeX~110227以降では\node{dir\_node}と\node{disp\_node}は -\.{lastnodetype}\indcs{lastnodetype}の対象とする「最後のノード」とはならないようにしている -\footnote{% - 最後のノードが\node{dir\_node}であった場合,\.{lastnodetype}はそのノードが格納している - \node{hlist\_node}か\node{vlist\_node}の種類を返す. -}. -\begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} -\item $-1$&none (empty list)\cr\item 0&char node\cr\item 1&hlist node\cr -\item 2&vlist node\cr\item 3&rule node\cr\item 4&ins node\cr -\item 5&mark node\cr\item 6&adjust node\cr\item 7&ligature node\cr -\item 8&disc node\cr\item 9&whatsit node\cr\item 10&math node\cr -\item 11&glue node\cr\item 12&kern node\cr\item 13&penalty node\cr -\item 14&unset node\cr\item 15&math mode nodes\cr -\end{multilist} - -\vskip-\baselineskip - -\.{currentiftype}\indcs{currentiftype}における条件判断文とそれを表す数字との対応は,以 -下のようになっている.21--28が,\pTeX 拡張で追加された条件判断文に対応する. -29の\.{ifpdfprimitive}は\hologo{pdfTeX}由来のプリミティブ(後述)である. -\begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} -\item 1&\.{if}\cr\item 2&\.{ifcat}\cr\item 3&\.{ifnum}\cr\item 4&\.{ifdim}\cr -\item 5&\.{ifodd}\cr\item 6&\.{ifvmode}\cr\item 7&\.{ifhmode}\cr -\item 8&\.{ifmmode}\cr\item 9&\.{ifinner}\cr\item 10&\.{ifvoid}\cr -\item 11&\.{ifhbox}\cr\item 12&\.{ifvbox}\cr\item 13&\.{ifx}\cr -\item 14&\.{ifeof}\cr\item 15&\.{iftrue}\cr\item 16&\.{iffalse}\cr -\item 17&\.{ifcase}\cr\item 18&\.{ifdefined}\cr\item 19&\.{ifcsname}\cr -\item 20&\.{iffontchar}\cr\item \bf 21&\.{iftdir}\cr\item \bf 22&\.{ifydir}\cr -\item \bf 23&\.{ifddir}\cr\item \bf 24&\.{ifmdir}\cr\item \bf 25&\.{iftbox}\cr -\item \bf 26&\.{ifybox}\cr\item \bf 27&\.{ifdbox}\cr\item \bf 28&\.{ifmbox}\cr -\item \bf 29&\.{ifpdfprimtive}\cr -\end{multilist} - -\section{\OMEGA 由来の機能(旧名称:\texttt{FAM256}パッチ)} -\epTeX には,掲示板\TeX\ Q\ \&\ Aの山本氏の書き込み -\cite{yamamoto}に刺激されて作った,本節でに説明する\OMEGA の一部 -機能を使えるようにするパッチが存在する. -これは\texttt{FAM256}パッチと呼ばれ,今までは -「\epTeX 本体とは一応別扱いで,\epTeX の配布,及び -W32\TeX, \TeX~Liveのバイナリでは標準で有効になっていただけ」という扱いであったが, -それでは利用者が混乱するので -\emph{「\texttt{FAM256}パッチは\epTeX~160201以降からは切り離さない」} -とここで宣言する. -本ドキュメントの最後のページ\footnote{ただし,ソースファイルで言えば{\tt -fam256d.tex}(本文)と\texttt{fam256p.tex}(preamble部)に対応する.}にちょっ -としたサンプルを載せてある. - -本節で述べる追加機能は extendend modeでなくても有効になっている. -ただし,後に説明する「レジスタが各種類65536個まで」は, -extended modeの時に限り有効になる. - -\paragraph{数式フォント制限の緩和} -\OMEGA の大きな特徴としては,\TeX 内部のデータ構造を倍の領域を用いるよう -に改変し\footnote{詳しい話は\texttt{texk/web2c/texmfmem.h}中の共用体% -\texttt{memoryword}の定義を参照.大雑把に言うと,1つの「メモリ要素」に2つの32\,bit整 -数を同時に格納できるようになっている.},\TeX に従来から存在し -ていた「256個制限」を$2^{16}$個にまで緩和したことが挙げられる.同様に, -\OMEGA では(\cite{yamamoto}にもあるように)数式フォントを同時に256個まで -用いることができ,各フォントも65536文字まで許されるようになっている. - -\medskip - -\epTeX では,中途半端だが,数式フォント1つあたり -の使用可能文字数は256個のままで,同時に数式フォントを256個まで使えるよう -にしている.基本的には\OMEGA と同様の方法を用いているが, -内部でのデータ構造に違いがある(数字はすべてbit幅): -\begin{center} -\small\baselineskip=1.5zw -\begin{tabular}{crrrrr}% -\toprule - &category&family&char&\multicolumn{1}{c}{math code} - &\multicolumn{1}{c}{delimiter code}\\\midrule -\TeX82&3&4&8 &$3+4+8=15$ &$3+\delbit{4+8}{small}+\delbit{4+8}{large}=27$\\ -\OMEGA&3&8&16&$3+8+16=27$&$(3+\delbit{8+16}{small},\delbit{8+16}{large})=(27,24)$\\ -\epTeX&3&8&8 &$3+8+8=21$&$(3+\delbit{8+8}{small},\delbit{8+8}{large})=(19,16)$\\\bottomrule -\end{tabular} -\end{center} - -\def\bits#1{<\textup{#1}-bit\ number>} -\TeX に本来あったプリミティブは互換性維持のために同じ動作とする必要があるので, -16番から255番のフォントを利用する際には別のプリミティブが必要となる.(実装自 -体に\OMEGA の流儀を使っているから) -ここでは,\OMEGA のプリミティブ名を流用することにした. -すなわち,以下のプリミティブが追加されている\footnote{\OMEGA では\bits{8}のところが\bits{16}に -なっている.}. -\begin{cslist}[itemsep=\dimexpr-\baselineskip+\medskipamount] -\csitem[\.{omathcode} \bits{8}\texttt{=}\bits{27}]\ -\csitem[\.{omathcode} \bits{8}]\ -\csitem[\.{omathchar} \bits{27}]\ -\csitem[\.{omathaccent} \bits{27}]\ -\csitem[\.{omathchardef} \texttt{=}\bits{27}]\ -\csitem[\.{odelcode} \bits{8}\texttt{=}\bits{27}\ \bits{24}]\ -\csitem[\.{odelimiter} \bits{27}\ \bits{24}]\ -\csitem[\.{oradical} \bits{27}\ \bits{24}]\ -\end{cslist} -\vspace{-\baselineskip} -ここで,27\,bitとか24\,bitの自然数の意味については,上の表の -\OMEGA の行を参照して欲しい.上に書いた内部のデータ構造から推測できる通り, -\.{omathchar}等のcharacter codeの指定に使われる16\,bitの数値のうち実際に使われるのは下位 -8\,bitであり,上位8\,bitは無視される. -例えば,|\omathchar"4012345|と|\omathchar"4010045|は内部表現としては全く同じである. - -なお,|\odelcode|~\bits 8として -delimiter codeを取得しようとしても,現時点のパッチでは,うまく動作しない -\footnote{51\,bit自然数を返さないといけないですからねえ.やる気があれば -検討してみます.}. - -\medskip -\LaTeX において数式フォントを同時に16個以上使うには,|\omathchar|% -などのプリミティブに対応したマクロを使う必要がある. -最近の\pLaTeX(2016/11/29以降)はこれを部分的にサポートしていて, -\emph{\.{DeclareMathAlphabet}で使うことのできる数式用アルファベットの -上限だけは}256個に拡張されている. -% もちろんこれには最近の\LaTeX(2015/01/01以降)が必要である. -% また,少し前(2016/09/08以前)の\pLaTeX であれば -% \begin{verbatim} -% \makeatletter -% \mathchardef\e@mathgroup@top=256 -% \makeatother -% \end{verbatim} -% をプリアンブルに記述する必要があった. -だが,これだけでは記号類の定義に用いられる -|\DeclareMathSymbol|や|\DeclareMathDelimiter|が|\omathchar|や -|\odelcode|を使用しないので不十分である. -実験的と書かれてはいるが, -山本氏による「最低限のパッケージ」\cite{yamamoto3},またはこれを -最新の\LaTeX に追随してまとめ直された\Pkg{mathfam256}パッケージ -\footnote{\url{https://ctan.org/pkg/mathfam256}.}を -使うのが手っ取り早いような気がする. - -\paragraph{無限のレベル} -\TeX では,glueの伸縮量に\texttt{fil}, \texttt{fill}, \texttt{filll} -という3つの無限大のレベルが存在し,\texttt{l}が多いほど無限大のオーダーが高くなっていた. -\OMEGA では,「inter-letter spacingのために」\texttt{fi}という,有限と -\texttt{fil}の中間にあたる無限大のレベルが付け加えられた.そこで,この無限大レベル -\texttt{fi}も採用することにした. - -\medskip - -実装方法は,大まかには\OMEGA で\texttt{fi}の実装を行っているchange file\ -\texttt{omfi.ch}の通りであるのだが,これに\pTeX や\eTeX に伴う少々の修正を行っている. -\begin{itemize} -\item プリミティブ|\pagefistretch|, |\hfi|, |\vfi|を新たに定義している -\footnote{% - |\hfi|, |\vfi|については\cite{omegaman}に記述があるが, - \TeX~Liveに収録されている$\aleph$(\OMEGA は\TeX~Liveに収録されていない)では - 実装されていない.|\pagefistretch|を実装したのは北川の完全な勘違いである. -}. -\item |\gluestretchorder|, |\glueshrinkorder|の動作を\eTeX のそれと合わせた. - 具体的には,ある適当なglue~|\someglue|の伸び量をとおくとき, -\[ - \hbox{|\gluestretchorder\someglue|}= -\begin{cases} -0&\text{が高々\texttt{fi}レベルの量}\\ -1&\text{がちょうど\texttt{fil}レベルの無限量}\\ -2&\text{がちょうど\texttt{fill}レベルの無限量}\\ -3&\text{がちょうど\texttt{filll}レベルの無限量} -\end{cases} -\] -となっている.内部では\texttt{fi}レベルが1,\texttt{fil}レベルが2,……として処 - 理している. -\end{itemize} - -\paragraph{レジスタについて} -\OMEGA では(前にも書いたが)データ構造の変更が行われ,それによってレジ -スタが各種類あたり65536個使えるようになっている. - -一方,\eTeX では,256番以降のレジスタを専用のsparse treeに格納することにより, -32767番までのレジスタの使用を可能にしていた.このツリー構造を分析してみる -と,65536個までレジスタを拡張するのはさほど難しくないことのよう -に思われた.具体的には,ツリーの階層を1つ増やしてみた(だから,おそらく -各種類あたり$16\cdot 32768=524288$個まで使えるとは思うが,これはきりが悪 -い). -そこで,\epTeX では\eTeX 流の方法を用いながらも,レジスタをさ -らに65536個まで増やしている. - -\section{\hologo{pdfTeX}由来の機能} -開発中の\LaTeX 3では,\eTeX 拡張の他に,\hologo{pdfTeX}で導入された -\.{pdfstrcmp}(又はその同等品)が必要となっており,もはや純粋な\eTeX ですら -\LaTeX 3を利用することはできない状況である (\cite{expl31,expl32,expl33}). -その他にも,\hologo{pdfTeX}由来のいくつかのプリミティブ(\cite{pdftexman})の実装が -日本の\TeX ユーザからあり, -ほとんど\hologo{pdfTeX}における実装をそのまま真似する形で実装している. - -現在の\epTeX で利用できる\hologo{pdfTeX}由来のプリミティブの一覧を以下に示す. -これらはextended modeでないと利用できない. - -\begin{cslist} - \csitem [\.{pdfstrcmp} ] - 2つの引数を文字列化したものを先頭バイトから比較し, - 結果を$-1$(第1引数の方が先),0(等しい),1(第2引数の方が先)として文字列で返す. - - 比較する文字列中に和文文字がある場合には,(\epTeX の内部漢字コードにかかわらず) - UTF-8で符号化して比較する. - そのため,例えば -\begin{verbatim} -\pdfstrcmp{あ}{^^e3^^81^^83} % 「あ」はUTF-8でE38182 -\end{verbatim} - の実行結果は - {\ifdefined\UseRawInputEncoding\UseRawInputEncoding\fi - $\pdfstrcmp{あ}{^^e3^^81^^83}$}% - である\footnote{% - \LaTeX~2018-04-01以降では標準でUTF-8入力となった(|\usepackage[utf8]{inputenc}|が自動 - で行われていることに相当する)関係上,本文に述べた入力例を実行する際には - |\UseRawInputEncoding|の実行が必要になる. - }. - - \csitem[\.{pdfpagewidth}, \.{pdfpageheight}] - ページの「幅」「高さ」を表す内部長さであるが, - \emph{ここで言う「幅」は「字送り方向」のことではなく,物理的な意味である}. - - この2つの内部長さを設定するだけではdviに何の影響も与えない. - すぐ後で述べる\.{pdflastxpos}, \.{pdflastypos}による出力位置の取得 - の際の原点位置を設定するためだけに使われ,初期値は0である. - - \csitem[\.{pdflastxpos}, \.{pdflastypos}] - \.{pdfsavepos}\indcs{pdfsavepos}が置かれた場所の,dviにおける出力位置を返す内部整数(読み取り専用). - 原点はページの(物理的な意味の)左下隅であり,$y$軸は(物理的な)上方向に向かって増加する. - \begin{itemize} - \item ページの物理的な幅と高さはすぐ上の\.{pdfpagewidth}, \.{pdfpageheight}で設定する. - これらの内部長さが0であった場合は,\.{shipout}されたボックスの寸法と - \.{hoffset}(または\.{voffset})の値から自動的に計算される. - \item \pTeX では横組・縦組と組方向が複数あるので,\.{pdflastxpos}, \.{pdflastypos}の値の座標系を - 「物理的な」向きとすべきか,それとも「組方向に応じた」向きとすべきかは悩みどころである. - \epTeX~110227以降,現在までのバージョンでは上記のように物理的な向きとしている. - \end{itemize} - - \csitem[\.{pdfcreationdate}] - エンジン起動時の時刻を,\texttt{\pdfcreationdate}の形式で表した文字列に展開する. - これは\Pkg{standalone}パッケージを\epTeX で扱うために2013/06/05に実装されたプリミティブであるが, - 現在時刻の「秒」まで得るためにも使用できる(\TeX 82では分単位でしか取得できない). - - \epTeX においてプリミティブを実装した当初は「最初にこのプリミティブが実行された時刻を…」と - していたが,161030版から\hologo{pdfTeX}と同じ挙動に修正した. - - \csitem[\.{pdffilemoddate} , \.{pdffilesize} ] - それぞれの更新時刻(\.{pdfcreationdate}と同じ形式)と - ファイルサイズを表す文字列に展開する. - これらも\Pkg{standalone}パッケージのために\epTeX に実装されたプリミティブである. - - \csitem[\.{pdffiledump} \textrm{[}\texttt{offset} \textrm{]}% - \ \texttt{length} ] - で与えられたファイル名のバイト目(先頭は0)からバイトを読み込み, - 16進表記(大文字)したものに展開される. - - 本プリミティブはHeiko Oberdiek氏による\Pkg{bmpsize}パッケージを\epTeX でも使うために - 角藤さんが実装したものである(2014/05/06). - - \csitem[\.{pdfshellescape}] - \.{write18}によるshell-escapeが利用可能になっているかを示す内部整数(読み取り専用). - 0ならば不許可,1ならば許可,2ならばrestricted shell-escape% - \footnote{あらかじめ「安全」と認められたプログラム(\texttt{texmf.cnf}中で指定する) - のみ実行を許可する仕組み.}% - である. - - 本プリミティブは\TeX ユーザの集い2014でリクエストを受けて実装された(\cite{pdfse}). - - \csitem[\.{pdfmdfivesum} {[\texttt{file}]} ] - 引数のMD5ハッシュ値か,あるいは\texttt{file}が指定された場合は - ファイル名がのファイルのMD5ハッシュ値を計算する. - - 前者の「引数のMD5ハッシュ値を計算する」場合には,\.{pdfstrcmp}と同じように - 和文文字をUTF-8で符号化してから計算する. - - このプリミティブは\cite{xe5}以降の議論を元に,角藤さんがリクエストしたもので, - 2015/07/04に\epTeX に実装されている. - - \csitem[\.{pdfpritimive}, \.{ifpdfprimitive}] - \.{pdfprimitive}は次に続く制御綴がプリミティブと同じ名称であった場合に, - プリミティブ本来の意味で実行させるものである.例えば -\begin{verbatim} -\pdfprimitive\par -\end{verbatim} - は,\.{par}が再定義されていようが,本来の\.{par}の意味(段落終了)となる. - また,\.{ifpdfprimitive}は,次に続く制御綴が同名のプリミティブの意味を持っていれば - 真,そうでなければ偽となる条件判断文である. - - これらのプリミティブは2015/07/15版の\Pkg{expl3}パッケージで使われた - (\cite{15715})ことを受けて実装されたものだが, - 現在ではこれらのプリミティブは使われていない. - - \csitem[\.{pdfuniformdeviate} , \.{pdfnormaldeviate}] - \.{pdfuniformdeviate}は,0以上未満の一様分布に従う乱数(整数値)を生成する. - \.{pdfnormaldeviate}は,平均値0,標準偏差65536の正規分布に従う乱数(整数値)を生成する. - - 現在の乱数生成の種の値は,\.{pdfrandomseed}\indcs{pdfrandomseed}で取得できる(読み取り専用). - 種の初期化にはシステムのマイクロ秒単位での現在時刻情報が使われる.また,種の値は - \.{pdfsetrandomseed} \indcs{pdfsetrandomseed}によって特定の値に設定可能である. - - \LaTeX3のl3fpにおいて,2016/11/12あたりから実装された乱数生成機能(\cite{random})を - サポートするために\epTeX~161114から実装された. - - \csitem[\.{pdfelapsedtime}, \.{pdfresettimer}] - \.{pdfelapsedtime}は,エンジン起動からの経過時間を``scaled seconds''すなわち - $1/65536$秒単位で返す.この値は\.{pdfresettimer}によって再び0にリセットできる. - すぐ上の乱数生成プリミティブと同時に実装された. -\end{cslist} - -\section{バージョン番号} -\pTeX~p3.8.0に\.{ptexversion}が実装されたのと同時に,\epTeX でもバージョン番号を -取得する\.{epTeXversion}プリミティブが\epTeX~180121から追加された. - -\begin{cslist} - \csitem[\.{epTeXversion}] - \epTeX のバージョン番号(例えば\the\epTeXversion)を内部整数で返す.\epTeX 起動時のバナーでは - \eTeX, \pTeX のバージョン番号も表示されるので,それを再現しようとすると以下のようになる. -\begin{verbatim} -This is e-pTeX, Version 3.14159265-% -p\number\ptexversion.\number\ptexminorversion\ptexrevision-% -\number\epTeXversion-\number\eTeXversion\eTeXrevision ... -\end{verbatim} - - -\end{cslist} - - -\section{\.{lastnodechar}プリミティブ} -本プリミティブは -\TeX ユーザの集い2014でリクエストを受けて -実装された(\cite{pdfse})プリミティブで,\epTeX~141119以降のextended modeで利用可能である. -詳細な背景説明・仕様は\cite{lnc}に譲る. - -\pTeX では -\begin{verbatim} -これは,\textmc{『ほげ党宣言』}の…… -\end{verbatim} -という入力からは -\begin{quote} -これは,\textmc{『ほげ党宣言』}の…… -\end{quote} -という出力が得られ,コンマと二重鍵括弧の間が全角空きになってしまうことが以前から知られている. - -この現象は,(展開し続けた結果)「,」の直後のトークンが「『」ではないことによって, -「,」の後の半角空きと,「『」の前の半角空きが両方 -入ってしまうという\pTeX の和文処理の仕様 -\footnote{% - \TeX82 の欧文のカーニングや合字処理も同じような仕様になっている. - 例えば\texttt{W\.{relax}\ oWo}からはW\relax oWoという出力になり, - Wとoの間のカーニングが\.{relax}によって挿入されなくなったことがわかる. -}による. -min10フォントメトリックで「ちょっと」を組むと「ょっ」の間が詰まるという不具合は有名であるが, -「|ちょ{}っと|」と空グループを挟むことで回避されるのも,同じ理由である. - -\medskip - -\.{lastnodechar}プリミティブは, -上で述べた「書体変更命令を間に挟むと和文間グルーが『まともに』ならない」という状況を -改善する助けになることを目指して実装された. - -\begin{cslist} - \csitem[\.{lastnodechar}] - 現在構築中のリストの「最後のノード」が文字由来であれば,そのコード番号(内部コード)を内部整数として返す. - - 上記「最後のノード」では,\pTeX によって自動挿入される - \begin{itemize} - \item JFMによって入るグルー - \item 行末禁則処理のために挿入されるペナルティ - \item 欧文文字のベースライン補正用のノード - \end{itemize} - は無視される.また,「最後のノード」が欧文文字のリガチャであった場合は,リガチャそれ自身のコード番号ではなく, - 最後の構成要素の文字のコード番号を返す.「最後のノード」が文字を表すものでなかった場合は,$-1$が返る. -\end{cslist} - -例えば,\.{lastnodechar}を使って -\begin{verbatim} -これは,\the\lastnodechar\textmc{『ほげ党宣言』}…… -\end{verbatim} -と入力すると, -\begin{quote} -これは,\the\lastnodechar\textmc{『ほげ党宣言』}…… -\end{quote} -のようになり,\.{lastnodechar}実行時の「最後のノード」(文字「,」を表す)の内部コード -\footnote{% - 内部コードがEUCの場合は$\texttt{"A1A4} = 41380$,SJISの場合は - $\texttt{"8143} = 33091$となる. -}が得られる.これによって,\.{textmc}等の命令の直前の文字を知ることができるので, -あとは\TeX マクロ側でなんとかできるだろう,という目論見である. - - -また,上記の説明にあるとおり, -\begin{verbatim} -abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar -\end{verbatim} -は -\begin{quote} -abcfi\the\lastnodechar, abc\char"1C \the\lastnodechar -\end{quote} -となり,見た目では同じ「fi」が\.{lastnodechar}実行時の「最後のノード」であるかのように見えても, -それが合字の場合(左側)では\.{lastnodechar}の実行結果は最後の構成要素「i」のコード番号105となる. - -\begin{curve} - 「|これは,|」とソース中に入力したときの - ノードの状態を\.{showlists}で調べてみると次のようになっており, - 本当に一番最後のノードはJFMによって挿入される二分空きの空白 - (「,」と通常の和文文字の間に入るはずのもの)であることがわかる. -\begin{verbatim} -### yoko direction, horizontal mode entered at line 465 -\hbox(0.0+0.0)x9.24683 -\JY1/hmc/m/it/10 こ -\JY1/hmc/m/it/10 れ -\JY1/hmc/m/it/10 は -\penalty 10000(for kinsoku) -\JY1/hmc/m/it/10 , -\glue(refer from jfm) 4.62341 minus 4.62341 -\end{verbatim} - しかし,数段落上の説明の通り,\.{lastnodechar}は\pTeX の和文処理によって自動的に挿入された - これらJFM由来の空白を無視する. -\end{curve} - -「最後のノード」を見ているので, -\begin{verbatim} -これは,\relax\sffamily{}\the\lastnodechar\textmc{『ほげ党宣言』}…… -\end{verbatim} -などとノードに関係しないものが途中にあっても,それは単純に無視されて -\begin{quote} -これは,\relax\sffamily{}\the\lastnodechar\textmc{『ほげ党宣言』}…… -\end{quote} -となる. - -\section{\.{lastnodesubtype}プリミティブ} -\cite{tjb28,plt63}などの議論で,「最後のグルーがJFMグルーだけ\.{unskip}する」処理の必要性が -唱えられてきた.\epTeX にはもともと最後のノードの種別を返す\.{lastnodetype}プリミティブが -あったが,これでは最後のノードがグルーであるかしかわからない. -そのため,\epTeX~180226で\.{lastnodesubtype}プリミティブを追加した. - -\begin{cslist} - \csitem[\.{lastnodesubtype}] - 現在構築中のリストの「最後のノード」(\.{lastnodechar}プリミティブと同様)の - subtype値を内部整数として返す. -\begin{itemize} - \item 「最後のノード」が文字ノードのときは0が返る. - \item 現在構築中のリストが空のときは$-1$が返る. -\end{itemize} -\end{cslist} - -実際に有用なのは,以下の場合であろう: - \begin{description} - \item[最後のノードがグルー($\.{lastnodetype}=11$)のとき] -\begin{multilist}{3}{\hfil\hskip1.5em#:&\quad#\hfil} -\item 0&明示的な\.{hskip}, \.{vskip}\cr -\item 1&\.{lineskip}\cr -\item 2&\.{baselineskip}\cr -\item 3&\.{parskip}\cr -\item 4&\.{abovedisplayskip}\cr -\item 5&\.{belowdisplayskip}\cr -\item 6&\.{abovedisplayshortskip}\cr -\item 7&\.{belowdisplayshortskip}\cr -\item 8&\.{leftskip}\cr -\item 9&\.{rightskip}\cr -\item 10&\.{topskip}\cr -\item 11&\.{splittopskip}\cr -\item 12&\.{tabskip}\cr -\item 13&\.{spaceskip}\cr -\item 14&\.{xspaceskip}\cr -\item 15&\.{parfillskip}\cr -\item 16&\.{kanjiskip}\cr -\item 17&\.{xkanjiskip}\cr -\item 18&\.{thinmuskip}\cr -\item 19&\.{medmuskip}\cr -\item 20&\.{thickmuskip}\cr -\item 21&JFM由来グルー\cr -\item 98&\.{nonscript}\cr -\item 99&\.{mskip}\cr -\item 100&\.{leaders}\cr -\item 101&\.{cleaders}\cr -\item 102&\.{xleaders}\cr -\end{multilist} - \item[最後のノードがカーン($\.{lastnodetype}=12$)のとき] - \leavevmode -\begin{multilist}{3}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} -\item 0&カーニング\cr -\item 1&明示的な\.{kern}\cr -\item 2&アクセント由来\cr -\item 3&イタリック補正\.{/}\cr -\item 99&\.{mkern}\cr -\end{multilist} - \item[最後のノードがペナルティ($\.{lastnodetype}=13$)のとき] - \leavevmode -\begin{multilist}{2}{\hfil\hskip1.5zw#:&\quad#\qquad\hfil} -\item 0&明示的な\.{penalty}\cr -\item 1&\.{jcharwidowpenalty}\cr -\item 2&禁則処理由来\cr -\end{multilist} - \end{description} - -しかし,本プリミティブは -\epTeX 内部で使用しているsubtypeの値をそのまま返すだけであるので, -具体的な数値は将来変わる恐れがある.そのため, -\begin{verbatim} -\ifdefined\ucs\jfont\tenmin=upjisr-h at 9.62216pt -\else\jfont\tenmin=min10\fi -\tenmin\char\jis"214B\null\setbox0\lastbox%" -\global\chardef\pltx@gluetype\lastnodetype -\global\chardef\pltx@jfmgluesubtype\lastnodesubtype -\end{verbatim} -のように\TeX ソース内から取得・保存しておくことが望ましい. - -\medskip -なお\pLaTeX~2018-04-01以降では,上記のコードを利用して -「最後のグルーがJFMグルーのときだけ消す」命令|\removejfmglue|を -\begin{verbatim} -\protected\def\removejfmglue{% - \ifnum\lastnodetype=\pltx@gluetype\relax - \ifnum\lastnodesubtype=\pltx@jfmgluesubtype\relax - \unskip - \fi\fi} -\end{verbatim} -として定義している. - -\section{\.{epTeXinputencoding}プリミティブ} -現在読み込んでいるファイルの文字コードを切り替えるプリミティブであり, -2016/02/01に阿部紀行さんによって実装された.詳細は実装者の解説記事 -\cite{eptexinputenc}を参照してほしいが,おおまかに述べると以下のようになるだろう. - -\begin{cslist} - \csitem[\.{epTeXinputencoding} ] - 現在読み込んでいるファイルの文字コードをに変更する. - 実際に変更されるのは「次の行」であり,また現在のファイルからさらに\.{input}等で - 読まれたファイルには効力を及ぼさない. - - の値は,基本的には\pTeX の\texttt{-kanji}オプションで指定できる値 - (\texttt{euc}, \texttt{sjis}, \texttt{jis}, \texttt{utf8})である. -\end{cslist} - -\begin{comment} - \section{互換性} -\eTeX, \pTeX との互換性をはかるのに有効な手段としては,まず\texttt{TRIP} -testがある.\cite{h7k}にも書いたが,これは\TeX のソースの全行を実行する -ようなテストソースであり,\texttt{TRIP} testの実行結果が違えば,どこかの -動作が違っていることが分かるという仕掛けである. - -幸いにも,\epTeX の(compatibility modeにおける)\texttt{TRIP} testの実行結果は,\pTeX のそれとほとん -ど同じであり,違う点は以下のみであった: -\begin{itemize} -\item \texttt{Memory usage}の違い: -\begin{alltt} - Memory usage before: \(x\,\)&\(\,y\); after: \(z\,\)\&\(\,w\); still untouched: \(u\) -\end{alltt} -のところで,$x$, $z$が4多く,$u$が4少ない. -\item (\texttt{FAM256}パッチのおかげで)数式フォントが256個同時に -扱えるようになったことによる,エラーの未発生やエラーメッセージの違い. -\item ログの最後に出てくる,メモリ総使用量. -\end{itemize} -また,extended modeと -compatibility modeによる出力の違いを検証すると,Memory usageの違いやメモリ総使用量の他に -は,\texttt{e-TRIP}の説明書p.\ 4の項目4.にある違いしか見受けられなかった, - -\par\vskip0.5\baselineskip\par - -次に,\eTeX には,\eTeX によって拡張された部分を調べる,同様の -\texttt{e-TRIP} testが存在する.\pTeX 系列では,|\showbox|などでい -ちいち組方向を表示するので,それを -\begin{verbatim} - $ alias sep='sed "s/, yoko direction//;s/yoko direction, //;\ - s/yoko(math) direction, //"' -\end{verbatim} -というaliasを利用することでlog fileから除去し,それと\eTeX での -\texttt{e-TRIP} testの出力と比べた結果, -\begin{itemize} -\item Memory Usageの違い(略) -\item レジスタの使用可能個数を65536個/種類としたことによるエラーの未発生 -\item (和文文字のため)character codeに256以上も許すことによる - エラーの未発生. -\end{itemize} -という違いを得た. - -\par\vskip0.5\baselineskip\par - -すると,最後に,\pTeX 特有の拡張部分のテストをしたくなるわけだが,北川の -知る限りにおいては,そのようなテストソースは公式には存在しないようである. -しかし,やはり気になる問題であり{\tiny (さる方面から圧力もきたので)}, -個人的に作ってみたものが\texttt{ptex-qtrip}である.詳細な説明はそちらの -ドキュメントに譲る.ともかく,これを動作させてlog fileを比べてみると,メ -モリ関連や\texttt{FAM256}関連以外は -\begin{verbatim} - -% split2 to -0.01802,6.94444 p=-10000 - +% split2 to -0.01806,6.94444 p=-10000 -\end{verbatim} -以外の違いしかなかった.わずか$0.00004$の違い(単位がもしpointだとしたら -$3$\,sp)だが,どこか気になるところである. - -上の箇所もあるし,また\texttt{ptex-qtrip}自体がまだ完全なものではなのだ -が,\pTeX と\epTeX は実用上においては互換と言えそうな気もしなくもない. - -\end{comment} - -\begin{thebibliography}{99} - \bibitem{h7k} 北川 弘典,「計算数学II 作業記録」,2008.\\ - \url{https://osdn.jp/projects/eptex/document/resume/ja/1/resume.pdf}ほか, - 本pdfと同じディレクトリにある\texttt{resume.pdf}がそれにあたる. - \bibitem{yamamoto} 山本 和義,「数式famの制限とluatex」,掲示板「\TeX\ - Q\ \&\ A」,2009/02/12.\\ - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52744.html} - \bibitem{yamamoto2} 山本 和義,「Re: 数式famの制限とluatex」,掲示板「\TeX\ - Q\ \&\ A」,2009/02/16. - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52767.html} -\bibitem{yamamoto3} 山本 和義,「数式fam拡張マクロ for e-pTeX等」,掲示板「\TeX\ - Q\ \&\ A」,2009/02/21. - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/52799.html} -\bibitem{expl31} 河原,「パッケージとディストリビューションについて」,掲示板「\TeX\ - Q\ \&\ A」,2010/12/16. - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55464.html} - \bibitem{expl32} 角藤 亮,「Re: パッケージとディストリビューションについて」,掲示板「\TeX\ - Q\ \&\ A」,2010/12/19. - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55478.html} - \bibitem{expl33} zrbabbler,「LaTeX3 と expl3 パッケージ」,ブログ「マクロツイーター」内 - ,2010/12/22. - \url{http://d.hatena.ne.jp/zrbabbler/20101222/1293050561} - \bibitem{strcmp} 角藤 亮,「Re: e-pTeX 101231」,掲示板「\TeX\ - Q\ \&\ A」,2011/01/01.\\ - \url{http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55528.html} - \bibitem{pdfse} Dora TeX,「Re: |\pdfshellescape|, - |\lastnodechar| の実装」,\TeX~Forum,2014/11/19. - \url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1435#p8053} - \bibitem{lnc} 北川 弘典,「|\lastnodechar| プリミティブについて」,2014/12/15.\\ - \url{https://ja.osdn.net/projects/eptex/wiki/lastnodechar} - \bibitem{xe5} Joseph Wright, ``[XeTeX] |\(pdf)mdfivesum|'', - 2015/07/01,\\ - \url{http://tug.org/pipermail/xetex/2015-July/026044.html} - \bibitem{15715} tat tsan,「[expl3 / e(u)ptex] 2015/07/15 版 expl3 パッケージが - 、(u)platex で通らない」,\TeX~Forum,2015/07/26.\\ - \url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1632} - \bibitem{random} Joseph Wright, ``[tex-live] Random number primitives'', - 2016/11/12,\\ - \url{http://tug.org/pipermail/tex-live/2016-November/039436.html} - \bibitem{eptexinputenc} 阿部 紀行,「2016年2月2日」,2016/02/02.\\ - \url{http://abenori.blogspot.jp/2016/02/e-ptexeptexinputencoding.html}. - \bibitem{etexman} The \NTS\!\ Team. \textit{The \eTeX\ manual} (v2.0). \\ - |$TEXMFDIST/doc/etex/base/etex_man.pdf| - \bibitem{omegaman} J.\ Plaice, Y.\ Haralambous. \textit{Draft - documentation for the $\it\Omega$ system}, 1999.\\ - |$TEXMFDIST/doc/omega/base/doc-1.8.tex| - \bibitem{pdftexman} H\`an Th\'{\^e} Th\`anh et al. \textit{The - \hologo{pdfTeX}\ user manual}, 2015.\\ - |$TEXMFDIST/doc/pdftex/manual/pdftex-a.pdf| -\bibitem{l2e26} - The \LaTeX3 Project Team, \textit{\LaTeX\ News Issue 26}, 2017.\\ - |$TEXMFDIST/source/latex/base/ltnews26.tex|, \\ - \url{https://www.latex-project.org/news/latex2e-news/ltnews26.pdf}. -\bibitem{tjb28} 北川 弘典, - 「[ptex] |\inhibitglue|の効力」,2017/09/20.\\ - \url{https://github.com/texjporg/tex-jp-build/issues/28}. -\bibitem{plt63} Dora TeX, - 「p 指定の tabular でのセル冒頭の |\relax\par|」,2018/02/19.\\ - \url{https://github.com/texjporg/platex/issues/63}. -\end{thebibliography} - -\newpage -\printindex - -\newpage\scrollmode -\input fam256d.tex - -\newpage -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/fam256d.tex b/Master/texmf-dist/doc/ptex/ptex-base/fam256d.tex deleted file mode 100644 index 97a077a2170..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/fam256d.tex +++ /dev/null @@ -1,160 +0,0 @@ -\begin{center} - \Large\bfseries - Test source for \texttt{FAM256} patch -\end{center} - - -本ソースは山本和義氏による「数式famの制限とluatex」(qa:52744)中のコー -ドをベースにしたものである. - -\bigskip - -\paragraph{More than 16 math font families.} -\font\fontA=cmr10 -$ -\mbfa{A} -\mbfb{B} -\mbfc{C} -\mbfd{D} -\mbfe{E} -\mbff{F} -\mbfg{G} -\mbfh{H} -\mbfi{I} -\mbfj{J} -\mbfk{K} -\mbfl{L\ fam=\the\fam\ }$ - -$ -\mbfaa{Aa} -\mbfab{Ab} -\mbfac{Ac} -\mbfad{Ad} -\mbfae{Ae} -\mbfaf{Af} -\mbfag{Ag} -\mbfah{Ah} -\mbfai{Ai} -\mbfaj{Aj} -\mbfak{Ak} -\mbfal{Al} -\mbfam{Am} -\mbfan{An} -\mbfao{Ao} -\mbfap{Ap\ fam\the\fam\ } -$ - -$ -\mbfba{Aa} -\mbfbb{Ab} -\mbfbc{Ac} -\mbfbd{Ad} -\mbfbe{Ae} -\mbfbf{Af} -\mbfbg{Ag} -\mbfbh{Ah} -\mbfbi{Ai} -\mbfbj{Aj} -\mbfbk{Ak} -\mbfbl{Al} -\mbfbm{Am} -\mbfbn{An} -\mbfbo{Ao} -\mbfbp{Ap\ fam\the\fam\ } -$ - -$ -\mbfca{Aa} -\mbfcb{Ab} -\mbfcc{Ac} -\mbfcd{Ad} -\mbfce{Ae} -\mbfcf{Af} -\mbfcg{Ag} -\mbfch{Ah} -\mbfci{Ai} -\mbfcj{Aj} -\mbfck{Ak} -\mbfcl{Al} -\mbfcm{Am} -\mbfcn{An} -\mbfco{Ao} -\mbfcp{Ap\ fam\the\fam\ } -$ - -$ -\mbfda{Aa\ fam\the\fam\ } -\mbfdb{Ab\ fam\the\fam\ } -\mbfdc{Ac\ fam\the\fam\ } -\mbfdd{Ad\ fam\the\fam\ } -% -\ \textfont255=\fontA \fam255 roman -$ - -\medskip - -\paragraph{\.{omathchar}\ etc.} -\omathcode`<="3460065 -\mathcode`>="4065 -\xdef\lx{\odelimiter"4450068"030001} -\odelcode`[="410074"03000B -${\tt \verb|\mathchar"7F25|:\ }\mathchar"7F25,\ -{\tt \verb|\omathchar"7420125|:\ } -\omathchar"7420125$ - -{\tt meaning of \verb|\langle|:\ \meaning\langle}, - -{\tt meaning of \verb|\lx|:\ \meaning\lx} - - -${\tt \verb|\lx|:\ }\lx,\ -{\tt \verb|\bigl\lx|:\ } \bigl\lx,\ -{\tt \verb|\Bigl\lx|:\ } \Bigl\lx$ - - -{\tt \verb+\the\mathcode`\f+:\ \hex{\the\mathcode`\f}}, -{\tt \verb+\the\omathcode`\f+:\ \hex{\the\omathcode`\f}}(どちらも16進に -変換した) - -$\left[\right.\bigl[\Bigl[\Bigr)\bigr)) <>$ - -$\radical"270370{}$,\ $\oradical"460070"030074{} $\ -$\radical"270370{a}$,\ $\oradical"460070"030074{a} $\ -$\radical"270370{\int_V f\,d\mu}$,\ $\oradical"460070"030074{\int_V f\,d\mu} $ - -\medskip - -\.{odelcode} primitiveによる\emph{delimiter codeの取得}はうまく動かない:\\ -{\tt \verb+\the\delcode`\|+:} ${\the\delcode`\|}$, -{\tt \verb+\the\odelcode`\|+:} ${\the\odelcode`\|}$(どちらも10進) - -\medskip - -\paragraph{Infinite level ``fi''} -\def\na{\hskip 0pt plus 1fi({\tt fi})\hskip 0pt plus 1fi} -\def\nb{\hskip 0pt plus 1fil({\tt fil})\hskip 0pt plus 1fil} -\def\nc{\hskip 0pt plus 1fill({\tt fill})\hskip 0pt plus 1fill} -\def\nd{\hskip 0pt plus 1filll({\tt filll})\hskip 0pt plus 1filll} -\fbox{\hbox to 14cm{■\na ■\nb ■\nc ■\nd ■}} - -\fbox{\hbox to 14cm{■\na ■\nb ■\nc ■}} - -\fbox{\hbox to 14cm{■\na ■\nb ■}} - -\fbox{\hbox to 14cm{■\na ■\na\na ■}} - - - -\paragraph{65536 registers} -\leavevmode -{\tracingall -\setbox40000=\hbox to 10mm{fuga!}\copy40000 -{\setbox40000=\hbox to 10mm{a}\copy40000 - {\setbox40000=\hbox to 10mm{漢字仮名}\copy40000} -\global\setbox40000=\hbox to 10mm{asdf}}\copy40000 -{\setbox40000=\hbox to 10mm{\TeX}\copy40000 - {\setbox40000=\hbox to 10mm{ほげほげ}\copy40000}\copy40000}} - -\count34656=465\count45486=124 -\advance\count34656 by\count45486 -\the\count34656\nonstopmode diff --git a/Master/texmf-dist/doc/ptex/ptex-base/fam256p.tex b/Master/texmf-dist/doc/ptex/ptex-base/fam256p.tex deleted file mode 100644 index ea54feb243e..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/fam256p.tex +++ /dev/null @@ -1,75 +0,0 @@ -\makeatletter -\mathchardef\e@mathgroup@top=256 -\makeatother - - - -\DeclareMathAlphabet{\mbfa}{OT1}{cmr}{m}{n} -\DeclareMathAlphabet{\mbfb}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfc}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfd}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfe}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbff}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfg}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfh}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfi}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfj}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfk}{OT1}{cmr}{bx}{n} -\DeclareMathAlphabet{\mbfl}{OT1}{cmr}{bx}{n}% ここで15番 - -\DeclareMathAlphabet{\mbfaa}{OT1}{cmtt}{m}{n} % 16 -\DeclareMathAlphabet{\mbfab}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfac}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfad}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfae}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfaf}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfag}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfah}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfai}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfaj}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfak}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfal}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfam}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfan}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfao}{OT1}{cmtt}{m}{n} -\DeclareMathAlphabet{\mbfap}{OT1}{cmtt}{m}{n} - -\DeclareMathAlphabet{\mbfba}{OT1}{cmss}{m}{it} % 32 -\DeclareMathAlphabet{\mbfbb}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbc}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbd}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbe}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbf}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbg}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbh}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbi}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbj}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbk}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbl}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbm}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbn}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbo}{OT1}{cmss}{m}{it} -\DeclareMathAlphabet{\mbfbp}{OT1}{cmss}{m}{it} - -\DeclareMathAlphabet{\mbfca}{OT1}{ptm}{m}{n} % 48 -\DeclareMathAlphabet{\mbfcb}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcc}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcd}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfce}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcf}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcg}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfch}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfci}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcj}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfck}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcl}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcm}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcn}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfco}{OT1}{ptm}{m}{n} -\DeclareMathAlphabet{\mbfcp}{OT1}{cmr}{bx}{n} - -\DeclareMathAlphabet{\mbfda}{OT1}{phv}{m}{n} % 64 -\DeclareMathAlphabet{\mbfdb}{OT1}{pcr}{m}{n} -\DeclareMathAlphabet{\mbfdc}{OT1}{pag}{m}{n} -\DeclareMathAlphabet{\mbfdd}{OT1}{ppl}{m}{n} - diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jfm.pdf b/Master/texmf-dist/doc/ptex/ptex-base/jfm.pdf deleted file mode 100644 index 2a499781a45..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/jfm.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jfm.tex b/Master/texmf-dist/doc/ptex/ptex-base/jfm.tex deleted file mode 100644 index ecae5460628..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/jfm.tex +++ /dev/null @@ -1,239 +0,0 @@ -\documentclass[twoside]{jarticle} -\addtolength{\textwidth}{0.9in} -\setlength{\oddsidemargin}{.4in} -\setlength{\evensidemargin}{.4in} -\pagestyle{headings} -\title{JFMファイルフォーマット} -\author{ASCII Corporation \& Japanese \TeX\ Development Community} -\begin{document} -\maketitle - -\section{JFM file format} -JFMファイルのフォーマットは、 -基本的にはTFMファイルのフォーマットに準拠しており、 -TFMを拡張した形になっている。 -ここでは、主にその拡張部分について説明を行い、 -その他の部分に関しては、 -\TeX\ the program等のTFMの説明を参照してもらいたい。 - -この文書はもともと株式会社アスキーが開発したp\TeX{}に付属していた -ものである。2018年に日本語\TeX{}開発コミュニティはJFMフォーマットを -拡張したため、その内容について追記してある。 - -\subsection{JFMファイルの構成} -JFMファイル全体の構成は、 -Table~\ref{構成}(\pageref{構成}ページ)に示すとおりである。 \\ -ここでTFMと異なるのは次の点である。 -\begin{enumerate} -\item {\it char\_type}のテーブルが付け加えられたこと。 -\item {\it exten}の換わりに{\it glue}のテーブルが設けられたこと。 -\item 2に関連して、{\it lig\_kern}から{\it glue\_kern}テーブルへ変更されたこと。 -\item これらに伴い、先頭のファイル内の各部分を規定する - パラメータ表が変更されている。 - また、オリジナルのTFMとの区別のためにidを付加している。 -\end{enumerate} -最初の7ワードは半ワード(=2バイト)ずつに区切られ、 -JFMファイルを構成する14個の要素のサイズが収められている。 -これらの値は、すべて$2^{15}$よりも小さい非負の値で、 -次の条件を満たしていなければならない: -\begin{eqnarray*} -bc &=& 0 \\ -lf &=& 7 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ng + np -\end{eqnarray*} - -\subsection{char\_type} -今回の\TeX の日本語化においては、同一の文字幅、 -高さ前後に挿入されるグルー等、その文字が持つ属性全てが -同じものを、1つの{\it `char\_type'}として英字フォントの1キャラクタと -同様にして扱うようにしている。 -そこで、漢字の文字コードとこの{\it char\_type}との対応付けを -このテーブルを使って行う。 - -このテーブルの各エントリーは1ワード(=4バイト)で構成され、 -上位3バイトに漢字コード、下位1バイトにキャラクタタイプを持つ -\footnote{これが日本語\TeX{}開発コミュニティによって2018年1月に導入された -新仕様である;オリジナルのアスキーによる仕様では、「上位半ワードに -漢字コード、下位半ワードにキャラクタタイプを持つ」というものであった。 -p\TeX{}では内部処理にJISが用いられ、JFMで扱う漢字コードは2バイトが -上限だったため十分であったが、up\TeX{}でBMP超えの3バイトの文字を -JFMで扱うことを目的に仕様拡張した。}。 -漢字コードは、それが16進数24bit(3バイト)で0xABcdefと表されるとき、 -{\it char\_type}テーブルには{\tt cd ef AB}として格納される -\footnote{オリジナルの仕様では、下位半ワードにキャラクタタイプを -格納していたが、キャラクタタイプの上限は255なので、実はその上位バイトは -常に{\tt 00}であった。このことを利用し、日本語\TeX{}開発コミュニティの -新仕様では「この{\tt 00}が実は漢字コードの上位だった」ということに -して、3バイト(U+10000以上)の漢字コードで不足する1バイトを確保した。 -これにより、新仕様はオリジナルの仕様の上位互換であることが保証されている。}。 -テーブル内にはコードの値の順番に収められていなければならない。 -またこのテーブルの先頭には、デフォルトのインデックスとして -漢字コード及びキャラクタタイプの項が0のものが、 -必ず1つ存在しなければならず、このテーブルに登録されていない文字は、 -キャラクタタイプが0として扱う。 -つまり、このデフォルト以外の文字幅、カーン等の属性を持つキャラクタ -のコードとタイプが2番目以降のエントリーとして存在しなければならない。 - -\subsection{char\_info} -{\it char\_type}をインデックスとしてこのテーブルを -参照することにより、各{\it char\_type}の属性を検索する。 -各テーブルへのインデックス等の情報を次の順番でパッキング -して1ワードに収めてある。 -\begin{description} -\item{{\it width\_index} (8bits)} width\_tableへのインデックス -\item{{\it height\_index} (4bits)} height\_tableへのインデックス -\item{{\it depth\_index} (4bits)} depth\_tableへのインデックス -\item{{\it italic\_index} (6bits)} italic\_tableへのインデックス -\item{{\it tag} (2bits)} - \begin{description} - \item{${\it tag}=0$} {\it remainder}の項は無効であり - 使用しないことを示す。 - \item{${\it tag}=1$} {\it remainder}の項が{\it glue\_kern}への有効な - インデックスであることを示す。 - \item{${\it tag}=2, 3$} JFMでは使用していない。 - \end{description} -\item{remainder (8bits)} -\end{description} -JFMでは$bc$は必ずゼロ\footnote{前節にある通り、漢字コード及び -キャラクタタイプの項が0のものが必ず1つ存在するため。}なので、 -1つのJFMに含まれる{\it char\_info}は全部で$ec+1$ワードになる。 - -\subsection{glue\_kern} -特定のキャラクタタイプの組み合せ時に挿入すべき{\it glue}又は{\it kern}を -簡単なプログラム言語によって指定する。 -各命令は、以下の4バイトで構成される。 -\begin{description} -\item{第1バイト({\it skip\_byte})} - \begin{itemize} - \item 128より大きいとき\\ - 現在のワードが{\it char\_info}から示された最初のワード - である場合は、実際の{\it glue\_kern}プログラムが - {\it glue\_kern}[$256*{\it op\_byte}+{\it remainder}$]から - 収められている(すなわち、再配置されている)ことを示す - \footnote{「再配置」は、サイズが256を超える大きな - {\it glue\_kern}テーブルを格納するための方策であり、 - 欧文TFMの{\it lig\_kern}テーブルにおけるそれと同様である。 - 2018年2月に日本語\TeX{}開発コミュニティによって、 - p\TeX{}及びpPLtoTFで新たにサポートされた。}。 - 最初のワードでない場合(すなわち、既に再配置先あるいは - プログラムのステップを開始した後のワードである場合)は、 - その場でプログラムを終了する。 - \item 128のとき\\ - このワードを実行してプログラムを終了する。 - \item 128より小さいとき\\ - このワードを実行した後、次のステップまでスキップする - ワード数を示す - \footnote{「スキップ」(SKIP)は、元々アスキーの公式ページ - {\tt http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html}に文書化 - されてはいたが、実際には(p)PLtoTFの{\it glue\_kern}テーブル内で - SKIP命令を使用することができず、p\TeX{}もやはりSKIP命令を - サポートしていなかった。 - 2018年2月の日本語\TeX{}開発コミュニティの改修により、 - 新たにサポートが開始された。}。 - \end{itemize} -\item{第2バイト({\it char\_type})} - \begin{itemize} - \item 次の文字のキャラクタタイプが、 - このバイトで示すキャラクタタイプ - \footnote{ここにキャラクタタイプが格納されるため、 - キャラクタタイプの上限は255なのである。}と同じ場合、 - 第3バイトの処理を実行し、プログラム終了。 - \item そうでなければ次のステップへ。 - \end{itemize} -\item{第3バイト({\it op\_byte})}\\ - この値によってグルーを扱うかカーンを扱うかを規定する。 - \begin{itemize} - \item 127以下の場合{\it glue[remainder$\times$3]}のグルーを挿入。 - \item 128以上の場合{\it kern[remainder]}のカーンを挿入。 - \end{itemize} -\item{第4バイト({\it remainder})}\\ - 第3バイトにより規定される - {\it glue}または{\it kern}へのインデックスを示す。 -\end{description} -% -\subsection{glueテーブル} -自然長、伸び長、縮み長の3ワードで1つのグルーを構成する -(したがって、$ng$は必ず3の倍数となる)。 -各値は、$design size\times2^{-20}$を単位として表す。 -\begin{description} -\item{第1ワード} width -\item{第2ワード} stretch -\item{第3ワード} shrink -\end{description} -% -\subsection{paramテーブル} -\begin{description} -\item{param[1]} 文字の傾き (italic slant)。 -\item{param[2][3][4]} 漢字間に挿入するグルーのデフォルト値。 -\item{param[5]} p\TeX{}でzhで参照される寸法。 -\item{param[6]} p\TeX{}でzwで参照される寸法。 -\item{param[7][8][9]} 漢字と英字間に挿入するグルーのデフォルト値。 -\end{description} -% -\newpage -\begin{table}[h] -\begin{minipage}[b]{2in} -\begin{tabular}{|c|c|} \hline -\hbox to.8in{\hfil$id$\hfil} & \hbox to.8in{\hfil$nt$\hfil} \\ \hline -$lf$ & $lh$ \\ \hline -$bc$ & $ec$ \\ \hline -$nw$ & $nh$ \\ \hline -$nd$ & $ni$ \\ \hline -$nl$ & $nk$ \\ \hline -$ng$ & $np$ \\ \hline -\multicolumn{2}{|c|}{} \\ -\multicolumn{2}{|c|}{header} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{} \\ -\multicolumn{2}{|c|}{char\_type} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{char\_info} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{width} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{height} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{depth} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{italic} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{glue\_kern} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{kern} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{glue} \\ -\multicolumn{2}{|c|}{}\\ \hline -\multicolumn{2}{|c|}{}\\ -\multicolumn{2}{|c|}{param} \\ -\multicolumn{2}{|c|}{}\\ \hline -\end{tabular} -\end{minipage} -\begin{minipage}[b]{3.3in} -\noindent -\begin{tabular}{l} -$id=$ JFM\_ID number. ($=11$ for yoko, $9$ for tate) \\ -$nt=$ number of words in the character type table. \\ -$lf=$ length of the entire file, in words. \\ -$lh=$ length of the header data, in words. \\ -$bc=$ smallest character type in the font. ($=0$ for JFM) \\ -$ec=$ largest character type in the font. \\ -$nw=$ number of words in the width table. \\ -$nh=$ number of words in the height table. \\ -$nd=$ number of words in the depth table. \\ -$ni=$ number of words in the italic correction table. \\ -$nl=$ number of words in the glue/kern table. \\ -$nk=$ number of words in the kern table. \\ -$ng=$ number of words in the glue table. \\ -$np=$ number of font parameter words. \\ -\end{tabular} -\end{minipage} -\caption{JFMファイルの構成\label{構成}} -\end{table} -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.pdf b/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.pdf deleted file mode 100644 index f4672369842..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.tex b/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.tex deleted file mode 100644 index 4cce31c37d1..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/jtex_asciimw.tex +++ /dev/null @@ -1,653 +0,0 @@ -\newcommand{\cs}[1]{{$\backslash$#1}} -\documentstyle[twoside]{jarticle} -\addtolength{\textheight}{.5in} -\addtolength{\textwidth}{.7in} -\setlength{\oddsidemargin}{.4in} -\setlength{\evensidemargin}{.4in} -\title{\TeX システムの日本語化} -\author{倉沢 良一\\ASCII Corporation} -\date{昭和62年 3月} -\pagestyle{headings} -\begin{document} -\maketitle -\begin{abstract} -現在、\TeX システム の日本語化を進めているが、 -現時点で一応の動作が可能となった。 -そこで、ここにその報告と共にその内容に付いて解説する。 -ただし、ここに報告する内容については、 -決して最終的なものではなく、 -現時点での暫定的なものであることを承知してもらいたい。 -尚、本稿はこの日本語化された\TeX システムで\LaTeX を用いて作成した。 -\end{abstract} -% -\newpage -\tableofcontents -\newpage -%\listoftables -%\newpage -% -\section{\TeX システム日本語化の方針} -\TeX システムを日本語化するにあたり、次の事項に留意し -その方針を決定した。 -\begin{enumerate} -\item 完全なアッパーコンパチブルであること。 - \begin{itemize} - \item 日本語化により本来\TeX の持つ機能が損なわれるようなことが - あってはならない。 - \item 欧文、和文の区別が無く、同一のシステム(プログラム)で - 扱えること。 - 当然これまでにある、又はこれから作られる欧文の原稿が - 扱えること。 - \item 和文に対しても、欧文同様の機能が扱えること. - (フォント、マクロ等) - \end{itemize} -\item 和文特有の特殊処理が行えること。 - \begin{itemize} - \item 行頭、行末禁則を自動的に行えること。 - \item 和文、欧文間のスペーシングの調整等が自動的に行えること。 - \end{itemize} -\item 仕上がりが美しいこと。\\ - \TeX 本来の目的である``\.美\.し\.い\.出\.力''が得られなければ、 - 日本語化を行う意味は全く無くなってしまう。 - 高性能の出力デバイスと高品位のフォントを用いることにより、 - 写植機に負けない出力が得られること。 -\end{enumerate} -1.に関しては、あくまでも``\TeX システム''をそっくりそのまま -日本語環境の下で使いたいという要望である。 -和文に対しても、欧文のように自由にフォントを切り換えたり、 -マクロ定義が行いたいというのは当然であり、 -それが\TeX のような文書処理システムの魅力の1つであるからである。\\ -2.に付いては、和文を扱う場合には必然的に付いてまわる問題で、 -これらの処理が確実に行われなければ、その文書処理系の利用価値は -半減してしまうと考えられる。\\ -3.の内容は少し大げさなようにも思えるが、 -Don\nolinebreak\ Knuthの\TeX 開発の目的からすれば、至極当然のことでもある。 -又、これは 1.や2.の内容が大きく関わっているのは言うまでもないことである。 - -このような要求を、出来る限り満足するために -次のような日本語化の方策をとることにした。 -\begin{itemize} -\item 日本語化は、\TeX そのもの(initex、virtex)に対して行い、 - plainやlplain等のマクロには出来れば一切手を付けない。 - (付けたくない。) -\item ただし、追加された機能の為のイニシャライズや、パラメータの設定、 - 漢字フォントの定義等は、\TeX のフレキシビリティを保つためにもマクロで - 行えるようにする。 -\item 欧文で行えることは、可能な限り和文でも行えるようにポーティングする。 -\end{itemize} -% -\newpage -\section{\TeX 日本語化の実際} -上記の方針に基づき日本語化を行った結果、現時点で以下のように実現されている。 -% -\subsection{コード体系} -インプリメントの容易さ、現在使用しているホストマシンのコード、 -将来のパーソナルコンピュータへの移植等を考え合わせた結果、 -内部コード、外部コード共にASCII、シフトJISの組み合せを用いた。 -ただし、DVIファイル内の漢字コードだけは、JISコードを出力するようになっている。 -また半角カナのサポートは行っていない。 -% -\subsection{プリミティブ} -日本語化に伴い、幾つかのプリミティブの追加および拡張を行った。 -これらは、禁則処理、オートスペーシングおよび漢字コードのためのものである。 -この時、新しく追加するプリミティブについては、日本語独特の新しい処理に -対するものだけに止め、出来るだけ既存のプリミティブを拡張するように努めた。 -% -\subsubsection{プリミティブの追加} -\label{tbpri} -Table~\ref{tb:prim}に示すプリミティブが追加されている。 -(詳しくは、以降のセクションで解説する。) -% -\subsubsection{プリミティブの拡張} -既存のプリミティブに関しては、出来得る限り欧文、和文の区別をせずに -扱えるよう拡張を行った。 -また内部で扱うトークンに対する日本語化を行うことによって、 -プリンティングキャラクタのみでなく、マクロ名やトークンリスト -にも全角文字を半角文字と混在して扱えるようになっている。 - -\noindent 例. -\begin{quote} -\cs{char}''82A0\\ -\cs{accent}''5F`あ\\ -\cs{def}\cs{改ページ}\{\cs{eject}\} -\end{quote} -% -\begin{table}[htb] -\begin{tabular}{|l|p{4in}|} \hline -\cs{\it prebreakpenalty} & - 指定するキャラクタコードの前方に挿入するペナルティの値を設定する。 - 行頭禁則の指定として用いる。 \\ -& 例. {\tt\cs{prebreakpenalty}`、$=$1000} \\ \hline -\cs{\it postbreakpenalty} & - 指定するキャラクタコードの後方に挿入するペナルティの値を設定する。 - 行末禁則の指定として用いる。\\ -& 例. {\tt\cs{postbreakpenalty}`[$=$1000} \\ \hline -\cs{\it jis} & - 漢字コードの変換を行うためのプリミティブで、 - JISコードから内部コードであるシフトJISに変換する。\\ -& 例. {\tt\cs{prebreakpenalty}\cs{jis}"2122$=$1000} \\ \hline -\cs{\it kuten} & - \cs{jis}と同様に区点コードからシフトJISへ変換する。\\ -& 例. {\tt\cs{postbreakpenalty}\cs{kuten}"0146$=$1000} \\ \hline -\cs{\it sjis} & - 上記の2つと同様であるが、内部コードがシフトJISであるので、 - そのままの値をかえす。\\ \hline -\cs{\it kanjiskip} & - 全角コード間に自動的に挿入されるグルーを持つレジスタ。\\ -& 例. {\tt\cs{kanjiskip}$=$0pt puls .3pt minus .3pt} \\ \hline -\cs{\it xkanjiskip} & - 全角--半角コード間に自動的に挿入されるグルーを持つレジスタ。\\ -& 例. {\tt\cs{xkanjiskip}$=$2.5pt puls 1pt minus 1pt} \\ \hline -\cs{\it autospacing} & - 全角コード間へのグルーの自動挿入を行うための指定。 \\ \hline -\cs{\it noautospacing} & - 全角コード間へのグルーの自動挿入を行わないための指定。 \\ \hline -\cs{\it autoxspacing} & - 全角--半角コード間へのグルーの自動挿入を行うための指定。\\ \hline -\cs{\it noautoxspacing} & - 全角--半角コード間へのグルーの自動挿入を行わないための指定。\\ \hline -\cs{\it xspcode} & - 全角--半角コード間へのグルーの自動挿入の対象となる - 半角コードを指定する。 - 現在デフォルトの値としてアルファベットおよび数字に対して - スペースが挿入されるように設定されている。 \\ -& 例. {\tt\cs{xspcode}`A$=$0} \\ \hline -\end{tabular} -\caption{日本語化に伴い追加されたプリミティブ。} -\label{tb:prim} -\end{table} -% -\subsection{ラインブレーク} -欧文と和文の処理で見かけ上最も大きな違いは、ラインブレーク処理であると思われる。 -``見かけ上''と言うのは、\TeX 内部の処理には -さほど大きな変更はいらないからである。 -具体的には、次のように文中のどの位置を -ブレークポイントの対象とするかの問題である。 -\begin{itemize} -\item 欧文中でのラインブレークは、ハイフネーション処理等の特別な場合を除いて、 -単語中つまり連続する文字列中は、ブレーキングポイントとして選択されない。 -\item 和文中では禁則の例外を除いて、 -全ての文字間がブレークポイントの対象になり得る。 -\end{itemize} -実際に\TeX 内部ではパラグラフ単位でラインブレークの処理が行われ、 -それは{\it line\_break}というルーチン内で、 -ブレーク可能な箇所を捜し出し、それを{\it try\_break} -という関数に渡すことにより行われている。 -(勿論こんな単純なものではないが、基本的な操作としてこうした形になっている。 -詳しくは、\TeX: The Program PART38、39 Breaking paragraphs into lines. -を是非読んでみることをお勧めする。) -そこで、和文中の文字間もブレークポイントの候補として、 -{\it try\_break}に渡すよう変更した。 - -又、本来ならばラインブレークの処理は、次項の禁則処理と密接な関係があり -とても分けて考えられるものではない。 -しかしながら、\TeX では事実上完全に分けて考えても差し支えがないような -構造になっている。 -それは、ペナルティと呼ばれるブレーキングのための -一般的な評価値が導入されているためであり、 -ブレーキングルーチンではこの値を如何に評価するか -だけを考えれば良く、 -禁則処理ルーチンでは、この値を如何に設定するかだけを考えれば良い。 -% -\subsection{禁則処理} -% -\subsubsection{禁則処理でのペナルティの応用} -前のセクションでも簡単に触れたように、 -禁則処理も\TeX にとって全く新しい概念ではなく、 -ペナルティと言う形で導入されている。 -これは、上記のラインブレークやページブレーク処理時に、 -その箇所がブレークポイントとして、 -どの程度適切(負値のペナルティ)であるかあるいは -不適切(正値のペナルティ)であるかを示すための評価値である。 -したがって、ただ単にその箇所でのブレーキングを禁止するだけでは無く、 -強制的なブレーキングや、禁則文字が連続するような場合の -優先順位付けにも利用できる。 - -日本語の禁則処理にこのペナルティを応用するためには次のようにすればよい。 -\begin{list}{}{\setlength{\leftmargin}{2cm}} -\item[行頭禁則] 禁則文字の前に正のペナルティを付ける。 -\item[行末禁則] 禁則文字の後ろに正のペナルティを付ける。 -\end{list} -こうした形でペナルティを自動的に挿入さえできれば、 -後は既存の\TeX のルーチンをそのまま利用できるはずである。 -% -\subsubsection{禁則テーブル} -このペナルティを自動的に挿入するために、 -\TeX 内部に禁則文字とその文字に対応するペナルティ値と -ペナルティの挿入位置(その文字の前に挿入するか後に挿入するかの別) -のテーブルを持つことにした。 -そしてこのテーブルにこれらの情報を登録する手段として、 -{\bf\cs{pre\-break\-penalty}}と{\bf\cs{post\-break\-penalty}} -の2つのプリミティブを追加した。 -{\bf\cs{pre\-break\-penalty}}は -指定した文字の直前にペナルティを挿入することを、 -{\bf\cs{post\-break\-penalty}}は -指定した文字の直後にペナルティを挿入することを指定するもので、 -全角文字、半角文字の区別無しに指定できる。 -これらは、同一の文字に対して同時に両方のペナルティを挿入するようには -指定できない。 もし同一の文字に対して双方の指定がされた場合、 -後からのものに置き換えられる。 -勿論これらは``\{\}''による、グルーピング規則が適用される。 -又、双方で指定できる文字数は最大で256文字までである。 -この値は、全角文字、半角文字を合わせて禁則対象となると考えられる -文字数を、十分にカバーしていると思われる。 - -この禁則テーブルからの登録の削除は、 -ペナルティ値`0'を設定することによって行われるが、 -グローバルレベルでの設定でなければ、 -このテーブルの領域は解放されないことに注意して欲しい。 -なぜなら、ローカルレベルで領域を解放してしまえば、 -その外側のレベルに戻ったときに、そのレベルでの値を -最設定するための領域が確保されている保証がないからである。 - -このテーブルができれば、各文字を読み込む度に、 -その文字がこのテーブルに登録されているかどうかを調べ、 -登録されていればそのペナルティを文字の前後適切な位置に挿入して行けば良い。 -この禁則テーブルの検索にはハッシュ法を用いており、 -ハッシュ関数として -\label{`ハッシュ関数'} -\[\left\{ \begin{array}{cl} - (C2+(C2<<(C1-0x81)))\,mod 256 & 漢字コード\\ - & C1=上位バイト、C2=下位バイト\\ - \\ - C*2+1 & ASCIIコード - \end{array} -\right. \] -を用いている。 -これは、おそらく禁則の対象となるであろう、 -全角の記号、ひらがなカタカナの小文字、ASCIIコードの記号等 -を適当に散らばらせるように考えてある。 -又、このテーブルには最大256文字まで登録可能であるが、 -むやみに多くの文字を登録してテーブルを満たすことは、 -禁則文字検索のオーバーヘッドを大きくし、 -パフォーマンスに大きな影響を与えるので注意する必要がある。 - -こうしてペナルティを適切に挿入さえしてしまえば、 -後は\TeX のラインブレークルーチンに\. お\. ま\. か\. せしてしまえる。 -勿論、このテーブルにいかにペナルティを登録するかは、 -ユーザーの責任であると共に、ペナルティ値の変更により自由に -禁則処理に変化をつけることができる。 -% -\subsection{スペーシング} -{\noautospacing\noautoxspacing -これまでの変更で一通りの和文を出力することは可能である。 -ところがこれだけではまだ不十分で、 -このままでは決して\. 美\. し\. い出力は得られない。 -なぜなら、欧文では単語毎にスペースが挿入され、 -そこでのスペーシング量を調整することにより、 -ジャスティファイケーションの処理が行われていた。 -ところが、これまでの変更だけでは、 -和文に対してそのような調整を行う部分がほとんど無いのである。 -この状態がいったいどのようなものであるか -試しに、この段落を上記の{\it\cs{noautospacing\/}}と -{\it\cs{noautoxspacing\/}}によって、スペーシングの自動挿入を -しないで組んでみた。 -この操作にによって、この段落中にとられるスペースは -ピリオド、カンマの後のスペースのみである。\par} - -%\autospacing\autoxspacing -一目して解るように、行末に1文字以上の不揃いが出来てしっまている。 -これは、パラグラフ全体をダイナミックにブレーキングするといった、 -\TeX の長所が悪い方に働いてしまい、 -数行先の禁則処理の影響がそのまま反映されているのである。 -禁則ペナルティのパラメータの値の悪さも手伝ってか、 -悲惨な結果となってしまっている。 -% -\subsubsection{和文組版におけるスペーシング} -これに対して一般に行われている和文の組版では、 -行単位のみでのブレーキングが行われており、 -最悪の場合でもこのようなことは起こらないようである。 -また組み幅は、全角の正数倍にとられるため日本語のみの -行では必ず行末がきれいに揃う仕掛になっている。 -ただし、禁則が生じたり、途中に欧文が挿入されたりした場合は、 -やはりどこかで調整が必要になってくる。 -こうした調整は次のような箇所で行われているようである。 -\begin{itemize} -\item まずこうした調整に迫られた場合、追込みを考える。 - 追込みのために、カンマ、ピリオド、括弧等の文字を - 半角幅にまで縮めてみる。 -\item それでも調整しきれず、行中に欧文が存在する場合は、 - 欧文間、和文--欧文間のスペースを調整する。 -\item さらに調整が必要な場合は、かな文字間のスペースを - 調整する。 -\item これでもまだ駄目な場合、追い出しを試みる。 -\end{itemize} -説明が遅れてしまったが、和文--欧文間には見栄えを良くするために、 -4分開けと呼ばれる全角幅の$1/4$のスペースが挿入される。 -実際問題としては、禁則文字が連続でもしない限り、 -行中に2つ以上のカンマ、ピリオドの類の文字が存在すれば、 -最初の段階で調整は付いてしまう。 - -\subsubsection{\TeX でのスペーシング} -これを\TeX に応用することを考えてみる。 - -まず組み幅の問題であるが、\TeX の場合、何文字幅といった -指定も簡単に実現可能ではあるが、既存のマクロ等の利用を考えると -組み幅ばかりでなく、インデント等の組み幅に関係する全てのパラメータ -も同時に変更する必要があり、出来れば自由な組み幅の指定が出来た方が良い。 -そうなると、ピリオド、カンマ等の文字が一文字も表れないような行に対しても -組み幅を調整する手段が新たに必要となる。 -しかも、行中にそう何文字も表れないような文字に、 -こうした帳尻合わせを集中するのは、あまり\. 美\. し\. いことではない。 - -次に、和文--欧文間のスペース等は原稿中でいちいち気にしながら -挿入するのでは非常に面倒である。 こうした類のものは -折角コンピュータを使用しているのであるから、 -自動的に行ってほしい。 - -このような要求を満たすために次のような変更を加えることにした。 -\begin{enumerate} -\item 全角文字間にもグルーを自動的に挿入できるようにする。 - これによりピリオド、カンマ等の文字が表れない行でも - ジャスティファイケーションが行える。 - またカンマ等の持つスペースだけでなく、行全体で - その調整分を分割するため、より自然な組みが実現できる。 - 勿論、ここで行う調整は0.数ptといった極めて微量の調整である。 - さらにこのグルーの導入により、1歯詰めなどといった組み方も - 可能になる。 -\item 和文--欧文間のスペーシングは当然\TeX が自動的に行って - くれるものだと考え、そのまま導入した。 - ただし、全ての和文--欧文間(全角文字--半角文字間) - に挿入して良いわけではない。 - 例えば、半角のピリオド、カンマ、括弧類記号と - 全角文字間には余計なスペースは入れない方がよい。 -\item オリジナルの\TeX では、改行キャラクタを読み込むことにより - 単語の切れ目と判断し、スペースが挿入される。 - しかし、和文ではこうしたスペースを挿入されるのは - 不都合である。 そこで全角文字の後の改行は - ただ単に読み飛ばすだけの処理に変更する必要がある。 -\end{enumerate} - -1.の実現方法として、{\bf\cs{kanjiskip}}というグルーレジスタを -新たに設け、このグルーを全角文字間に挿入するようにした。 -ただし、実際に他のグルーと同じように処理したのでは、 -全角文字1文字に付き1グルー分のメモリを消費することになり、 -余りにもメモリ効率が悪くなる。 そこでこのグルーに関しては、 -ラインブレークや、ボックスへの組み込みルーチン({\it hpack}) -内での組み幅の計算だけで処理するようにしてある。 - -2.に関しては、\TeX が数式中で行っているように、必要な箇所に -実際にグルーを挿入する。 挿入するグルーは、 -1.と同じように{\bf\cs{xkanjiskip}}というレジスタを -設け、その値を使う。 -さらに、全角文字の前後に現れる半角文字の内の何れに対して、 -スペースを挿入すべきかを指定するために、 -内部に128文字分のテーブルを設け、そこに登録されている -内容によってスペース挿入の有無を決定している。 -現在デフォルトでアルファベットおよび数字がスペース挿入の -対象となっている。 このテーブルへの登録は、{\bf\cs{xspcode}}という -プリミティブによって行う。 -各ASCIIキャラクタに対して0を設定することにより、 -全角との間のスペースの挿入を禁止し、それ以外の値で許可するようになっている。 - -尚、1.2.に共通する処理として、これらのレジスタの値は、 -そのパラグラフ、あるいは{\it hbox}に入った時点での値を保持して -使用し、その中でどんなに変更を加えても処理には影響が及ばない -ようになっている。 -又、これらの処理は、{\bf\cs{auto\-spacing}}、{\bf\cs{no\-auto\-spacing}}、 -{\bf\cs{auto\-xspacing}}、{\bf\cs{no\-auto\-xspacing}}によって -ON、OFFできるようになっている。 - -3.は\TeX のスキャンニングルーチンを変更することで、 -スペーシングキャラクタとして、先のルーチンに渡って行かないようにした。 -% -\subsection{フォント} -フォントに関しても、できるだけ欧文のものと同じ扱いが出来るように -配慮した。 -\subsubsection{\TeX での日本語フォントの取り扱い} -ユーザインタフェースからみた日本語フォントの取り扱いは、 -{\it\cs{mathcode}}等の数式関係のフォントの定義中には -含めることができないことを除くとほとんど同じようにして扱える。 -異なる点は、半角文字と全角文字とを使い分ける度に -フォントの切り換えを行うのは非常に繁雑なので、 -カレントフォントとしてこれまでの半角文字用の他に -全角文字用も独立して持つようにしたことである。 -これによって特にフォントの変更を行う必要がなければ、 -全角、半角の区別を意識することなしに原稿を入力することが出来る。 -具体的には次のように指定すれば良い。 -\begin{quote} -\tt \cs{font}\cs{jfont}=min10\\ -\cs{jfont} -\end{quote} -これを見てわかるように、これまでと全く同じようにして指定できる。 -この時指定された\cs{jfont}が漢字フォントであれば、 -漢字用のカレントフォントを変更する。 -漢字フォントと英字フォントの判別は、TFMファイルにより行っている。 - -又、数式中でのフォントを指定する、ファミリーに付いても -同様に、全角用のカレントファミリーを拡張した。 -これにより、全角文字に対しても、上付き文字や下付き文字の取り扱いが -可能になる。 -勿論、半角、全角を意識する必要はない。 -ただ全角用カレントファミリーが半角用と異なる点は、 -半角用のカレントファミリーは、マスモードに -切り替わった時点で-1にセットされるのに対し、 -全角用のカレントファミリーは、そのままの値を保つことである。 -(マスモード中でのフォント切り換えのメカニズムに付いては、 -\TeX book p.154等を参照のこと。) -これは、数式関係のフォント定義を日本語フォントにまで -拡張していないための措置であるが、 -数式用フォントに関しては、全角文字に拡張してもほとんど -意味がないので、こうした形をとった。 -% -\subsection{TFMファイルとcharノード} -\TeX 内部では印字データをcharノードと呼ばれるノード中に -そのフォントの種類と共に格納する。 -又、\TeX システムには、TFMファイルと呼ばれるファイルがフォントの種類毎に -用意されており、 -そこに各フォント内に含まれるキャラクタの、各種サイズ等の情報が置かれている。 - -\TeX のラインブレーク等の処理は、このcharノード中のキャラクタデータから -TFMファイルの字幅情報等を検索して処理する仕組みになっている。 -したがって、\TeX を日本語化する際には、これらをどのように -拡張し、どのように対応付けるかがキーポイントとなる。 -% -\subsubsection{TFMファイルの拡張} -まずTFMファイルであるが、この中には{\it char\_info}と呼ばれる -そのフォント中に存在するキャラクタのコードと1対1に対応するテーブルが -置かれている。 -このテーブル中には{\it width\/、height\/、depth}等の他のテーブルへの -インデックスが設定されており、このインデックスを用いて -それぞれのパラメータを参照する仕組みになっている。 - -ただし、このインデックスのサイズから、 -1フォント内に含まれるキャラクタのサイズの種類が制限されてしまっている。 -しかし、漢字フォントは1フォント内の数は多いが、そのサイズは記号等を -除いてほとんど同じであり、この制約内に十分に収まると判断した。 -そこでこの{\it char\_info}とその他のテーブルの仕組みは、 -そのまま利用することにし、{\it char\_info}テーブルと漢字の2バイトコードを、 -対応付けるための方策を考えることにした。 - -その手段として漢字コードと{\it char\_info}へのインデックスを持つテーブルを -付け加えることにした。 -ところが、漢字フォントは1フォント中に約7000文字もの数があり、 -そのままテーブルに持つのは得策ではない。 -この解決策として、1フォント内のキャラクタの大部分が同じサイズを持つという -漢字の特徴から、デフォルトサイズを規定し、これと異なるものだけを、 -そのコードと{\it char\_info}へのインデックスの対という形で -テーブルを持つようにした。 -さらに、検索のオーバヘッドを軽減するために、 -テーブルを漢字コード順にソーティングした形で持つように規定した。 - -又、従来のTFMファイルと区別するためにサフィックスを``{\bf JFM}'' -と変更した。 -% -\subsubsection{charノードとJFMファイルの対応付け} -charノードは、上記したとおりそこにフォントとキャラクタコードを -持ち、さらに次のノードへのポインタを含んでいる。 -これを日本語のために拡張するためには、ノードサイズを変更するか、 -複数のノードによって1つのキャラクタを表現するかの2通りが -考えられる。 -処理の効率から考えると、前者の方がより良いのであるが、 -そのためには\TeX のメモリ管理ルーチンの大変更をしなければ -ならず、今回は断念した。 - -ここで採用した方法は、\TeX : The program にも簡単に書かれていたとおり、 -連続する2つのcharノードを使って日本語1文字を表すものである。 -具体的には、2つ目のノードにキャラクタコードを格納し、 -1つ目のノードには、フォントとTFMの{\it char\_info}への -インデックスを格納するようにしてある。 -つまり、charノードを生成する段階で、TFMファイルに拡張したテーブルから、 -{\it char\_info}へのインデックスを検索してしまうのである。 -こうすることにより、この1つ目のcharノードは、 -既存の欧文キャラクタのcharノードと全く同一に扱える。 -2つ目のノードは、最後にDVIファイルに出力する時や、 -エラーが生じた場合に必要になるだけで、 -一般の内部処理では読み飛ばしてやりさえすれば良い。 - -あるcharノードが日本語用のものであるかどうかは、 -charノード内のフォントを調べ、それが漢字フォントであるかどうかによって -判断する。 -この処理を簡単に能率良く行うために、 -フォントが漢字かどうかのテーブルを\TeX 内部に設けてある。 -% -\subsection{数式中での日本語の使用} -フォントの項でも簡単に触れたとおり、 -数式中においても日本語が扱えるように変更を行ってある。 -これは、数式中に直接日本語が含まれるような -使い方は希であるが、 -\ref{`ハッシュ関数'}中の式のように、 -簡単な説明等を付け加えたいことは良くあるからである。 -% -\newpage -\section{今後の予定} -現時点までの\TeX の日本語の状態を一通り表面的な部分のみで -あるが解説してみた。 -勿論、まだ不十分な点は多々あるが、 -実際にこの原稿を作ってみて、十分使用に耐えることは確信できた。 -特に\LaTeX がそのまま日本語で使用できることは、 -感激に価する。 -今のところ、\LaTeX のコマンドで使用できないものは無いようである。 - -今後の予定として次のようなことを考えている。 -\begin{itemize} -\item 自動的に挿入される、全角間および全角--半角間のスペースは、 - {\bf\cs{kanji\-skip}}、{\bf\cs{xkanji\-skip}}の値が必ず - 使われてしまうが、これはJFMファイル中に、デフォルト値を - 設定出来るようにして、フォントの変更と共に最適値を - 使用できるようにしたい。 -\item 全角の記号等は、全角幅固定ではなく、基本的にはその文字の持つ - 実際の幅で取り扱えなければ、行頭や行末におかれる場合、 - 行ぞろえが正確に行えず\. 美\. し\. く\. な\. い。 - こうした記号類は漢字フォントであっても、 - 独自の字幅情報を持つようにしたい。 -\item 全角文字に対しても、文字の組み合せによるカーニングを - 行うべきである。 特にひらがなカタカナの後に、ピリオド、 - カンマの類の文字が続いた場合の、 - スペースの空き方が不自然なことが場合があり、 - 調整できるようにする必要がある。 -\end{itemize} -% -%\appendix{TFMファイルの構造} -%\begin{tabular}{|cp{2in}|} \hline -%lf & lh \\ \hline -%bc & ec \\ \hline -%nw & nh \\ \hline -%nd & ni \\ \hline -%nl & nk \\ \hline -%ne & np \\ \hline -%\multicolumn{2}{|c|}{} \\ hline -\newpage -\appendix -\section{禁則ペナルティの設定例} -禁則ペナルティの設定例として、 -このテキスト制作時に使用した設定を上げておく。 - -\vspace{15pt} -{\tt\noindent -\begin{tabular}{lll} -%半角文字 -\cs{prebreakpenalty}`.=1000 & -\cs{prebreakpenalty}`,=1000 & -\cs{prebreakpenalty}`\}=1000 \\ -\cs{postbreakpenalt}y`\{=1000 & -\cs{prebreakpenalty}`)=1000 & -\cs{postbreakpenalty}`(=1000 \\ -\cs{prebreakpenalty}`]=1000 & -\cs{postbreakpenalty}`[=1000 & -\cs{postbreakpenalty}`!=500 \\ -\cs{postbreakpenalty}`\#=500 & -\cs{postbreakpenalty}`\$=500 & -\cs{postbreakpenalty}`\%=500 \\ -\cs{postbreakpenalty}`\&=500 & -\cs{postbreakpenalty}`\`=500 & -\cs{prebreakpenalty}`|=500 \\ -\cs{prebreakpenalty}`;=500 & -\cs{prebreakpenalty}`?=500 & -\cs{prebreakpenalty}`:=500 \\ -%全角文字 -\cs{prebreakpenalty}`、=1000 & -\cs{prebreakpenalty}`。=1000 & -\cs{prebreakpenalty}`,=1000 \\ -\cs{prebreakpenalty}`.=1000 & -\cs{prebreakpenalty}`・=1000 & -\cs{prebreakpenalty}`:=500 \\ -\cs{prebreakpenalty}`;=500 & -\cs{prebreakpenalty}`?=500 & -\cs{prebreakpenalty}`!=500 \\ -\cs{prebreakpenalty}`)=800 & -\cs{postbreakpenalty}`(=800 & -\cs{prebreakpenalty}`}=800 \\ -\cs{postbreakpenalty}`{=800 & -\cs{prebreakpenalty}`[=800 & -\cs{postbreakpenalty}`]=800 \\ -\cs{postbreakpenalty}`‘=1000 & -\cs{prebreakpenalty}`’=1000 & -\cs{prebreakpenalty}`ー=200 \\ -\cs{prebreakpenalty}`+=200 & -\cs{prebreakpenalty}`−=200 & -\cs{prebreakpenalty}`==200 \\ -\cs{postbreakpenalty}`#=200 & -\cs{postbreakpenalty}`$=200 & -\cs{postbreakpenalty}`%=200 \\ -\cs{postbreakpenalty}`&=200 & -\cs{prebreakpenalty}`ぁ=150 & -\cs{prebreakpenalty}`ぃ=150 \\ -\cs{prebreakpenalty}`ぅ=150 & -\cs{prebreakpenalty}`ぇ=150 & -\cs{prebreakpenalty}`ぉ=150 \\ -\cs{prebreakpenalty}`っ=150 & -\cs{prebreakpenalty}`ゃ=150 & -\cs{prebreakpenalty}`ゅ=150 \\ -\cs{prebreakpenalty}`ょ=150 & -\cs{prebreakpenalty}`ァ=150 & -\cs{prebreakpenalty}`ィ=150 \\ -\cs{prebreakpenalty}`ゥ=150 & -\cs{prebreakpenalty}`ェ=150 & -\cs{prebreakpenalty}`ォ=150 \\ -\cs{prebreakpenalty}`ッ=150 & -\cs{prebreakpenalty}`ャ=150 & -\cs{prebreakpenalty}`ュ=150 \\ -\cs{prebreakpenalty}`ョ=150 \\ -\end{tabular} -\begin{tabular}{ll} -\cs{prebreakpenalty}\cs{jis}"212B=1000 & -\cs{prebreakpenalty}\cs{jis}"212C=1000 \\ -\cs{prebreakpenalty}\cs{jis}"212D=1000 & -\cs{postbreakpenalty}\cs{jis}"212E=1000 \\ -\cs{prebreakpenalty}\cs{jis}"2139=250 & -\cs{prebreakpenalty}\cs{jis}"2144=250 \\ -\cs{prebreakpenalty}\cs{jis}"2145=250 & -\cs{postbreakpenalty}\cs{jis}"2146=1000 \\ -\cs{prebreakpenalty}\cs{jis}"2147=1000 & -\cs{postbreakpenalty}\cs{jis}"2148=1000 \\ -\cs{prebreakpenalty}\cs{jis}"2149=1000 & -\cs{postbreakpenalty}\cs{jis}"214C=800 \\ -\cs{prebreakpenalty}\cs{jis}"214D=800 & -\cs{postbreakpenalty}\cs{jis}"2152=800 \\ -\cs{prebreakpenalty}\cs{jis}"2153=800 & -\cs{postbreakpenalty}\cs{jis}"2154=800 \\ -\cs{prebreakpenalty}\cs{jis}"2155=800 & -\cs{postbreakpenalty}\cs{jis}"2156=800 \\ -\cs{prebreakpenalty}\cs{jis}"2157=800 & -\cs{postbreakpenalty}\cs{jis}"2158=800 \\ -\cs{prebreakpenalty}\cs{jis}"2159=800 & -\cs{postbreakpenalty}\cs{jis}"215A=800 \\ -\cs{prebreakpenalty}\cs{jis}"215B=800 & -\cs{prebreakpenalty}\cs{jis}"246E=150 \\ -\cs{prebreakpenalty}\cs{jis}"256E=150 & -\cs{prebreakpenalty}\cs{jis}"2575=150 \\ -\cs{prebreakpenalty}\cs{jis}"2576=150 \\ -\end{tabular}} - -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.pdf b/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.pdf deleted file mode 100644 index b44ec169d50..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.tex b/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.tex deleted file mode 100644 index 2512c5652ba..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/jtexdoc_asciimw.tex +++ /dev/null @@ -1,403 +0,0 @@ -\def\cs#1{$\backslash$\kern0pt#1} -\def\angle#1{$\langle$\kern0pt#1\kern0pt$\rangle$} -\documentstyle{jarticle} -\begin{document} -\title{日本語\TeX} -\author{倉沢 良一\\ASCII Corporation} -\date{昭和62年8月 \\ 昭和62年12月 \\ 平成元年10月} -\maketitle -\begin{abstract} -これは、日本語\TeX の使い方の注意点と、 -\TeX の日本語化にともない変更あるいは追加された機能について -解説したドキュメントです。 -基本的な\TeX の使い方については、\TeX bookや -\LaTeX: A document Preparation System. をご覧ください。 -\end{abstract} - -\section{日本語\TeX の概要} -日本語\TeX は、オリジナルの\TeX と完全なアッパーコンパチブルを保っています。 -ですから、これまで欧文で作られたファイルはそのまま日本語\TeX に -かけられるはずです。 -現在のバージョンで扱える漢字コードは、シフトJISおよびEUCです。 -ただし、これらはソースファイルにパッチをあてて、makeし直さなければなりません。 - -日本語(2バイトコードキャラクタ)のハンドリングに関しては、 -でき得る限り英字(1バイトコードキャラクタ)と同じように取り扱える -ようにしてあります。 -したがって、特殊な使い方をしない限り英字と同じようにして、 -原稿ファイルを作成していくことができます。 - -しかも、カレントフォントとして英字と漢字とを別々に持っているため、 -英字と漢字の切り換えは特に気にする必要はなく、 -そのまま混在して使うことができます。 - -和文と欧文の処理の違いとしてラインブレークのタイミングと -それに関係する禁則処理、さらに和文欧文が混在した場合のスペーシング -の処理などがあります。 -日本語\TeX では、これらの処理を自動的に行っていますが、 -柔軟性を高めるために、こうした処理に関係するパラメータを自由に再設定 -できるようになっています。 - -フォントに関しては、1フォントでJISコードの第1水準、第2水準全てを -扱えるように拡張してありますから、英字フォントと同じように漢字フォントを扱え、 -JFM(TFM)ファイルをつくることにより、自由に使用可能なフォントを増やして -いくことができます。 - -DVIファイルは、SET2 および PUT2 を使って2バイトコードを出力しているため、 -これまでのものとの互換性は保たれています。 -またDVIファイルには、JISコードを用いて出力しています。 - -\section{原稿を書く上での注意点} -基本的には、欧文と和文は全く同じようにして扱えます。 -ただし、日本語特有の処理機能を持たせているため、 -原稿を書くうえでは次のことに注意してください。 -\begin{itemize} -\item コントロールシーケンスにも2バイトコードキャラクタ - が使えるようになっています。 - したがって、コントロールシーケンスに続けて2バイトコードの - 文字を書き並べる場合は、必ず半角スペースやタブ等で間を区切ってください。 -\item 欧文の場合、改行は単語間のスペースとして取り扱われますが、 - 日本語の場合、原稿内では自由な箇所で改行が行えたほうが便利です。\\ - そこで日本語\TeX では、1行の終わりが1バイトコードの場合はスペーサー - の挿入を行い、2バイトコードの場合は何も行わないようになっています。 -\item 2バイトコードキャラクタと1バイトコードキャラクタが - 連続する場合、自動的に\cs{xkanjiskip}に設定されてているグルーを - 挿入します。ただしこの処理は、どの1バイトコードキャラクタとの - 間で行うか\cs{xspcode}によって指定でき、デフォルトではa--z, - A--Z, 0--9との間で行われるように設定されています。 - この処理を特定の箇所で禁止したい場合は、 - そこに\cs{kern0pt}、\cs{hskip0pt}などを挿入してください。 -\item 禁則処理は、禁則の対象となるキャラクタの前方あるいは - 後方にペナルティーを自動的に挿入することで実現しています。 - このペナルティーの設定は\cs{prebreakpenalty}、\cs{postbreakpenalty} - によって行います。デフォルト値は、kinsoku.texに記述されています。 -\item 現在、jtex、jlatexで扱えるフォントは明朝体とゴシック体です。 - これらのフォントの指定は、 - jtex, jlatexともに、\cs{mc}、\cs{gt}で行えます。 - これら以外のフォントは、英字フォントと同じように、 - 対象のフォントにあわせてJFM(TFM)を作れば使用できます。 -\item フォントの切り換えは、英字と漢字は独立して行われます。 - jlatexでは、\cs{large},\cs{small}などサイズ変更の - コントロールシーケンスによって、 - 連動してフォントをチェンジするようにしていますが、 - jtexではそのような操作は一切行っていませんので注意してください。 - ただし、指定したフォントが印字されるためには、それらの字体、サイズの - フォントがそろっていなければ行えません。 - jlatexでは、次のフォントが存在するものと仮定しています。 - \begin{quote} - min5, min6, min7, min8, min9, min10, - min10 magstephalf, min10 magstep1, - min10 magstep2, min10 magstep3, - min10 magstep4, min10 magstep5, \\ - goth5, goth6, goth7, goth8, goth9, goth10, - goth10 magstephalf, goth10 magstep1, - goth10 magstep2, goth10 magstep3, - goth10 magstep4, goth10 magstep5 - \end{quote} - これらが、きちんと印字されるかどうかはプリンタドライバの責任です。 - また、これらのフォントにはカーニング・パラメータが設定されています。 - カーニングを行いたくない場合は、上記のフォントの代りに以下のものを - 使用してください。こちらのフォントは、カーニングのパラメータが設定 - されていないことを除いて上記のものと全く同じものです。 - \begin{quote} - nmin5, nmin6, nmin7, nmin8, nmin9, nmin10, - nmin10 magstephalf, nmin10 magstep1, - nmin10 magstep2, nmin10 magstep3, - nmin10 magstep4, nmin10 magstep5, \\ - ngoth5, ngoth6, ngoth7, ngoth8, ngoth9, ngoth10, - ngoth10 magstephalf, ngoth10 magstep1, - ngoth10 magstep2, ngoth10 magstep3, - ngoth10 magstep4, ngoth10 magstep5 - \end{quote} -\item 現在のバージョンでは、全角スペースはほかの漢字キャラクタと同じように - 扱われます。 - 半角スペースのような特別の処理は行っていませんので注意してください。 -\item コントロールシーケンス名にも全角文字を使用することができますが - 次の点に注意してください。 - \begin{enumerate} - \item 全角の1区、2区、7区に含まれる文字は、カテゴリーコードの - 12つまり `Other\_character' と同様の扱いになります。 - したがって、これらの文字は ``エスケープ文字$+$1文字'' の - コントロールシーケンスとしてのみ扱えます。 - \item そのほかの文字に付いては、カテゴリーコードの11(letter)と - 同様に扱われます。 - また、これらの文字は半角文字と混在して使用することが - できます。 - \end{enumerate} -\item 半角カナは使えません。原稿内に半角カナのコードが入らないようにし - てください。 -\end{itemize} - -\section{追加されたプリミティブ} - -日本語\TeX にはつぎのプリミティブが追加されています。 -\begin{itemize} -\item \cs{{\bf kanjiskip}} - \begin{quote} - \cs{kanjiskip}$=$\angle{dimen} - \end{quote} - 連続する2バイトコード間に自動的に挿入するグルーの値を - 格納するレジスタです。 - ただし、この処理は\cs{autospacing}、\cs{noautospacing}によって - 行うか行わないかの指定ができます。\\ - このレジスタの値は、パラグラフの終わりまたは\cs{hbox}の最後の - 時点で取り込まれ、処理されます。 - したがって、同一パラグラフ内、あるいは\cs{hbox}内で何度か値を - 変化させたとしても、最後に設定された値によって全て処理されます。 - - \noindent - 使用例\\ - {\tt\cs{kanjiskip}$=$10pt plus 1pt minus 1pt}\\ - {\kanjiskip=10pt plus 1pt minus 1pt - とするとこうなります。\par} -\item \cs{{\bf xkanjiskip}} - \begin{quote} - \cs{xkanjiskip}$=$\angle{dimen} - \end{quote} - 連続する2バイトコードと\cs{xspcode}で指定された1バイトコードの間に - 自動的に挿入するグルーの値を格納するレジスタです。 - ただし、この処理は\cs{autoxspacing}、\cs{noautoxspacing}によって - 行うか行わないかの指定ができます。\\ - \cs{kanjiskip}と同様のタイミングで取り込まれ処理されます。 - - \noindent - 使用例\\ - {\tt\cs{xkanjiskip}$=$10pt plus 1pt minus 1pt}\\ - {\xkanjiskip=10pt plus 1pt minus 1pt - とするとalphabetやnumberとの間に挿入されるグルーが - 10pt plus 1pt minus 1ptになります。\par} -\item \cs{{\bf sjis}} - \begin{quote} - \cs{sjis}\angle{16--bit number} - \end{quote} - シフトJISコードから内部コードへの変換を行います。 - - \noindent - 使用例\\ - {\tt\cs{char}\cs{sjis}"889F}\\ - とすれば、`\char\sjis"889F' となります。 -\item \cs{{\bf jis}} - \begin{quote} - \cs{jis}\angle{16--bit number} - \end{quote} - JISコードから内部コードへの変換を行います。 - - \noindent - 使用例\\ - {\tt\cs{char}\cs{jis}"3022}\\ - とすれば、`\char\jis"3022' となります。 -\item \cs{{\bf kuten}} - \begin{quote} - \cs{kuten}\angle{16--bit number} - \end{quote} - 区点コードから内部コードへの変換を行います。 - 16進4桁の上2桁が区を下2桁が点であると解釈します。 - - \noindent - 使用例\\ - {\tt\cs{char}\cs{kuten}"1003}\\ - とすれば、`\char\kuten"1003' となります。 -\item \cs{{\bf xspcode}} - \begin{quote} - \cs{xspcode}\angle{8--bit number}$=$\angle{$0|1|2|3$} - \end{quote} - 2バイトコードと1バイトコードの間に自動的にスペースが挿入されますが、 - このプリミティブによってどの1バイトコードとの間でこの処理を行うか - どうかを指定できます。この指定は0--3のいずれかを選択することにより - 次のような動作を選択できます。 - \begin{itemize} - \item 0を設定することによりこの1バイトコード文字と2バイトコード文字 - の間での処理を禁止します。 - \item 1を設定することでこの文字と直前の2バイトコード文字との間にのみ - スペースを挿入することを許可します。 - \item 2を設定することにより直後の2バイトコード文字との間にのみ - スペースを挿入することを許可します。 - \item 3を設定することで前後の2バイトコード文字との間でのスペースの - 挿入を許可します。 - \end{itemize} - - \noindent - 使用例\\ - {\tt\cs{xspcode}`1=0\\ - \cs{xspcode}`2=3\\ - \cs{xspcode}`;=2}\\ - とすることにより、`1' に対する処理を禁止し、 - `2' に対して前後の処理を許可します。 - また、`;' に対しては直後へのスペースの挿入を許可します。 -\item \cs{{\bf inhibitxspcode}} - 指定した2バイトコードとそれに前後する1バイトコードの間に - 自動的に挿入されるスペースを抑制します。 - この指定は0--3のいずれかを選択することにより - 次のような動作を選択できます。 - \begin{itemize} - \item 0を設定することによりこの2バイトコード文字と1バイトコード文字 - の間での処理を禁止します。 - \item 1を設定することでこの文字と直前の1バイトコード文字との間に - スペースを挿入することを禁止します。 - \item 2を設定することにより直後の1バイトコード文字との間に - スペースを挿入することを禁止します。 - \item 3を設定することで前後の1バイトコード文字との間でのスペースの - 挿入を許可します。 - \end{itemize} - このプリミティブは、日本語\TeX のバージョン1.4で追加しました。 - - \noindent - 使用例\\ - {\tt\cs{inhibitxspcode}`?=0\\ - \cs{inhibitxspcode}`(=2\\ - \cs{inhibitxspcode}`)=1} -\item \cs{{\bf jcharwidowpenalty}} - \begin{quote} - \cs{jcharwidowpenalty}$=$\angle{number} - \end{quote} - パラグラフの最後の全角文字が、孤立して改行されるのを防ぐための - ペナルティです。またパラグラフの最後が1文字以上の1区、2区、7区 - に含まれる文字の場合は、その直前にある全角文字に対してこの - ペナルティが使われます。 -\item \cs{{\bf autospacing}} - \begin{quote} - \cs{autospacing} - \end{quote} - このプリミティブによって2バイトコード間へのグルーの自動挿入を許可 - します。 -\item \cs{{\bf noautospacing}} - \begin{quote} - \cs{noautospacing} - \end{quote} - このプリミティブによって2バイトコード間へのグルーの自動挿入を禁止 - します。 -\item \cs{{\bf autoxspacing}} - \begin{quote} - \cs{autoxspacing} - \end{quote} - このプリミティブによって2バイトコードと1バイトコード間へのグルーの - 自動挿入を許可します。 -\item \cs{{\bf noautoxspacing}} - \begin{quote} - \cs{noautoxspacing} - \end{quote} - このプリミティブによって2バイトコードと1バイトコード間へのグルーの - 自動挿入を禁止します。 -\item \cs{{\bf prebreakpenalty}} - \begin{quote} - \cs{prebreakpenalty}\angle{16--bit number}$=$\angle{number} - \end{quote} - 指定する文字の前方に挿入するペナルティ値を設定します。 - この指定は、行頭禁則の指定にあたります。 - - \noindent - 使用例\\ - {\tt\cs{prebreakpenalty}`あ$=$1000}\\ - とすることにより、`あ' の前方に1000のペナルティ値が付けられます。 -\item \cs{{\bf postbreakpenalty}} - \begin{quote} - \cs{postbreakpenalty}\angle{16--bit number}$=$\angle{number} - \end{quote} - 指定する文字の後方に挿入するペナルティ値を設定します。 - この指定は、行末禁則の指定にあたります。\\ - ただし、\cs{prebreakpenalty}と\cs{postbreakpenalty}を同一の - 文字に対して同時に設定することはできません。 - 同一の文字に対して両方の指定を行った場合、後からの設定が有効になります。 -\item \cs{{\bf jfont}} \\ - 基本的な動作は、``\cs{font}'' と同じです。 - ただし、`\cs{showthe}' などのプリミティブと組み合せた場合に - カレントの漢字フォントを返します。 - フォントの定義は、\cs{font}, \cs{jfont}のどちらを使っても - 英字フォント、漢字フォントの定義が行えます。 -\item \cs{{\bf jfam}} \\ - `\cs{jfont}' と同様に ``\cs{fam}'' とほとんど同じ動作をします。 - `\cs{showthe}' などとの組み合せることで、カレントの漢字フォント - ファミリーを返します。 - ただしこのプリミティブでは、英字フォントのファミリーを - 漢字ファミリーとして定義できてしまいますので注意してください。 -\item {{\bf zw, zh}} \\ - プリミティブとは異なりますが、{\bf em, ex}と同じように - zw、zhは、それぞれカレントの2バイトコードフォントの幅(全角幅) - および高さの単位記号です。 - - \noindent - 使用例\\ - {\tt\cs{baselineskip}$=$1.5zh\\ - \cs{hsize}=20zw}\\ - でカレントフォントの高さの1.5倍の値が\cs{baselineskip}に代入され、 - \cs{hsize}が全角20文字分に設定されます。 -\end{itemize} - -\subsection{自動挿入されるスペースについて} -\cs{kanjiskip}や\cs{xkanjiskip}の自動挿入は、単純に連続する文字列ばかりでなく -shift\_amountが0である\cs{hbox}内の文字との前後関係においても行われます。 -これは、\cs{hbox}が入子状になっている場合でも同じです。 -つまり、その\cs{hbox}内に現れる最初の文字と最後の文字とが、 -boxの前後の文字に連続する文字列として解釈され、 -そこに指定されたスペースが挿入されることになります。 -\cs{vbox}はその対象とはなりません。具体的には以下の例を参考にしてください。 - -\begin{tabular}{l@{ $\longrightarrow$ }c} -\verb|あ\hbox{A}い| & あ\hbox{A}い \\ -\verb|あ\hbox{\hbox{A}}い| & あ\hbox{\hbox{A}}い \\ -\verb|あ\hbox{\hbox{\hbox{A}}}い| & あ\hbox{\hbox{\hbox{A}}}い \\ -\verb|あ\hbox{\hbox{\hbox{\hbox{A}}}}い| & あ\hbox{\hbox{\hbox{\hbox{A}}}}い \\ -\verb|あ\hbox{A\hbox{\vbox{\hbox{A}}}B}い| & - あ\hbox{A\hbox{\vbox{\hbox{A}}}B}い \\ -\verb|あ\hbox{\hbox{\vbox{\hbox{A}}}B}い| & - あ\hbox{\hbox{\vbox{\hbox{A}}}B}い \\ -\verb|あ\hbox{A\hbox{\vbox{\hbox{A}}}}い| & - あ\hbox{A\hbox{\vbox{\hbox{A}}}}い \\ -\verb|あfiい| & あfiい \\ -\verb|あ\hbox{\hbox{\vbox{\hbox{A}}}}い| & - あ\hbox{\hbox{\vbox{\hbox{A}}}}い \\ -\verb|あ\hbox{\vbox{\hbox{\hbox{A}}}}い| & - あ\hbox{\vbox{\hbox{\hbox{A}}}}い \\ -\verb|あ\vbox{\hbox{\hbox{\hbox{A}}}}い| & - あ\vbox{\hbox{\hbox{\hbox{A}}}}い \\ -\verb|A\hbox{あ}A| & A\hbox{あ}A \\ -\verb|A\hbox{\hbox{あ}}A| & A\hbox{\hbox{あ}}A \\ -\verb|A\hbox{\hbox{\hbox{あ}}}A| & A\hbox{\hbox{\hbox{あ}}}A \\ -\verb|A\hbox{\hbox{\hbox{\hbox{あ}}}}A| & A\hbox{\hbox{\hbox{\hbox{あ}}}}A \\ -\verb|A\hbox{あ\hbox{\vbox{\hbox{あ}}}あ}A| & - A\hbox{あ\hbox{\vbox{\hbox{あ}}}あ}A \\ -\verb|A\hbox{\hbox{\vbox{\hbox{あ}}}あ}A| & - A\hbox{\hbox{\vbox{\hbox{あ}}}あ}A \\ -\verb|A\hbox{あ\hbox{\vbox{\hbox{あ}}}}A| & - A\hbox{あ\hbox{\vbox{\hbox{あ}}}}A \\ -\verb|A\hbox{\hbox{\vbox{\hbox{あ}}}}A| & - A\hbox{\hbox{\vbox{\hbox{あ}}}}A \\ -\verb|A\hbox{\vbox{\hbox{\hbox{あ}}}}A| & - A\hbox{\vbox{\hbox{\hbox{あ}}}}A \\ -\verb|A\vbox{\hbox{\hbox{\hbox{あ}}}}A| & - A\vbox{\hbox{\hbox{\hbox{あ}}}}A \\ -\end{tabular} - -\section{日本語化されていないプリミティブ} -次のプリミティブについては、日本語化(2バイトコードに対応)されていません。 - -\begin{itemize} -\item \cs{catcode}, \cs{sfcode}, \cs{mathcode}, \cs{delcode}, - \cs{mathchardef}は、 - 2バイトコードに対してそれぞれの定義を行うことはできません。 -\item \cs{lccode}, \cs{uccode}は、2バイトコードをそのままとおし、 - ローワケース、アッパーケースの変更は行いません。 -\end{itemize} - - -\section{問題点} -現在のバージョンの日本語\TeX には、次のような問題点があります。 -使用の際には注意してください。 - -\begin{itemize} -\item 禁則処理および1バイトコードと2バイトコード間に挿入するグルーは、 - その処理の対象となる文字を単に文字コードでのみ判断しています。 - これは、2バイトコードの文字に対しては全く問題ないのですが、 - 1バイトコードの文字で問題が生じます。 - それは、\TeX の文字がコードと一対一に対応していないためで、 - フォントにより、特定のコードに割り付けられている文字が - 変ってしまいます。 - たとえば、`\{' はフォントcmsyの66$_{16}$に対応付けられています。 - 66$_{16}$は、アスキーコードで `f' を示すわけですから禁則の対象文字 - とはなっていないはずです。 - - したがって、今のままでは `\{' のような文字に対して自動的に禁則処理や - グルーの自動挿入を行うことは不可能です。 -\end{itemize} -%% cmsy の \{ は 0x6E でなく 0x66 (2001/08/24) -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.pdf b/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.pdf deleted file mode 100644 index ab1dc9ab54e..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.tex b/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.tex deleted file mode 100644 index 1aabe60ad2b..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/ptexdoc_asciimw.tex +++ /dev/null @@ -1,924 +0,0 @@ -\documentstyle{jarticle} - -\西暦 - -\title{\TeX の出版への応用\\ - \large--- 縦組み機能の組み込み ---} -\author{濱野 尚人\thanks{(株)\kern-2pt アスキー % - 出版局 電子編集研究統轄部 出版技術部} - \and 田村 明史${}^*$ - \and 倉沢 良一\thanks{(株)\kern-2pt アスキー % - システムソフトウェア事業部 技術統轄部 オフィスシステム技術部}} -\date{\ } - -\setlength{\unitlength}{0.1in} - -\def\angle#1{$\langle{}$#1${}\rangle$} -\def\pTeX{p\kern-.2em\TeX} - -\begin{document} - -\maketitle \thispagestyle{empty} - -\begin{abstract} -日本語\TeX を出版分野で本格的に応用するため, 縦組み機能を追加した. -拡張された\TeX は以下のような特長を持つ. -\begin{itemize} -\item 同一文書, 同一ページに縦/横組みの混在ができ, - 縦組み中でも和/欧文/数式の混在が可能である. -\item 英語版のオリジナル\TeX や(横組み)日本語\TeX と互換性があり, - 従来の\TeX の文書やマクロをそのまま処理することができる. -\item 縦組みを使用すると, 拡張フォーマットの{\tt DVI}ファイルを出力する. - ただし, 横組みのみ使用している場合は, - 従来のフォーマットの{\tt DVI}ファイルを出力する. -\end{itemize} -本論文ではその設計と実現方法について説明する. -\end{abstract} - -% \tableofcontents - - -\section{はじめに} - -\TeX はスタンフォード大学のクヌース教授によって開発された組版システムであり, -組版の美しさと強力なマクロ機能を特徴としている. -日本語化され\cite{jtex}, 高品位の写植出力を得ることができるようになり, -わが国でも\TeX によって組版された書籍が出版されるようになってきた. - -ところが, 従来の日本語\TeX は英語向けのシステムをベースとしているため, -縦組み, ルビなどの日本語特有の機能がない. -\TeX を一般書籍の出版に使用するためするには, これらの機能を持った -「本格的出版に耐え得る日本語\TeX\kern0pt 」が必要であろうと判断し, -日本語\TeX の改造に取り組むことにした. -この機能拡張された\TeX を\pTeX (\kern0pt publishing \TeX\kern0pt )と -呼ぶことにする. -まず, 機能拡張第一弾として(株)\kern-3pt アスキーで開発された -日本語\TeX に縦組み機能を追加した. - -本論文ではその設計と実現方法について報告する. -次章から\ref{output}章までで\pTeX の縦組み機能についての基本的な概念を説明し, -\ref{imple}章で具体的な実現方法を説明する. - - -\section{ディレクション} \label{direction} - -文書を組版すると, いくつかの`ページ'の集合となる. -`ページ'は`行'を``行送り方向''に並べたものであり, -`行'は`文字'を``字送り方向''に並べたものである. - -従来の\TeX では, ページはverticalボックス, 行はhorizontalボックスであり, -``行送り方向'', ``字送り方向''は横組み用に固定されていた. -\pTeX では, \TeX の状態として``組み方向''(ディレクション)を考え, -ディレクションによって`行送り方向', `字送り方向'を変えることにした. -縦組みは, 横組みの``行送り方向'', ``字送り方向''を, -右に$90^\circ$回転させたものと同じになる. -\begin{quote} \begin{description} -\item[横組み] 字送り方向: 水平右向き, 行送り方向: 垂直下向き -\item[縦組み] 字送り方向: 垂直下向き, 行送り方向: 水平左向き -\end{description} \end{quote} - -また, 縦組み中で使われた場合と横組み中で使われた場合で -動作が変わるようなマクロが書けるように, -\verb|\iftdir|, \verb|\ifydir|というマクロも用意した. - -% \TeX の用語やプリミティブには上下左右を連想させる単語が多く使われているが, -% これらの上下左右は座標系に依存するものである. -% \TeX のプリミティブには\begin{quote} -% \verb|\belowdisplayshortskip|, \verb|\belowdisplayskip|, -% \verb|\lower|,\\ -% \verb|\abovedisplayshortskip|, \verb|\abovedisplayskip|, -% \verb|\raise|,\\ -% \verb|\rightskip|, \verb|\moveright|,\\ -% \verb|\leftskip|, \verb|\moveleft| -% \end{quote}のようなものもある. -% これらの, below, lowerは行送り方向, above, raiseは行送りの逆方向, -% rightは字送り方向, leftは字送りの逆方向を意味しているものとして, -% 縦組みでもそのまま使用する. - - -\section{ボックス} - -オリジナルの\TeX では, 文字を並べて``行''のボックスを作るモードをhモードと言い, -できたボックスをhボックスと呼ぶ. -これは\TeX がアメリカで開発されたシステムであり, -英語では文字が水平(\kern0pt horizontal\kern0pt )に並ぶからである. -ディレクションが横の場合はそのままで問題ない. -ディレクションが縦の場合, 行の中で文字は垂直に並ぶのだが, -やはり, 文字を並べて行のボックスを作るモードをhモードと言い, -できたボックスをhボックスと呼ぶことにした. -横組みと縦組みの両方で使えるマクロを作りやすいように, -`横組みの行のボックス'と`縦組みの行のボックス'は同じ名前の方が良く, -`横組みの行のボックス'は従来のhボックスと同じものだから, -互換性を考慮してそのようにした. - -同様に, ボックスを行送り方向に並べるモードをvモード, -それらを集めて作られたボックスをvボックスと呼ぶことにした. -横ディレクションのvモードではボックスは縦(\kern0pt vertical\kern0pt )に並ぶが, -縦ディレクションのvモードではボックスが水平に右から左へ並ぶことになる. - -\TeX を起動した直後は横ディレクションのvモードであり, -ディレクションを変えなければ従来の\TeX と互換性がある. -つまり, ここで文字を入力すると横ディレクションのhモードに移行し, -文字を左から右に並べていく. -ラインブレークによって作られたhボックスは, -横ディレクションのvモードで上から下に並べていく. - -\TeX のディレクションを変更するプリミティブとして, -\verb|\yoko|, \verb|\tate|を用意した. -ディレクションの変更は, -作成中のリストやボックスに何も入力されていない状態でのみ許すことにした. -\TeX を起動して何も入力されていない状態で\verb|\tate|プリミティブを実行すると, -縦ディレクションのvモードになる. -ここで文字を入力すると縦ディレクションのhモードに移行し -文字を上から下に並べていく. -ラインブレークによって作られたhボックスは, -縦ディレクションのvモードで右から左に並べていく. - -ボックスの大きさ(ベースラインの位置)を表す用語として, -\TeX ではWidth, Depth, Heightという言葉を使っている. -\pTeX では, -これらの言葉を, ボックスの字送り方向の大きさ(\kern0pt Width\kern0pt ), -行送り方向側の大きさ(\kern0pt Depth\kern0pt ), -行送り方向の反対側の大きさ(\kern0pt Height\kern0pt )であると定義した. -よって, 縦ディレクション中のボックスでは, ボックスの高さを$W$といい, -左側の幅を$D$といい, 右側の幅を$H$という. -\begin{quote} \begin{picture}(50,24)(0,4) - \put(4,26){\makebox(24,0)[b]{横ディレクション中のボックス}} - \put(4,24){\begin{picture}(0,0)(0,0) - \thicklines - \put(0,0){\vector(1,0){6}} - \put(0,0.5){\makebox(6,0)[b]{\small 字送り方向}} - \put(0,0){\vector(0,-11){6}} - \put(0,-6){\makebox(0,0)[t]{\small 行送り方向}} - \end{picture}} - \put(6,6){\begin{picture}(0,0)(0,0) - \thicklines - \put(6,0){\framebox(12,10){}} \put(6,4){\line(1,0){12}} - - \thinlines - \put(0,4){\line(1,0){5}} \put(19,4){\line(1,0){5}} - \put(3,0){\line(1,0){2}} \put(3,10){\line(1,0){2}} - \put(6,11){\line(0,1){2}} \put(18,11){\line(0,1){2}} - - \put(4,0){\vector(0,1){4}} \put(4,0){\vector(0,-1){0}} - \put(3.5,0){\makebox(0,4)[r]{$D$}} - \put(4,10){\vector(0,-1){6}} \put(4,10){\vector(0,1){0}} - \put(3.5,4){\makebox(0,6)[r]{$H$}} - \put(6,12){\vector(1,0){12}} \put(6,12){\vector(-1,0){0}} - \put(6,12.5){\makebox(12,0)[b]{$W$}} - \end{picture}} - \put(35,26){\makebox(18,0)[b]{縦ディレクション中のボックス}} - \put(53,24){\begin{picture}(0,0)(0,0) - \thicklines - \put(0,0){\vector(-1,0){6}} - \put(-6,0.5){\makebox(6,0)[b]{\small 行送り方向}} - \put(0,0){\vector(0,-11){6}} - \put(0,-6){\makebox(0,0)[t]{\small 字送り方向}} - \end{picture}} - \put(35,0){\begin{picture}(0,0)(0,0) - \thicklines - \put(0,6){\framebox(10,12){}} \put(4,6){\line(0,1){12}} - - \thinlines - \put(4,19){\line(0,1){5}} \put(4,0){\line(0,1){5}} - \put(0,19){\line(0,1){2}} \put(10,19){\line(0,1){2}} - \put(11,6){\line(1,0){2}} \put(11,18){\line(1,0){2}} - - \put(12,6){\vector(0,1){12}} \put(12,6){\vector(0,-1){0}} - \put(12.5,6){\makebox(0,12)[l]{$W$}} - - \put(4,20){\vector(-1,0){4}} \put(4,20){\vector(1,0){0}} - \put(0,20.5){\makebox(4,0)[b]{$D$}} - \put(4,20){\vector(1,0){6}} \put(4,20){\vector(-1,0){0}} - \put(4,20.5){\makebox(6,0)[b]{$H$}} - \end{picture}} -\end{picture} \end{quote} - -\subsection{異ディレクションのボックス} - -一つの文書, 一枚のページであっても部分によって組み方向を変えられるように, -組み方向の混在を許すことにした. -たとえば, 表の中で項目によって縦組み/横組みを使い分けることが可能になれば -表現力が増すことになる. -また, 縦組み中で数桁の数を表現するとき, -アラビア数字を横組みにして縦組み中に挿入することがある. -これを出版業界では連数字と言うが, これも組み方向の混在機能で実現できる. - -組み方向の混在を許すということは, 一つの文書に, -内部の文字が横に並ぶ横組みのhボックスと, -縦に並ぶ縦組みのhボックスの, 2種類のhボックスが存在することになる. -縦/横どちらのディレクションで作られたボックスであるか, ボックスごとに記録して, -これらの組み方向の異なるボックスを区別することにした. - -\verb|\hbox|, \verb|\vbox|などで作られるボックスは, 通常, -\verb|\hbox|, \verb|\vbox|が実行されたときの\TeX のディレクションと -同じディレクションを持つ. -しかし以下のように\verb|\yoko|プリミティブを使うと, -縦ディレクションの中に, -`123'という内容の横ディレクションを持つhボックスを置くこともできる. -\begin{quote} - (縦ディレクション)\\ - \verb|\hbox{\yoko 123}| -\end{quote} - -\verb|\hbox|, \verb|\vbox|でディレクションの異なるボックスを作ると, -横ディレクションを持つボックスは, 縦組み中では -$W_t=H_y+D_y$, $H_t=W_y/2$, $D_t=W_y/2$ -($H_y$は, ボックスの横ディレクション中における$H$)となる. -縦ディレクションを持つボックスは, 横組み中では -$W_y=H_t+D_t$, $H_y=W_t$, $D_y=0$となる. - -\begin{quote} \begin{picture}(50,24)(0,0) - \put(0,22){\makebox(16,0)[b]{縦組み中の横組みのボックス}} - \put(0,0){\begin{picture}(0,0)(0,0) - \thicklines - \put(0,6){\framebox(12,10){}} \put(0,10){\line(1,0){12}} - - \thinlines - \put(2,10){\vector(0,-1){4}} \put(2,10){\vector(0,1){0}} - \put(2.5,6){\makebox(0,4)[l]{$D_y$}} - \put(2,10){\vector(0,1){6}} \put(2,10){\vector(0,-1){0}} - \put(2.5,10){\makebox(0,4)[l]{$H_y$}} - \put(0,14){\vector(1,0){12}} \put(0,14){\vector(-1,0){0}} - \put(0,13.5){\makebox(12,0)[t]{$W_y$}} - - \put(6,0){\line(0,1){5}} \put(6,17){\line(0,1){5}} - \put(0,17){\line(0,1){2}} \put(12,17){\line(0,1){2}} - \put(13,6){\line(1,0){2}} \put(13,16){\line(1,0){2}} - - \put(14,6){\vector(0,1){10}} \put(14,6){\vector(0,-1){0}} - \put(14.5,6){\makebox(0,10)[l]{$W_t$}} - \put(6,18){\vector(-1,0){6}} \put(6,18){\vector(1,0){0}} - \put(0,18.5){\makebox(6,0)[b]{$D_t$}} - \put(6,18){\vector(1,0){6}} \put(6,18){\vector(-1,0){0}} - \put(6,18.5){\makebox(6,0)[b]{$H_t$}} - \end{picture}} - \put(30,22){\makebox(22,0)[b]{横組み中の縦組みのボックス}} - \put(30,4){\begin{picture}(0,0) - \thicklines - \put(6,0){\framebox(10,12){}} \put(10,0){\line(0,1){12}} - - \thinlines - \put(14,0){\vector(0,1){12}} \put(14,0){\vector(0,-1){0}} - \put(13.5,0){\makebox(0,12)[r]{$W_t$}} - \put(10,10){\vector(-1,0){4}} \put(10,10){\vector(1,0){0}} - \put(6,9.5){\makebox(4,0)[t]{$D_t$}} - \put(10,10){\vector(1,0){6}} \put(10,10){\vector(-1,0){0}} - \put(10,9.5){\makebox(4,0)[t]{$H_t$}} - - \put(0,0){\line(1,0){5}} \put(17,0){\line(1,0){5}} - \put(3,12){\line(1,0){2}} - \put(6,13){\line(0,1){2}} \put(16,13){\line(0,1){2}} - - \put(4,0){\line(0,-1){2}} \put(4,0){\vector(0,1){0}} - \put(3.5,-2){\makebox(0,2)[r]{$D_y$}} - \put(4,0){\vector(0,1){12}} \put(4,0){\vector(0,-1){0}} - \put(3.5,0){\makebox(0,12)[r]{$H_y$}} - \put(6,14){\vector(1,0){10}} \put(6,14){\vector(-1,0){0}} - \put(6,14.5){\makebox(10,0)[b]{$W_y$}} - \end{picture}} -\end{picture} \end{quote} - -二つの場合で$W$, $D$, $H$の算出方法が異なるのは, -縦組み, 横組みでの文字の扱いの違い(\ref{jfont}参照)を反映している. - -\TeX には256個のボックスレジスタが用意されていて -\begin{quote} - \verb|\setbox123\hbox{\yoko |\angle{文}\verb|}| -\end{quote} -と書けば, ボックスレジスタの123番に\angle{文}を内容とする -横ディレクションのhボックスが登録される. -登録されたボックスは -\begin{quote} \begin{verbatim} - \advance\ht123 by \dp123 - \dp123=0 -\end{verbatim} \end{quote} -のように, \verb|\wd|, \verb|\dp|, \verb|\ht|を使って -ボックスの大きさやベースラインの位置を自由に変えることができる. -\pTeX では, レジスタの内容は -\begin{quote} \begin{verbatim} - \hbox{\tate\copy123} - \hbox{\yoko\box123} -\end{verbatim} \end{quote} -のようにどのディレクションで使用されるかわからず, -ボックスが使用されるディレクションによって, $W$, $D$, $H$は異なる値を持つ. -そこで\verb|\wd|なども, -そのときのディレクション用の$W$などをアクセスすることにした. -\begin{quote} - \verb|\hbox{\yoko \global\wd123=|\angle{縦高さ}\verb|}|\\ - \verb|\hbox{\tate \global\wd123=|\angle{横幅}\verb|}|\\ - \verb|\hbox{\tate\copy123}|\\ - \verb|\hbox{\yoko\box123}| -\end{quote} -のように書けば, 3行目の\verb|\copy123|の$W$は\angle{縦高さ}であり, -4行目の\verb|\box123|の$W$は\angle{横幅}である. - -この場合注意しなければならないのは, -\verb|\hbox|, \verb|\vbox|で作られたボックスは -$W_t=H_y+D_y$, $W_y=H_t+D_t$であるが, -\verb|\wd|, \verb|\dp|, \verb|\ht|を使って$W$, $D$, $H$を変更すると -この関係は必ずしも成立しないということである. -ディレクションによってボックスの大きさが変化することになる. - -\subsection{異ディレクションのアジャスト, インサート} - -vモードや内部vモードの中のhボックスの中に\verb|\vadjust|を使うと, -vリストのそのボックスの次に, \verb|\vadjust|の内容が挿入される. -以下のようにディレクションの異なるhボックスの中でも -支障なく\verb|vadjust|が使えるようにした. -\begin{quote} - (縦ディレクション, vモード)\\ - \verb|\hbox{\yoko |\ldots\verb|\vadjust{|\ldots\verb|}|\ldots\verb|}| -\end{quote} -\verb|\vadjust|の中括弧の内側は, 自動的に, -それがアジャストされるリストのディレクションである縦ディレクションになる. - -\verb|\insert|の場合, クラスによってディレクションを変えたい場合もある. -たとえば文書全体は縦組みで, 脚注は横組みするとしよう. -図をクラス12のインサートで, 脚注をクラス34のインサートで処理することにする. -\begin{quote} - (縦ディレクション, vモード)\\ - \ldots\verb|\insert12{\tate |\ldots\verb|}|\ldots\\ - \ldots\verb|\insert34{\yoko |\ldots\verb|}|\ldots\\ - \ldots\verb|\insert12{\tate |\ldots\verb|}|\ldots\\ - \ldots\verb|\insert34{\yoko |\ldots\verb|}|\ldots -\end{quote} -このように書けば, -ボックスレジスタ12には縦ディレクションで図が集められ, -ボックスレジスタ34には横ディレクションで脚注が集められるようにした. -なお, 同じクラスに違うディレクションを混ぜて使うことはできない. - - -\section{縦組みに使用する文字} \label{font} - -\subsection{縦組み用日本語フォント} - -\TeX は各フォントに一つずつ用意されている -{\tt TFM}(\kern0pt{\it\TeX\/} {\it F\/}ont {\it M\/}etric\kern0pt )ファイルを -参照して組版を行う. -{\tt TFM}ファイルにはそのフォントに含まれる各文字の大きさなど -組版に必要な情報が定義してある. - -\pTeX でも同様であるが, 日本語のフォントの場合, 同じ書体でも -縦組みで使うか横組みで使うかによって, 組版に必要な情報は変わってくる. -たとえば, ``り''という文字は比較的縦に長い文字であるが, -このような文字は横組みではとなりの文字との間隔をつめて組むことはできても, -縦組みではある程度間隔を空けないと読みにくくなってしまう. -そこで, 横組み時と縦組み時では, -別の\verb|TFM|ファイルを参照して組版することにした. -\TeX から見ると, 縦組みと横組みでは別のフォントを使っているように -見えることになる. -ただし, 組み方向によるフォントの切り替えは, -ユーザーが気にする必要がないように自動的に行うようにした. -和文用のカレントフォントを2つ用意し, -ディレクションによって自動的に切り替えるようにしてある. -また{\tt TFM}ファイルに縦組み用か横組み用かの情報を埋め込み, -フォントを指定したとき, 自動的に適切なカレントフォントを切り替えるようにした. - -\label{jfont} -横組みでは, ベースラインは文字の下の方を通っている. -縦組みの和文フォントは, ベースラインが文字の中央を通ることにした. -行の途中で文字の大きさを変えたとき, そのほうが自然だと判断したからである. - -\subsection{縦組み中の欧文} - -縦組みの部分に欧文や数式が出てくると, -従来の\TeX の欧文用フォントを$90^\circ$回転して上から下に向かって組んでいく. -これは普通に横に組んだ欧文を, 90度回転させたような結果になる. -ところが, \ref{jfont}で説明したように, -縦組みの和文のベースラインは文字の中心を通るようにしたので, -そこに欧文のベースラインを一致させると行がずれて見えてしまう. -そこで, \verb|\tbaselineshift|というdimen変数を用意し, -その寸法だけ縦組み中の欧文のベースラインをシフトさせることにした. - -横組みでも, 和文と欧文のベースラインの位置を細かく調節しないと, -フォントのデザインによってはバランスが悪くなる場合があり, -\verb|\ybaselineshift|を用意して調節可能にした. - -\begin{quote} \begin{picture}(0,46) - \put(4,41){\line(0,1){5}} - \put(4,40){\begin{picture}(0,0) - \thicklines - \put(-7,-14){\framebox(14,14){縦組みの漢字}} - \put(0,0){\line(0,-1){14}} - - \thinlines - \put(8,0){\line(1,0){2}} \put(8,-14){\line(1,0){2}} - \put(-7,1){\line(0,1){2}} \put(7,1){\line(0,1){2}} - - \put(9,0){\vector(0,-1){14}} \put(9,0){\vector(0,1){0}} - \put(9.5,-14){\makebox(0,14)[l]{$W$}} - \put(0,2){\vector(1,0){7}} \put(0,2){\vector(-1,0){0.0}} - \put(0,2.5){\makebox(7,0)[b]{$H$}} - \put(0,2){\vector(-1,0){7}} \put(0,2){\vector(1,0){0.0}} - \put(-7,2.5){\makebox(7,0)[b]{$D$}} - \end{picture}} - \put(4,19){\line(0,1){6}} \put(0,19){\line(0,1){5}} - \put(0,23){\vector(1,0){4}} \put(0,23){\vector(-1,0){0}} - \put(4.5,23){\makebox(0,0)[l]{\tt \char92 tbaselineshift}} - \put(0,18){\begin{picture}(0,0) - \thicklines - \put(-4,-12){\framebox(12,12){英字($90^\circ$ 回転)}} - \put(0,0){\line(0,-1){12}} - - \thinlines - \put(-4,1){\line(0,1){2}} \put(8,1){\line(0,1){2}} - \put(9,0){\line(1,0){2}} \put(9,-12){\line(1,0){2}} - - \put(-4,2){\vector(1,0){4}} \put(-4,2){\vector(-1,0){0}} - \put(-4,2.5){\makebox(4,0)[b]{$D$}} - \put(0,2){\vector(1,0){8}} \put(0,2){\vector(-1,0){0}} - \put(4,2.5){\makebox(4,0)[b]{$H$}} - \put(10,0){\vector(0,-1){12}} \put(10,0){\vector(0,1){0}} - \put(10.5,0){\makebox(0,-12)[l]{$W$}} - \end{picture}} - \put(4,0){\line(0,1){5}} - - \put(16,8){\line(1,0){5}} - \put(22,8){\begin{picture}(0,0) - \thicklines - \put(0,-2){\framebox(14,14){横組みの漢字}} - \put(0,0){\line(1,0){14}} - - \thinlines - \put(-3,-2){\line(1,0){2}} \put(-3,12){\line(1,0){2}} - \put(0,13){\line(0,1){2}} \put(14,13){\line(0,1){2}} - \put(-2,0){\vector(0,-1){2}} \put(-2,0){\vector(0,1){0}} - \put(-2.5,-2){\makebox(0,2)[r]{$D$}} - \put(-2,0){\vector(0,1){12}} \put(-2,0){\vector(0,-1){0}} - \put(-2.5,0.0){\makebox(0.0,12.0)[r]{$H$}} - \put(0,14){\vector(1,0){14}} \put(0,14){\vector(-1,0){0}} - \put(0,14.5){\makebox(14,0.0)[b]{$W$}} - \end{picture}} - \put(37,8){\line(1,0){6}} \put(38,9){\line(1,0){5}} - \put(39,9){\vector(0,-1){0}} \put(39,8){\vector(0,1){0}} - \put(39,4){\line(0,1){7}} - \put(39,3.5){\makebox(0,0)[t]{\tt \char92 ybaselineshift}} - \put(44,9){\begin{picture}(0,0) - \thicklines - \put(0,-4){\framebox(12,12){英字(正立)}} - \put(0,0){\line(1,0){12}} - - \thinlines - \put(-3,-4){\line(1,0){2}} \put(-3,8){\line(1,0){2}} - \put(0,9){\line(0,1){2}} \put(12,9){\line(0,1){2}} - - \put(-2,0){\vector(0,-1){4}} \put(-2,0){\vector(0,1){0}} - \put(-2.5,-4){\makebox(0,4)[r]{$D$}} - \put(-2,0){\vector(0,1){8}} \put(-2,0){\vector(0,-1){0}} - \put(-2.5,0){\makebox(0,8)[r]{$H$}} - \put(0,10){\vector(1,0){12}} \put(0,10){\vector(-1,0){0}} - \put(0,10.5){\makebox(12,0)[b]{$W$}} - \end{picture}} - \put(57,8){\line(1,0){5}} -\end{picture} \end{quote} - - -\section{縦組み中の数式} - -縦組み中の数式も, 欧文と同様にシフトさせなければならない. -\TeX の数式には, 分数の線の高さなどを決定するための -axis(軸)という概念があるので, これでシフト量を決定することにした. - -問題は次のような場合である. -\begin{quote} - (縦ディレクション, hモード)\\ - \ldots\verb|$ \hbox{$ |\angle{数式}\verb| $} $|\ldots -\end{quote} -この場合, 数式モードがネスティングされることになるので, -内側の\angle{数式}は2回シフトされることになってしまう. -これを避けるため, \verb|$| の内側は, -普通の縦ディレクションではない縦数式ディレクションに移行することにした. -縦数式ディレクションでは -文字やボックスの並ぶ方向は縦ディレクションと同じであるが, -その他の動作は横組みと同様である. -数式ディレクション中で数式モードに移行してもシフトは行わず, -また, 日本語のフォントは横組みカレントフォントを使用する. -つまり, 数式は横組みで組んだものを時計回りに90度回転して, -縦組み中に挿入する形になる. - -便宜的に, 横組みでも数式モードに入ると横数式ディレクションに入ることにした. -現在のディレクションが通常のディレクションであるか, -数式ディレクションであるかは, \verb|\ifmdir|でテストできる. - - -\section{組版結果の出力} \label{output} - -\TeX は\verb|\shipout|プリミテイブで, ボックスの左上隅が紙の左上隅から, -右に $\verb|\hoffset|+1インチ$, -下に $\verb|\voffset|+1インチ$ の位置になるように, -{\tt DVI}(\kern0pt{\it D\/}e{\it v\/}ice {\it I\/}ndependent\kern0pt ) -ファイルに出力する. -\pTeX も同様である. -\verb|\hoffset|, \verb|\voffset|は, ほかのプリミティブ名と違って, -ディレクションに関係なく, h, vが本当にholizontal, vertcalを意味している. - -従来の\verb|DVI|命令は, \.横\.組\.み\.の\.と\.きファイルが小さくなるように -工夫されている. -たとえば, ``文字の印字''と``文字幅だけ右へ移動''が, -1つの命令でできるようになっている. -\pTeX では, 縦組みの場合でも横組みと同様にファイルが小さくなるように, -\verb|DVI|フォーマットを拡張した. - -ただし, たとえば従来の文書をこの\TeX で処理した場合など, -その文書内で縦組みを使用していない場合, -従来のものと同じフォーマットの{\tt DVI}を出力する. -また, プリアンブル, ポストアンブルをテストすれば, -文書内した縦組みを使用した箇所が存在するかどうかを知ることができるようにした. - - -\section{インプリメント} \label{imple} - -現在構築中のリストのネスティング状態を示す -レコード(\kern0pt {\it list\_state\_record\/})に, -ディレクションを表すフィールドを追加し, -トップのディレクションをマクロ{\it direction\/}でアクセスできるようにした. -{\it direction\/}の値は{\it dir\_yoko\/}か, {\it dir\_tate\/}か, -$-{\it dir\_yoko\/}$か, $-{\it dir\_tate\/}$である. -$-{\it dir\_yoko\/}$, $-{\it dir\_tate\/}$は数式ディレクションを意味する. - -各種ノードにディレクションを保持するフィールドを加えなければならない. -ボックスを表す{\it hlist\_node\/}, {\it vlist\_node\/}では -第1ワードの{\it sub\_type}フィールドが未使用だったので, -これを{\it box\_dir\/}として使うことにした. -\verb|\insert|によって生成される -{\it ins\_node\/}には空いているフィールドがなかったので, -サイズを1ワード大きくして全部で6ワードにし, -最後の1ワードを{\it ins\_dir\/}として使うことにした. - -\subsection{\it dir\_node} - -縦ディレクションのリストに横ディレクションのボックスを追加するような場合, -間に{\it dir\_node\/}を挿入して, ボックスの大きさなどを整合させる. -{\it dir\_node\/}は, {\it hlist\_node\/}, {\it vlist\_node\/}と -全く同じ構造を持っている. -リストにはこの{\it dir\_node\/}が挿入され, -{\it dir\_node\/}の{\it box\_dir\/}にはリストのディレクションが, -{\it width\/},{\it depth\/},{\it height\/}には, -リストのディレクションで見た, ボックスの$W$, $D$, $H$の値が入っている. -{\it dir\_node\/}の{\it list\_ptr\/}は実体のボックスを指すポインタである. -実体のボックス({\it hlist\_node\/}, {\it vlist\_node\/})の -{\it box\_dir\/}にはボックスのディレクションが, -{\it width\/},{\it depth\/},{\it height\/}には, -ボックスのディレクションで見た, $W$, $D$, $H$の値が入っている. - -たとえば -\begin{quote} - (縦ディレクション)\\ - {\gt \verb|昭和\hbox{\yoko 38}年|} -\end{quote} -は図のようなリストを作る. -\begin{quote} \begin{picture}(40,25)(-4,-22) - \thinlines - \put(0,0){\begin{picture}(0,0) - \put(-4,-3){\framebox(8,4){}} - \put(0,0){\vector(1,0){6}} - \put(0,0){\circle*{0.3}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-3){\makebox(8,2)[c]{`昭'}} - \end{picture}} - \put(10,0){\begin{picture}(0,0) - \put(-4,-3){\framebox(8,4){}} - \put(0,0){\vector(1,0){6}} - \put(0,0){\circle*{0.3}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-3){\makebox(8,2)[c]{`和'}} - \end{picture}} - \put(20,0){\begin{picture}(0,0) - \put(-4,-7){\framebox(8,8){}} - \put(-4,-1){\makebox(4,2)[c]{\bf 縦}} - \put( 0,-1){\line(0,1){2}} - \put( 2, 0){\vector(1,0){4}} - \put(2,0){\circle*{0.3}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-5){\makebox(8,4)[c]{\it dir\_node\/}} - \put(-4,-5){\line(1,0){8}} - \put( 0,-6){\circle*{0.3}} - \put( 0,-6){\vector(0,-1){3}} - \end{picture}} - \put(30,0){\begin{picture}(0,0) - \put(-4,-3){\framebox(8,4){}} - \put(-4,-1){\line(4,1){8}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-3){\makebox(8,2)[c]{`年'}} - \end{picture}} - - \put(20,-10){\begin{picture}(0,0) - \put(-4,-7){\framebox(8,8){}} - \put(-4,-1){\makebox(4,2)[c]{\bf 横}} - \put( 0,-1){\line(0,1){2}} - \put( 0,-1){\line(2,1){4}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-5){\makebox(8,4)[c]{\it hlist\_node\/}} - \put(-4,-5){\line(1,0){8}} - \put( 0,-6){\circle*{0.3}} - \put( 0,-6){\vector(0,-1){3}} - \end{picture}} - - \put(20,-20){\begin{picture}(0,0) - \put(-4,-3){\framebox(8,4){}} - \put(0,0){\vector(1,0){6}} - \put(0,0){\circle*{0.3}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-3){\makebox(8,2)[c]{`3'}} - \end{picture}} - \put(30,-20){\begin{picture}(0,0) - \put(-4,-3){\framebox(8,4){}} - \put(-4,-1){\line(4,1){8}} - \put(-4,-1){\line(1,0){8}} - \put(-4,-3){\makebox(8,2)[c]{`8'}} - \end{picture}} -\end{picture}\end{quote} -\begin{quote}\gt\begin{verbatim} - \tmin 昭 - \tmin 和 - \dirboxT(5.00002+5.00002)x6.44444 - .\hboxY(6.44444+0.0)x10.00003 - ..\tenrm 3 - ..\tenrm 8 - \penalty 500(for \jcharwidowpenalty) - \glue(\kanjiskip) 0.0 plus 0.4 minus 0.4 - \tmin 年 -\end{verbatim} \end{quote} - -`\verb|\hbox{|'と入力されると, -それまでのリストやモードやディレクションがセーブされ, -新たなリストやモードやディレクションが用意される. -\verb|\tate|や\verb|\yoko|は, -その時点でのリストが空であればディレクションを変更する. -`\verb|\hbox{|'に対応する`\verb|}|'が入力されると, -まず, \verb|\hbox{}|の内部のディレクションと同じディレクションのボックスが -作られる. -そのディレクションと\verb|\hbox{}|の外側のディレクションが一致していなければ, -{\it dir\_node}を使って, ディレクションが整合させられる. - -\subsection{\it disp\_node} - -和文中の欧文や数式のベースラインをシフトさせるために, -新種のノード{\it disp\_node\/}(\kern0pt displacement node\kern0pt )を -導入することにした. -このノードは, リンク情報ワードのほかに -{\it disp\_dimen\/}フィールド(1ワード)を持っている. -{\it disp\_node\/}はhリスト中にのみ存在し, -このノード以降のすべてのノードのベースラインを, -{\it disp\_dimen}だけ行送り方向にシフトさせる. - -たとえば, 縦ディレクションで\verb|\tbaselineshift|の値が2ポイントのとき, -\begin{quote}\gt - \ldots\verb|このdispノード|\ldots -\end{quote} -のように入力すると`\verb|disp|'の前に2ポイントの{\it disp\_node\/}, -後に0ポイントの{\it disp\_node\/}が挿入される. -\begin{quote}\gt\begin{verbatim} - \tmin こ - \tmin の - \displace 2.0 - \glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - \tenrm d - \tenrm i - \tenrm s - \tenrm p - \displace 0.0 - \glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - \tmin ノ - \penalty 200(for kinsoku) - \glue(\kanjiskip) 0.0 plus 0.4 minus 0.4 - \tmin ー - \penalty 500(for \jcharwidowpenalty) - \glue(\kanjiskip) 0.0 plus 0.4 minus 0.4 - \tmin ド -\end{verbatim} \end{quote} -文字(\kern0pt {\it char\_node\/}), -ボックス(\kern0pt {\it hlist\_node\/}, {\it vlist\_node\/}, {\it dir\_node\/}), -罫線(\kern0pt {\it rule\_node\/})以外のノードには, -$H$や$D$がないので{\it disp\_node\/}の影響を受けない. -だから -\begin{quote}\gt - \ldots\verb|このdvi fileフォーマット|\ldots -\end{quote} -のように入力されたとき, \verb|device|と\verb|independent|の間の空白の前後に -{\it disp\_node\/}を入れるのは無駄である. -\begin{quote}\gt\begin{verbatim} - \tmin こ - \tmin の - \displace 2.0 - \glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - \tenrm d - \tenrm v - \tenrm i - \displace 0.0 - \glue 3.33333 plus 1.66666 minus 1.11111 - \displace 2.0 - \tenrm ^^L (ligature fi) - \tenrm l - \tenrm e - \displace 0.0 - \glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - \tmin フ - \penalty 150(for kinsoku) - \glue 1.07391 minus 1.07391 - \tmin ォ -\end{verbatim} \end{quote} -そこで, リストに{\it disp\_node\/}を加えるとき, -無駄な{\it disp\_node\/}を消すようにした. -\begin{quote}\gt\begin{verbatim} - .\tmin こ - .\tmin の - .\displace 2.0 - .\glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - .\tenrm d - .\tenrm v - .\tenrm i - .\glue 3.33333 plus 1.66666 minus 1.11111 - .\tenrm ^^L (ligature fi) - .\tenrm l - .\tenrm e - .\displace 0.0 - .\glue(\xkanjiskip) 2.5 plus 1.0 minus 1.0 - .\tmin フ - .\penalty 150(for kinsoku) - .\glue 1.07391 minus 1.07391 - .\tmin ォ -\end{verbatim} \end{quote} - -\subsection{縦組み用{\tt TFM}ファイル} - -縦組みフォント用拡張{\tt TFM}ファイルのフォーマットは, 基本的には, -従来の{\tt JFM}フォーマット\cite{jfm}と変わらない. -ただ各フィールドの意味が多少変化している. -最初のハーフワード(\kern0pt {\it id}\kern0pt )で -{\tt JFM}フォーマットであることを示す. -$\hbox{\it id} = 11$ の場合は横組み用{\tt JFM}, -$\hbox{\it id} = 9$ の場合は縦組み用{\tt JFM}である. - -{\it width}, {\it italic}, {\it kern}, {\it glue}など -従来の横組み{\tt JFM}フォーマットで横方向の意味を持っていたフィールドは, -縦組み{\tt JFM}では縦(字送り)方向の意味を持つ. -たとえば{\it width}はその文字の縦方向の大きさである. - -{\it height}, {\it depth}など -従来の横組み{\tt JFM}で縦方向の意味を持っていたフィールドは, -縦組み{\tt JFM}では横(行送り)方向の意味を持つ. -{\it height}はその文字のベースラインの右側の大きさ, -{\it depth}はその文字のベースラインの左側の大きさである. - -\subsection{拡張{\tt DVI}フォーマット} - -従来の\verb|DVI|には水平方向へ移動する命令として\verb|right|, -垂直方向へ移動する命令として\verb|down|という名前が使用されている. -hボックスを``水平ボックス''ではなく``字送り方向のボックス''と定義したように -\verb|right|命令を字送り方向へ移動する命令, -\verb|down|命令を行送り方向へ移動する命令と定義した. -字送り, 行送りの方向は, 組み方向によって変わるので, -\verb|DVI|リーダにもディレクションを設けて, -新しい命令\verb|dir|によってディレクションを切り換えることにした. -\verb|push|, \verb|pop|で, $(h,v,w,x,y,z)$の他に, -ディレクション$d$もpush, popする. - -\verb|DVI|の命令は最初の1バイトで識別できるようになっている. -すでに0--249が使用されている\footnote{ - \TeX を, 英語などの左から右へ書く言語と, - アラビア語やヘブライ語のように右から左へ書く言語を - 混植できるように改造した事例\cite{arabic}では, - そのインプリメントの方法として\verb|DVI|命令を拡張しており, - 250, 251を使用している. -}ので新しい命令は255を使うことにした. -\verb|dir|(\kern0pt 255\kern0pt )命令は1バイトの引数$d$を1つ取る. -\begin{itemize} -\item $d=0$ $\cdots$ 横組み -\item $d=1$ $\cdots$ 縦組み -\end{itemize} - -横ディレクションの場合は従来の\verb|DVI|とコンパチブルであるが, -縦ディレクションの場合は従来の\verb|DVI|で横方向に移動する命令 -\begin{quote} \begin{verbatim} - set_char_* set? set_rule right? w? x? -\end{verbatim} \end{quote} -は縦方向(字送り方向)に移動する命令となり, -従来の\verb|DVI|で縦方向に移動する命令 -\begin{quote} \begin{verbatim} - down? y? z? -\end{verbatim} \end{quote} -は横方向(行送り方向)に移動する命令となる. - -文字は, ベースラインの方向が字送りの方向と一致するように, -必要なら回転して, 印字されなければならない. -罫線の命令もディレクションによって方向が変わる. -従来の\verb|set_rule|, \verb|put_rule|では, -最初の引数が高さ, 次の引数が幅を表していた. -拡張\verb|DVI|では, 最初の引数が罫線の行送り方向の反対側の大きさ, -次の引数が字送り方向の大きさを表している. -\verb|set_rule|では2番目の引数で指定してある長さだけ -字送り方向に参照点を移動させる. - -各ページの先頭では, {\tt DVI}リーダは横ディレクションであり, -拡張\verb|DVI|対応のプリンタドライバで, 従来の\verb|DVI|もプリントアウトでき, -拡張命令(\kern0pt \verb|dir|\kern0pt )を使っていない\verb|DVI|ファイルは, -従来のプリンタドライバでプリントアウトできる. - -\verb|DVI|ファイルには, ファイルの先頭(\kern0pt preamble\kern0pt )と -末尾(\kern0pt postamble\kern0pt )に\verb|DVI|のバージョンを表す -{\it id\_byte}が書き込まれている. -従来の\verb|DVI|ではどちらの{\it id\_byte}も2である. -拡張命令を使っている\verb|DVI|ファイルでは, postambleの{\it id\_byte}を3にして, -拡張プリンタドライバでプリントアウトしなければならないことを表す. - - -\section{日本語\TeX との互換性} - -\pTeX は, 機能面では従来の日本語\TeX との完全な互換性を保っている. - -性能面での違いを比較するために -SONY NEWS 1460上の日本語\TeX と\pTeX で本論文を組版し, -cshのtimeコマンドでCPU時間を比較してみた. -なおこのテストでは, あらかじめauxファイルを作成しておき, -{\tt virtex}に\LaTeX のフォーマットファイルを読み込ませる形で起動して計測した. -\begin{itemize} -\item 日本語\TeX の場合:\\ - \verb|24.7u 0.3s 0:25 99% 44+123k 0+16io 0pf+0w| - -\item \pTeX の場合:\\ - \verb|25.0u 0.3s 0:25 99% 46+121k 0+16io 0pf+0w| -\end{itemize} - -やはり多少負荷は重くなっているようだが, -約1 \%なのでほとんど変っていないと言っていいと思う. -これは, \pTeX を日本語\TeX の置き換えとして使用しても -支障はないということを意味している. - - -\section{おわりに} - -今回行った\TeX の改造は, 相当大規摸なものである. -アスキー版日本語\TeX の段階で既に{\tt trip test}をパスしなくなっており, -これにさらに改造を加えたので, -`もはやこれは\TeX ではない'という意見もあるかも知れない. -私は, \TeX の根本は以下の3項目であろうと考えている. -\begin{itemize} -\item ボックスとグルー -\item ラインブレーク, ページブレーク -\item マクロ -\end{itemize} -この機構は単純であるにもかかわらず非常に強力で, -組版の諸問題をほぼ解決することができる. -この基本を踏み外さなければ, \TeX と呼んでいいのではないだろうか. - -もともと, \TeX システムはクヌース教授が伝統的な組版について調査し, -同等以上のクオリティを得ることを目標に作られたシステムである. -\pTeX も, 従来の日本語の組版について十分調査し, -先人の行ってきた美しい組版のための工夫を, -できる限り取り込んでいきたいと考えている. -それをある程度効率よく行うためには, -やはり, \TeX の内部に変更を加える必要がある. - -今後の\pTeX の環境の整備, 機能拡張として以下のものを考えている. -\begin{description} -\item[マクロの充実]\ \\ - 縦組みに必要なマクロを洗い出し, 充実させる必要がある. - -\item[約物のチューニング]\ \\ - 現在の{\tt TFM}では, 約物(記号類)の扱いについて - チューニングの足りない部分がある. - - {\tt TFM}のチューニングで対応しきれない場合は, - \TeX 本体のスペーシングアルゴリズムに変更を - 加えなければならないかもしれない. - -\item[漢字・カナ別フォント]\ \\ - 写植にはカナ書体と言って, 漢字が含まれていない書体がある. - これと漢字の書体(明朝, ゴシックなど)とを組み合わせて文章を組む. - カナの書体を変えただけでもかなり雰囲気が変わるものである. - - これを\TeX で実現するには, カナのカレントフォントを設けて, - コードによって漢字フォントとカナフォントを使い分けることになるだろう. - -\item[ルビ]\ \\ - やはり日本語の書籍を組版するためには, ルビを避けるわけにはいかない. - - ルビの振ってあることばの途中でラインブレークが起こる場合があるので, - ラインブレーク処理に手を加えなければならない. - 縦組み拡張に匹敵する大改造になると思われる. -\end{description} - -\subsection*{謝辞} - -本研究の機会を与えてくださった -(株)\kern-3pt アスキー 電子編集研究統轄部 井芹昌信 統轄部長, -同 技術統轄部 三浦雅孝 統轄部長, -ならびに, \TeX システムについて貴重なご意見をいただいた 同 技術部 大野俊治 次長 -に感謝します. - -\begin{thebibliography}{9} -\bibitem{texbook} Knuth, D. E. : {\em The \TeX book}, Addison-Wesley (1986)\\ - [斎藤信男 監修, 鷺谷好輝 翻訳 : \TeX ブック, アスキー(1989)] -\bibitem{texweb} Knuth, D. E. : {\em \TeX : the program}, Addison-Wesley (1986) -\bibitem{jtex} 倉沢良一 : \TeX システムの日本語化, - 日本語\TeX 配布テープ, {\tt ./doc/jtex.tex} (1987) -\bibitem{jfm} 倉沢良一 : JFM file format, - 日本語\TeX 配布テープ, {\tt ./doc/jfm.tex} (1987) -\bibitem{arabic} Knuth, D. E. and MacKay, P. : - Mixing right-to-left texts with left-to-right texts, - {\em TUGboat Volume~8 No.~1}, pp.~14--25 (1987) -\end{thebibliography} - -\end{document} diff --git a/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.pdf b/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.pdf deleted file mode 100644 index fc89e00a914..00000000000 Binary files a/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.tex b/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.tex deleted file mode 100644 index cacb1d96368..00000000000 --- a/Master/texmf-dist/doc/ptex/ptex-base/ptexskip_asciimw.tex +++ /dev/null @@ -1,387 +0,0 @@ -\documentclass{jarticle} -\ProvidesFile{ptexskip.tex}[1997/08/08 v0.4 about pTeX skips] -\usepackage{plext} - -\title{p\TeX~2.1.5における数式の前後} -\author{中野 賢\footnote{Ken Nakano (\texttt{}): - 株式会社 アスキー 出版技術部}} -\date{1997年8月8日} - -\newcommand{\hex}[1]{\hskip\xkanjiskip\texttt{"#1}} -\newcommand{\cs}[1]{\hskip\xkanjiskip\texttt{\char"5C #1}} -%\xspcode"5C=1 -\xspcode"22=2 % 2 -\xspcode"27=2 % 2 -\xspcode"5C=1 % 1 -\xspcode"60=1 % 1 -\prebreakpenalty"22=10001 % '' -\prebreakpenalty"27=10002 % ' -\postbreakpenalty"5C=10003 % ``, \ -\postbreakpenalty"60=10004 % ` - -% サンプル用 -\newdimen\dimenA - -%\tracingcommands=2 -%\tracingmacros=2 -%\tracingparagraphs=2 -%\tracingoutput=2 -\showboxbreadth=\maxdimen -\showboxdepth=\maxdimen -\nonstopmode - -\begin{document} -\maketitle - -\section*{はじめに} -p\TeX{}では、和文と欧文の間に\emph{四分アキ}と呼ばれるスペースを -自動的に挿入するようになっている。挿入される箇所は、和文と欧文の間という -だけでなく、他にも次の条件が揃っていなくてはならない。 - -\begin{itemize} -\item \cs{autoxspcode}の状態 -\item \cs{xspcode}および\cs{inhibitxspcode}による抑制を受けない -\item shift\_amount(移動量)がゼロである\cs{hbox}の直前、直後 -\item 合字、ペナルティ、ベースライン調整量、暗黙の\cs{kern}の直前、直後 -\end{itemize} - -本文では多くの場合、単純に文字が並んでいるだけなので、このような条件を -知らなくても、期待している結果を得ることができる。 -しかし、数式を組み立てた場合、自分ではとくに指定をしていなくても、 -\TeX{}が内部処理で、文字の位置を調整したり、\cs{vbox}に入れたりするために、 -四分アキが入らず、その原因もわからないということがある。 - -そこで、p\TeX~2.1.5では、テキスト数式の前後への四分アキの挿入方法を変更した。 -この文書では、その拡張に際しての仕様の変更について簡単に説明をしている。 - -\section{p\TeX~2.1.4までの数式の前後} -p\TeX~2.1.4で\footnote{より正確に言えば、p\TeX~2.1.5 $\beta$~6まで}、 -テキスト数式の前や後に四分アキが入らない主な原因は以下の3つである。 - -\begin{itemize} -\item \cs{xspcode}による影響の場合 -\item シフトされた\cs{hbox}となる場合 -\item \cs{vbox}となる場合 -\end{itemize} - -\subsection{\cs{xspcode}による影響の場合} -\cs{xspcode}および\cs{inhibitxspcode}による抑制は、たとえば、 -$\alpha$や$\beta$の前後にスペースが入らないという結果をもたらす。 -なぜならば、$\alpha$はcmmi10の\hex{0B}の位置、$\beta$は\hex{0C}の位置に -あるからである。これら文字の\cs{xspcode}の値はゼロ、すなわち前後への -四分アキを抑制するという動作をする。 -その結果、前後に四分アキが入らないのである。 - -\subsection{シフトされた\cs{hbox}となる場合} -shift\_amountがゼロでない\cs{hbox}の例としては、 -$\sum$や$\int$や$x^2$や$x_2$や$\sqrt{\hbox{Var(X)}}$などを挙げられる。 - -$\sum$はcmex10の\hex{50}の位置にあり、これはcmr10の``P''と同じ位置 -なので\cs{xspcode}による抑制は受けない。しかし、位置の調整のために、 -\cs{hbox}に入れられ、左にシフトされる。この結果、\hex{50}の文字が -一つだけにも関わらず、処理対象外の\cs{hbox}となってしまい、 -前後への四分アキが入らなくなる。$\int$も同様である。 - -$x^2$や$x_2$などの場合は、上付き/下付き文字がシフトされた\cs{hbox}として -組み立てられているので、``$x$''の前には四分アキが入るが、 -``2''の後ろには入らないことになる。 - -根号記号の場合は、全体がシフトされた\cs{hbox}として組み立てられるので、 -前後に四分アキが入らない。 - -\subsection{\cs{vbox}となる場合} -その他に四分アキが入る箇所は、 -合字、ペナルティ、ベースライン調整量、暗黙の\cs{kern}の直前か直後 -だけである。これ以外の箇所には入らない。 -数式の前後に限れば、このうちの、\cs{vbox}の前後には入らないという -制限が大きく影響をしている。たとえば、$\frac{1}{k}$といった分数や、 -$x_k^2$のように上付きと下付き文字の両方を指定したときが、これに当たる。 - -分数の場合は、最終的に\cs{vbox}として組み立てられる。 -そのため、分数の前後に四分アキが入らなくなる。 -上付きと下付きの両方がある場合は、それらが\cs{vbox}に入れられるため、 -入らなくなるのである。上付きと下付きの一方の場合と状況は異なるが、 -結果は一緒である。 - -\section{p\TeX~2.1.5 $\beta7$での数式の前後} -今までの実装コードでは、数式の開始や終了のノードを見つけても、 -開始/終了ノードを単純にスキップするだけで、その後、数式の内部の文字を見て、 -スペースを挿入するかどうかを判断をしていた。そのために数式を囲んでいる -\cs{hbox}がシフトしていたり、\cs{vbox}であったりすると前後にスペースが -入らないという結果になっていた。 - -そこで、$\beta7$では、数式の開始ノードを見つけたとき、次の要素が何で -あるかを調べることにした。 - -数式の次の要素が``文字''そのものである場合、テキストの最後の文字との関係で -適切なスペースを入れる。ここで、従来の動作と異なるのは、数式内部の文字の -\cs{xspcode}あるいは\cs{inhibitxspcode}の設定を無視するようにした点である。 -つまり、数式内の文字とその直前との文字が和文か欧文かだけを調べて、 -四分アキか漢字間スペースを挿入するようにした。 -この変更で$\alpha$や$\beta$などの文字の前にスペースが入るようになる。 - -数式の開始ノードの次の要素が文字以外の場合は、それが何であっても -四分アキを入れる。この修正によって、数式がシフトされた\cs{hbox}や -\cs{vbox}の場合であっても四分アキが入る。 -このようなボックスになるときは、上付き/下付き文字、分数、数学記号を -使った場合などである。 - -終了ノードの時点では、この後に挿入するスペースが決まっていればそれを用いる。 -すなわち、数式の最後とその後るの文字がともに和文であれば漢字間スペースを -挿入し、いずれかが欧文であれば四分アキを挿入する。 -このときも、数式内部の最後の文字の\cs{xspcode}も無視するようにし、 -$\alpha$や$\beta$などの後ろにも入るようにしている。 - -シフトされた\cs{hbox}や\cs{vbox}などで終了したときは、 -前側に四分アキを入れたので、合わせる意味で後側にも四分アキを挿入する。 -これで$x^2$や$\frac{dx}{dy}$や$\sqrt{3}$などの後ろにもスペースが入る。 - -なお、数式の直前の文字と数式内部の先頭文字がともに欧文の場合、 -あるいは数式内部の最後と数式直後がともに欧文の場合は、 -\TeX{}と同じであり特別なスペースを入れないのは従来と同じである。 - -\section{p\TeX~2.1.5 $\beta8$での数式の前後} -p\TeX~2.1.5 $\beta8$では、単純にテキスト数式の前後に四分アキを入れる方法 -で実装している。ただし、「(」や「)」などによる抑制を効かせるべき箇所には -四分アキは入らない。つまり -``\verb|($y=a+b$)|''は -``($y=a+b$)''となり -``(\kern\xkanjiskip$y=a+b$\kern\xkanjiskip)''とは -ならないことに注意する。 -`\verb|($y=a+b$)|'は -`($y=a+b$)'となり -`(\kern\xkanjiskip$y=a+b$\kern\xkanjiskip)'とは -ならないことに注意する。 -\showlists - -$\beta7$版と$\beta8$版との仕様の違いは、 -次のように数式内の文字が漢字で始まる(あるいは終わる)ときに現れる。 -\begin{verbatim} - \kanjiskip=4pt \xkanjiskip=8pt - □□$表面積=4\pi r^2$□□ -\end{verbatim} -この例をそれぞれで処理した場合、 -\begin{quote} -\kanjiskip=4pt \xkanjiskip=8pt -□□\kern\kanjiskip$表面積=4\pi r^2$\kern\xkanjiskip □□ - \quad($\beta7$\kern.25zw 版)\\ -□□\kern\xkanjiskip$表面積=4\pi r^2$\kern\xkanjiskip □□ - \quad($\beta8$\kern.25zw 版)\\ -□□$表面積=4\pi r^2$□□ - \quad\hbox{\kanjiskip=0pt\xkanjiskip=.25zw (この版)} -\end{quote} -となる。つまり、$\beta7$版では数式内部の文字と直前の文字を比較しているため、 -前側に漢字間スペースが入り、後側に四分アキが入る。 -一方、$\beta8$版では数式内部の文字に関係なく、両側に四分アキが入る。 - -なお、両者の違いは、次のように\cs{hbox}を用いたときにも現れる。 -\begin{verbatim} - \kanjiskip=4pt \xkanjiskip=8pt - □□$\hbox{表面積}$□□ -\end{verbatim} -これを処理すると、$\beta7$版は目指すべき仕様とは異なり、 -後ろに何も入らない(バグ)。$\beta8$版では仕様どおりに両側に四分アキが入る。 -\begin{quote} -\kanjiskip=4pt \xkanjiskip=8pt -□□\kern\xkanjiskip$\hbox{表面積}$\kern0pt □□ - \quad ($\beta7$\kern.25zw 版)\\ -□□\kern\kanjiskip$\hbox{表面積}$\kern\kanjiskip □□ - \quad\hbox{\kanjiskip=0pt($\beta7$\kern.25zw 版を修正した場合)}\\ -□□\kern\xkanjiskip$\hbox{表面積}$\kern\xkanjiskip □□ - \quad ($\beta8$\kern.25zw 版)\\ -□□$\hbox{表面積}$□□ - \quad\hbox{\kanjiskip=0pt\xkanjiskip=.25zw (この版)} -\end{quote} - -実際には、p\TeX, p\LaTeX のデフォルトの設定では\cs{kanjiskip}と\cs{xkanjiskip}% -の値はもっと小さいので、違いはそれほど目立たないかもしれない。 -しかし、縦組にした場合は、つぎのような結果となる。 -\begin{quote} -\begin{minipage}{16zw} -△△\kern\kanjiskip$表面積=4\pi r^2$\kern\xkanjiskip\raisebox{-.25zw}{△△} - \quad($\beta7$\kern.25zw 版)\\ -\\ -△△\kern\kanjiskip$表面積=4\pi r^2$\kern\xkanjiskip △△\\ - \hfill($\beta7$\kern.25zw 版を修正した場合)\\ -\\ -△△\kern\xkanjiskip$表面積=4\pi r^2$\kern\xkanjiskip △△ - \quad($\beta8$\kern.25zw 版)\\ -\\ -△△$表面積=4\pi r^2$△△ - \quad\hbox{\kanjiskip=0pt\xkanjiskip=.25zw (この版)} -\end{minipage} -\end{quote} -$\beta7$の結果を見ると文字間のスペースは仕様どおりになっている。 -しかし、ベースラインの調整量が数式の後ろで戻っていないというバグがある。 -たとえバグを修正したとしても、決して読みやすいとは思えない。 - -以上の結果を比較すると、$\beta8$の挿入方法のほうが自然で、読みやすいように -思える。また、挿入されるスペースも前後の文字、数式内の文字に関係なく、 -四分アキと決まっているので結果がわかりやすい。 -そこで、$\beta8$では、この節の冒頭で述べた、 -\begin{center} -単純に、テキスト数式の前後に四分アキを入れる -\end{center} -という仕様で実装している。 - -\subsection{別の問題} -$\beta7$の実装では、完全に数式にだけ影響するようにしていなかったため、 -通常の文章内でのボックスに対する動作も変わってしまっていた。たとえば、 -\begin{quote} -\begin{verbatim} -□□\AA △△△△\hbox to0pt{ABC\hss}○○○○\hbox{}A\hbox{}□□□□ -\end{verbatim} -\end{quote} -が -\begin{quote} -\setbox0=\hbox{h}\dimenA=\ht0 \advance\dimenA-1ex -□□ -\leavevmode\rlap{\raise.67\dimenA\hbox{\char'27}}\kern\xkanjiskip A% -\kern\xkanjiskip △△△△ -\setbox0\hbox{ABC}\dimenA=\wd0\advance\dimenA-\xkanjiskip -\kern\xkanjiskip ABC\kern-\dimenA ○○○○ -\kern\xkanjiskip A\kern\xkanjiskip □□□□ -\end{quote} -となる。先ほどのリストを処理して期待する結果は、次のようだと思われる。 -\begin{quote} -\setbox0=\hbox{h}\dimenA=\ht0 \advance\dimenA-1ex -□□ -\kern\xkanjiskip -\leavevmode\rlap{\raise.67\dimenA\hbox{\char'27}}\kern0pt A% -\kern\xkanjiskip △△△△ -\setbox0\hbox{ABC}\dimenA=\wd0% -\kern\xkanjiskip ABC\kern-\dimenA ○○○○ -\kern0pt A\kern0pt □□□□ -\end{quote} -この版では、 -\begin{quote} -□□\AA △△△△\hbox to0pt{ABC\hss}○○○○\hbox{}A\hbox{}□□□□ -\end{quote} -となる。 -\AA の前に四分アキが入っていなければ、それはシフトされたボックスの前後に -アキが入らないからである。$\beta7$の実装で``{\char'27}''と``A''の位置が -ずれているのは、シフトされたボックスの前には入れないのは変わらないけれども、 -後ろで必ず入れないようにするのをやめたためである。 -また、$\beta7$では、ボックスの中身の最後が文字以外でも、空でも四分アキの -挿入に影響をさせないようにしていたため、幅がゼロのボックスを作成しても、 -参照点の位置が戻らないし、処理の抑制もされなくなっていた -\footnote{これらの問題は$\beta11$で修正。}。 - -\appendix -\section{自動挿入されるスペースの種類} -p\TeX{}では、日本語文書をきれいに組版するために、 -和文と和文の間、和文と欧文の間に自動的にスペースを入れるように拡張している。 -欧文と欧文の間は、\TeX{}のメカニズムそのままである。 - -和文と和文の間に入れるスペースの量は、\cs{kanjiskip}という長さレジスタに -設定をする。和文と欧文との間は\cs{xkanjiskip}という長さレジスタである。 -p\TeX{}のデフォルトでは、 -\begin{verbatim} - \kanjiskip=0pt plus .4pt minus .4pt - \xkanjiskip=.25zw plus 1pt minus 1pt -\end{verbatim} -となっている。この設定は、 -\cs{kanjiskip}は標準でゼロポイント、場合によって$\pm0.4$ポイント分だけ伸縮、 -\cs{xkanjiskip}は標準でその時点の和文フォントの幅の$1/4$、 -場合によって$\pm1$ポイント分だけ伸縮しても良いということを意味している。 - -\cs{kanjiskip}も\cs{xkanjiskip}も、段落の終わりか、\cs{hbox}の最後の時点 -の値が有効となる。したがって、ひとつの段落内や\cs{hbox}内で複数回指定を -しても、その最後の指定によって処理される。 - -ただし「、」や「(」のように、特定の文字が連続する場合、そのまま全角幅 -で並べ、間に\cs{kanjiskip}を挿入すると文字の間が離れすぎてしまう。 -このときには、\cs{kanjiskip}ではなく、JFM(Japanese Font Metric)で設定 -されているスペースの量が使われる。 - -\cs{xkanjiskip}に関しても、和文と「;」、「(」と和文、欧文と「。」、 -「…」と前後の欧文のような箇所には、スペースを挿入しないほうがきれいに -見える。そこで、特定の欧文の文字に対して、\cs{xkanjiskip}の挿入を制御 -するために\cs{xspcode}が用意されている。 -特定の和文に対しては\cs{inhibitxspcode}を用いて制御する。 - - -\section{スペースに関するプリミティブ} -p\TeX{}で拡張した、スペースに関するプリミティブは以下のとおり。 - -\subsection{\cs{kanjiskip}, \cs{autospacing}, \cs{noautospacing}} -\cs{kanjiskip}は、 -漢字と漢字の間に自動的に挿入するスペースの量を格納する長さレジスタである。 - -\cs{autospacing}と\cs{noautospacing}は、 -漢字と漢字の間にスペースを挿入するかどうかを指定するのに用いる。 -\cs{autospacing}を指定すると自動的に挿入される。 -\cs{noautospacing}を指定すると漢字間へのスペース挿入は抑制される。 - -\subsection{\cs{xkanjiskip}, \cs{autoxspacing}, \cs{noautoxspacing}} -\cs{xkanjiskip}は、 -漢字と英字の間に自動的に挿入するスペースの量を格納する長さレジスタである。 - -\cs{autoxspacing}と\cs{noautoxspacing}は、 -漢字と英字の間にスペースを挿入するかどうかを指定するのに用いる。 -\cs{autoxspacing}を指定すると自動的に挿入される。 -\cs{noautoxspacing}を指定すると漢字間へのスペース挿入は抑制される。 - -\subsection{\cs{xspcode}} -\cs{xspcode}は、指定した英字と漢字との間のスペース挿入を -どのように\textgt{許可}するかの設定をするプリミティブである。 -動作は、つぎのいずれかの数値で指定をする。 - -\begin{center} -\begin{tabular}{ll} -0 & 前後の漢字との間へのスペースの挿入を禁止する。\\ -1 & 直前の漢字との間にだけスペースの挿入を許可する。\\ -2 & 直後の漢字との間にだけスペースの挿入を許可する。\\ -3 & 前後の漢字との間にスペースの挿入を許可する。\\ -\end{tabular} -\end{center} - -初期値は、\texttt{[0-9A-Za-z]}は3、それ以外はゼロになっている。 -ただし、以下の文字については、kinsoku.texで別の値に初期化されている。 -括弧内はASCII文字コード(16進数)である。 - -\begin{center} -\begin{tabular}{l@{\hspace{2.5zw}}l@{\hspace{2.5zw}}l@{\hspace{2.5zw}}l} -\texttt{(}=1 (\hex{28}) & \texttt{)}=2 (\hex{29}) & -\texttt{[}=1 (\hex{5B}) & \texttt{]}=2 (\hex{5D})\\ -\texttt{`}=1 (\hex{60}) & \texttt{'}=2 (\hex{27}) & -\texttt{;}=2 (\hex{3B}) & \texttt{,}=2 (\hex{2C})\\ -\texttt{.}=2 (\hex{2E}) \\ -\end{tabular} -\end{center} - -ただし、\cs{xspcode}の設定は、文字コードに対してであり、フォントによって -異なる値を指定することはできない。したがって\hex{60}の位置にある文字は、 -cmr10では``\textrm{`}'', cmmi10では``$\ell$'', cmex10では``$\coprod$''で -あるが、これらの文字はすべて\cs{xspcode}=1として処理される。 - -\subsection{\cs{inhibitxspcode}} -\cs{inhibitxspcode}は、指定した漢字と英字の間のスペース挿入を -どのように\textgt{抑制}するかの設定をするプリミティブである。 -動作は、つぎのいずれかの数値で指定をする。 - -\begin{center} -\begin{tabular}{ll} -0 & 漢字と英字との間のスペースの挿入を禁止する。\\ -1 & 直前の英字との間のスペースの挿入を禁止する。\\ -2 & 直後の英字との間のスペースの挿入を禁止する。\\ -3 & 前後の英字との間のスペースの挿入を許可する。\\ -\end{tabular} -\end{center} - -初期値は、すべての漢字について3である。 -ただし、以下の文字については、kinsoku.texで別の値に初期化されている。 - -\begin{center} -\begin{tabular}{l@{\hspace{2.5zw}}l@{\hspace{2.5zw}}l@{\hspace{2.5zw}} - l@{\hspace{2.5zw}}l@{\hspace{2.5zw}}l} -、=1 & 。=1 & ,=1 & .=1 & ;=1 & ?=1\\ -(=2 & )=1 & [=2 & ]=1 & {=2 & }=1\\ -‘=2 & ’=1 & “=2 & ”=1 & 〔=2 & 〕=1\\ -<=2 & >=1 & 《=2 & 》=1 & 「=2 & 」=1\\ -『=2 & 』=1 & 【=2 & 】=1 & −=0 & 〜=0\\ -…=0 & ¥=0 & °=0 & ′=1 & ″=1\\ -\end{tabular} -\end{center} - -\end{document} -- cgit v1.2.3