diff options
author | Karl Berry <karl@freefriends.org> | 2010-05-18 18:19:00 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-05-18 18:19:00 +0000 |
commit | a9eff7800c1787b0af5f140437003eea9e53cbb3 (patch) | |
tree | 6a6bee46035290fe65d79ff8cae90279eca08759 /Master/texmf-dist/doc/ptex/base | |
parent | 8c3ddaae131e42eb2318cfe675eaff5a184892e1 (diff) |
towards 2010 pretest: enabling restricted write18, PDF 1.5 by default, ptex support files, other new programs, with i386-linux binaries
git-svn-id: svn://tug.org/texlive/trunk@18336 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/ptex/base')
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/COPYRIGHT | 26 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/COPYRIGHT.txt | 29 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/Changes.txt | 302 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/INSTALL.txt | 83 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/README.txt | 32 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/jfm.tex | 168 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/jtex.tex | 653 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/jtexdoc.tex | 403 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/ptexdoc.tex | 924 | ||||
-rw-r--r-- | Master/texmf-dist/doc/ptex/base/ptexskip.tex | 387 |
10 files changed, 3007 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/ptex/base/COPYRIGHT b/Master/texmf-dist/doc/ptex/base/COPYRIGHT new file mode 100644 index 00000000000..8127d46a033 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/COPYRIGHT @@ -0,0 +1,26 @@ +Copyright (C) 2009, 2010 ASCII MEDIA WORKS. +Copyright (C) 1987, 1995 ASCII Corporation. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Master/texmf-dist/doc/ptex/base/COPYRIGHT.txt b/Master/texmf-dist/doc/ptex/base/COPYRIGHT.txt new file mode 100644 index 00000000000..77a79ff0f89 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/COPYRIGHT.txt @@ -0,0 +1,29 @@ +(注) 以下は日本語の方が分かりやすい人のために、英語の著作権表示を訳し +た文章である。正式な著作権は、英語の原本に従う。 + +Copyright (C) 1987, 1995 ASCII Corporation. +All rights reserved. + +変更の有無にかかわらず、ソースおよびバイナリ形式の再配布および利用は、 +以下の条件を満たしていれば、これを許可する。 + +1. ソース・コードの再配布は、上記の著作権表示、この条件項目、および、 +以下の免責事項を保存しなければならない。 + +2. バイナリ形式の再配布は、上記の著作権表示、この条件項目、および、以 +下の免責事項を、その配布に付随する説明書、あるいはその他の資料のいずれ +かに明記しなければならない。 + +3. 前もって特別に許諾を得ない限り、このソフトウェアから派生した製品の +推奨や販売促進のために、この著作権者名を利用してはならない。 + +このソフトウェアは「このままの形で」提供され、明示的あるいは言外の保証 +は、商用利用および特定目的への適合に対する言外の保証も含み、またこれら +だけに限らず、存在しない。たとえ以下のような損害の可能性を示唆されてい +たとしても、どのような形にしろこのソフトウェアの利用から発生した問題に +おいて、この著作権者は、(代替製品やサービスの調達; 利用権、データ、あ +るいは利益の損失; あるいは営業の中断を含む、またこれらだけに限らず)直 +接的に、間接的に、偶然に、特別に、懲罰上、あるいは、必然的に生じてしまっ +た損害に対し責任はなく、いかなる責任理論上でも契約の有無に係わらず厳密 +な責任はなく、また(過失あるいはその他を含む)不法行為に対しても責任はな +い。 diff --git a/Master/texmf-dist/doc/ptex/base/Changes.txt b/Master/texmf-dist/doc/ptex/base/Changes.txt new file mode 100644 index 00000000000..bf36ab9b15e --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/Changes.txt @@ -0,0 +1,302 @@ +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<matsui@denken.or.jp>) 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/base/INSTALL.txt b/Master/texmf-dist/doc/ptex/base/INSTALL.txt new file mode 100644 index 00000000000..f20f38f3c2c --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/INSTALL.txt @@ -0,0 +1,83 @@ +=========================================================================== +日本語 TeX バージョン 3.141592, p3.1.9 +(tetex-src-3.0 以降用) +=========================================================================== +※ 必要ならば、インストール作業をする前に、 + 旧バージョンの TeX システムのバックアップをしてください。 + +※ space code を含んだファイル名がサポートされています。 + ただし、連続する二つ以上の space codes は使用しないでください: + platex "a b c d e.tex" は ok ですが + platex "a b.tex" は ng です。 + +--------------------------------------------------------------------------- +● ソースファイル +--------------------------------------------------------------------------- +pTeX をインストールするには、つぎのファイルが必要です。 + + ・ptex-src-3.1.9.tar.gz (pTeX ソースファイル) + ・ptex-texmf-2.3.tar.gz (pTeX ライブラリファイル) + ・teTeX-src-3.0.tar.gz (teTeX ソースファイル) + ・teTeX-texmf-3.0.tar.gz (teTeX ライブラリファイル) + +これらは、以下のサイトなどから入手可能です。 + +・pTeX 関連 + ftp://ftp.ascii.co.jp/pub/TeX/ascii-ptex/ + ftp://ftp.ring.gr.jp/pub/text/TeX/ascii-ptex/ + ftp://ftp.media.kyoto-u.ac.jp/TeX/ASCII-pTeX/ + ftp://bash.cc.keio.ac.jp/pub/TeX/ascii-ptex/ + ftp://ftp.cs.titech.ac.jp/pub/text/TeX/ASCII-pTeX/ + ftp://ftp.tut.ac.jp/TeX/ASCII-pTeX/ + ftp://ftp.u-aizu.ac.jp/pub/tex/ASCII-pTeX/ + ftp://ftp.foretune.co.jp/pub/TeX/ascii-ptex/ + +・teTeX 関連 + ftp://ftp.ring.gr.jp/pub/text/CTAN/systems/unix/teTeX/current/distrib/ (JPN) + ftp://cam.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (UK) + ftp://dante.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (GER) + ftp://tug.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/ (US) + +--------------------------------------------------------------------------- +● インストール +--------------------------------------------------------------------------- +1. teTeX のライブラリファイルを展開します。 + + mkdir -p /usr/local/teTeX3/share/texmf-dist + tar zxf tetex-texmf-3.0.tar.gz \ + -C /usr/local/teTeX3/share/texmf-dist + +2. ptex のライブラリファイルを展開します。 + + mkdir -p /usr/local/teTeX3/share/texmf + tar zxf ptex-texmf-2.3.tar.gz -C /usr/local/teTeX3/share/texmf + +3. teTeX のソースファイルを展開します。 + + tar zxf tetex-src-3.0.tar.gz -C /usr/local/src + +4. ptex のソースファイルを展開します。 + + tar zxvf ptex-src-3.1.9.tar.gz \ + -C /usr/local/src/tetex-src-3.0/texk/web2c + +5. teTeX ソースファイルを展開したディレクトリに移動し、configure コマンド + を実行します。prefix オプションには、teTeX ライブラリをインストール + したディレクトリを指定します。 + + cd /usr/local/src/tetex-src-3.0 + ./configure --prefix=/usr/local/teTeX3 + make + make install + +6. ptex のソースディレクトリに移動し、configure コマンドを実行します。 + このとき、デフォルトの漢字コードを指定してください。 + + cd /usr/local/src/tetex-src-3.0/texk/web2c/ptex-src-3.1.9 + ./configure euc (EUCコードの場合) + ./configure jis (JISコードの場合) + ./configure sjis (シフトJISコードの場合) + make + make install + +=============================================================== EOT ===== diff --git a/Master/texmf-dist/doc/ptex/base/README.txt b/Master/texmf-dist/doc/ptex/base/README.txt new file mode 100644 index 00000000000..b8c2a4ba738 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/README.txt @@ -0,0 +1,32 @@ +--------------------------------------------------------------------------- +● 日本語 TeX(pTeX: publishing TeX)について +--------------------------------------------------------------------------- + + * 日本語 TeX(pTeX)は、本格的な商業出版に耐える TeX を開発する + ことを目標にしています。 + + * pTeX は、横組み専用の「日本語 TeX」に縦組み機能を追加したもの + です。日本語化のバグフィックスはすべて pTeX に対してのみ行ない、 + 横組のみの日本語 TeX に対しては行ないませんので、ご了承ください。 + + * pTeX は、WEB のチェンジファイルを使って実現されています。 + + * インストールの手順については、付属の INSTALL.txt ファイルを参照 + してください。 + + * pTeX の使用および配付に関しては、付属の COPYRIGHT ファイルを + 参照してください。 + +--------------------------------------------------------------------------- +● 問い合わせ先など +--------------------------------------------------------------------------- +pTeX についてのお問い合わせは、電子メールで www-ptex@ascii.co.jp 宛て +にお願いします。 + +pTeX の WEB ページ(http://www.ascii.co.jp/pb/ptex/)では、バグ情報や +インストールのヒント、pTeX で追加されたプリミティブ一覧などを掲載して +います。こちらもご覧ください。 + +------------------------------------- +株式会社アスキー 出版技術グループ +=============================================================== EOT ===== diff --git a/Master/texmf-dist/doc/ptex/base/jfm.tex b/Master/texmf-dist/doc/ptex/base/jfm.tex new file mode 100644 index 00000000000..9e97f594e38 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/jfm.tex @@ -0,0 +1,168 @@ +\documentclass[twoside]{jarticle} +\addtolength{\textwidth}{0.9in} +\setlength{\oddsidemargin}{.4in} +\setlength{\evensidemargin}{.4in} +\pagestyle{headings} +\begin{document} +\section{JFM file format} +%JFMファイルフォーマット +JFMファイルのフォーマットは、 +基本的にはTFMファイルのフォーマットに準拠しており、 +TFMを拡張した形になっている。 +ここでは、主にその拡張部分について説明を行い、 +その他の部分に関しては、 +\TeX\ the program等のTFMの説明を参照してもらいたい。 +\subsection{JFMファイルの構成} +JFMファイル全体の構成は、 +Table\ref{構成}(\pageref{構成}ページ)に示すとおりである。 \\ +ここでTFMと異なるのは次の点である。 +\begin{enumerate} +\item {\it char\_type}のテーブルが付け加えられたこと。 +\item {\it ligature}の換わりに{\it glue}のテーブルが設けられたこと。 +\item 2に関連して、{\it lig\_kern}から{\it glue\_kern}テーブルへ変更されたこと。 +\item これらに伴い、先頭のファイル内の各部分を規定する + パラメータ表が変更されている。 + また、オリジナルのTFMとの区別のためにidを付加している。 +\end{enumerate} + +\subsection{char\_type} +今回の\TeX の日本語化においては、同一の文字幅、 +高さ前後に挿入されるグルー等、その文字が持つ属性全てが +同じものを、1つの{\it `char\_type'}として英字フォントの1キャラクタと +同様にして扱うようにしている。 +そこで、漢字の2バイトコードとこの{\it char\_type}との対応付けを +このテーブルを使って行う。 + +このテーブルの各エントリーは1ワードで構成され、 +上位半ワードに漢字コード、下位半ワードに{\it char\_type}を持ち、 +テーブル内にはコードの値の順番に収められていなければならない。 +またこのテーブルの先頭には、デフォルトのインデックスとして +漢字コード及び{\it char\_type}の項が0のものが、 +必ず1つ存在しなければならず、このテーブルに登録されていない文字は、 +$char\_type = 0$として扱う。 +つまり、このデフォルト以外の文字幅、カーン等の属性を持つキャラクタ +のコードとタイプが2番目以降のエントリーとして存在しなければならない。 + +\subsection{char\_info} +{\it char\_type}をインデックスとしてこのテーブルを +参照することにより、各{\it char\_type}の属性を検索する。 +各テーブルへのインデックス等の情報を次の順番でパッキング +して1ワードに収めてある。 +\begin{description} +\item{width\_index(8bits)} width\_table へのインデックス +\item{height\_index(4bits)} height\_table へのインデックス +\item{depth\_index(4bits)} depth\_table へのインデックス +\item{italic\_index(6bits)} italic\_table へのインデックス +\item{tag(2bits)} + \begin{description} + \item{tag=0} {\it remainder}の項は無効であり使用しないことを示す。 + \item{tag=1} {\it glue\_kern}プログラムが{\it glue\_kern[remender]} + からに収めれれていることを示す。 + \item{tag=2、3} 使用しない。 + \end{description} +\item{remainder(8bits)} +\end{description} +% +\subsection{glue\_kern} +特定のキャラクタタイプの組み合せ時に挿入すべきglue又はkernを +簡単なプログラム言語によって指定する。 +各命令は、以下の4バイトで構成される。 +\begin{description} +\item{第1バイト} 128以上の時、このワードでプログラム終了。 +\item{第2バイト} + \begin{itemize} + \item 次の文字のキャラクタタイプが、 + このバイトで示すキャラクタタイプと同じ場合、 + 第3バイトの処理を実行し、プログラム終了。 + \item そうでなければ次のステップへ。 + \end{itemize} +\item{第3バイト} + この値によってグルーを扱うかカーンを扱うかを規定する。 + \begin{itemize} + \item 127以下の場合{\it glue[remainder$\times$3]}のグルーを挿入。 + \item 128以上の場合{\it kern[remainder]}のカーンを挿入。 + \end{itemize} +\item{第4バイト} remainder +\end{description} +\subsection{glueテーブル} +3ワードで1つのグルーを構成する。 +各値は、$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][6][7]} 漢字--英字フォント間に挿入するグルーのデフォルト値。 +\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|}{patam} \\ +\multicolumn{2}{|c|}{}\\ \hline +\end{tabular} +\end{minipage} +\begin{minipage}[b]{3.3in} +\noindent +\begin{tabular}{l} +$id=$ JFM\_ID number. ($=11$) \\ +$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. \\ +$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/base/jtex.tex b/Master/texmf-dist/doc/ptex/base/jtex.tex new file mode 100644 index 00000000000..0b3da9aabf9 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/jtex.tex @@ -0,0 +1,653 @@ +\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{kanjixskip}}というレジスタを +設け、その値を使う。 +さらに、全角文字の前後に現れる半角文字の内の何れに対して、 +スペースを挿入すべきかを指定するために、 +内部に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/base/jtexdoc.tex b/Master/texmf-dist/doc/ptex/base/jtexdoc.tex new file mode 100644 index 00000000000..e6bea93d3dd --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/jtexdoc.tex @@ -0,0 +1,403 @@ +\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{xspjcode}`?=0\\ + \cs{xspjcode}`(=2\\ + \cs{xspjcode}`)=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}$は、アスキーコードで `n' を示すわけですから禁則の対象文字 + とはなっていないはずです。 + + したがって、今のままでは `\{' のような文字に対して自動的に禁則処理や + グルーの自動挿入を行うことは不可能です。 +\end{itemize} +%% cmsy の \{ は 0x6E でなく 0x66 (2001/08/24) +\end{document} diff --git a/Master/texmf-dist/doc/ptex/base/ptexdoc.tex b/Master/texmf-dist/doc/ptex/base/ptexdoc.tex new file mode 100644 index 00000000000..cecedc371c5 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/ptexdoc.tex @@ -0,0 +1,924 @@ +\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 \chrwidowpenalty) + \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 \chrwidowpenalty) + \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/base/ptexskip.tex b/Master/texmf-dist/doc/ptex/base/ptexskip.tex new file mode 100644 index 00000000000..c2236714b95 --- /dev/null +++ b/Master/texmf-dist/doc/ptex/base/ptexskip.tex @@ -0,0 +1,387 @@ +\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{<ken-na at ascii.co.jp>}): + 株式会社 アスキー 出版技術部}} +\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}<t>{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} |