summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/bxbase/README
blob: 09fc3a785972048c6656f2f86aed6a9946198b58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
==================================================
== BXbase バンドル v0.5  <2010/06/15>           ==
==           by「ZR」(八登 崇之/Takayuki YATO)==
==                      <zrbabbler@yahoo.co.jp> ==
==================================================
(This file is encoded in UTF-8,)

欧文 LaTeX2e における多言語文書およびそれに関わるマクロパッケージの作成
を支援する基本的な機能を提供する。

  - bxutf8 入力エンコーディング: UTF-8 入力
  - bxutf8x 入力エンコーディング: UTF-8 入力
  - bxbase パッケージ: 基礎ライブラリ
  - bxucs パッケージ: 欧文 Unicode 文字出力

※ 対応環境は各々のパッケージの解説を参照。

■ 本ソフトウェアの一次配布サイト(作者のサイト)

    En toi Pythmeni tes TeXnopoleos 〜電脳世界の奥底にて〜
    http://zrbabbler.hp.infoseek.co.jp/

    ※ 以下のページに一部機能の使用例を紹介した。
    「Unicode による文字入力」
    http://zrbabbler.hp.infoseek.co.jp/unichar.html
    「BXbase パッケージ」
    http://zrbabbler.hp.infoseek.co.jp/bxbase.html

■ インストール

    TDS 1.1 に従ったシステムでは、各ファイルを次の場所に移動する。
    ・*.sty, *.def → $TEXMF/tex/latex/BXbase/
    (残りのファイルは不要)

    W32TeX を C:\usr\local にインストールした場合の例。
    ・*.sty, *.def → C:\usr\local\share\texmf-local\tex\latex\BXbase

--------------------------------------------------
 bxutf8 入力エンコーディング (v0.5) -- UTF-8 入力 
--------------------------------------------------

LaTeX2e 標準の utf8 入力エンコーディングを拡張して、utf8 で処理できない
文字について符号値を含む中間形式に変換する。この中間形式は他のパッケージ
が処理することが想定されている。

■ 対応環境

    欧文 LaTeX2e / pLaTeX2e / upLaTeX2e

■ 読込

    inputenc のオプションとして指定する。
      \usepackage[bxutf8]{inputenc}

    inputenc が読み込み済の場合は \inputencoding を使う。
      \inputencoding{bxutf8}

    本文中で他の入力エンコーディングとの間で切り替えることも可能であるが、
    その場合は、一度プレアンブルのどこかで入力エンコーディングを bxutf8
    に切り替えなければならない(bxutf8.def が内部で読み込む utf8.def の
    仕様による)。本文での切り替えはあまりテストされていないので、バグが
    ある可能性が高い ;-)

■ 機能

    bxutf8 は utf8 の拡張である。utf8 は UTF-8 で書かれた文字を次のよう
    に処理する。その文字が出力方法を知っている—つまり読込済のフォント
    エンコーディングに含まれる—文字の場合、それを LaTeX の標準的な内部
    形式(\"a や \OE 等)に変換して後をフォントエンコーディング(fontenc)
    の処理に任せる。しかし、知らない文字の場合はエラーになる。

    bxutf8 は「知らない文字」の場合の処理を変更し、これを \bxUHex{XXXX}
    の形式に変換する。ここで XXXX は該当の文字のコード値の 16 進表現で
    ある。\bxUHex は該当の文字を出力することが想定されているが、これの
    定義(「ドライバ」と呼ぶことにする)は他のパッケージで与えられる。
    bxutf8 自身のドライバの定義は単にエラーを出すだけである。

■ 注意事項

    - UTF-8 のバイト列から \bxUHex の形式までは完全展開可能になっている。
      また、\bxUHex の定義は robust でなければならない。これは他の入力
      エンコーディングと共通の性質である。
    - 0.5 版の改訂で、BMP 外(U+10000 以上)の符号値に対応した。
    - pLaTeX/upLaTeX の場合、入力漢字コードは UTF-8 (-kanji=utf8) である
      必要がある。この場合、処理系により和文トークンと解釈される文字以外
      が bxutf8 の処理に回る。
    - utf8 が扱える文字については飽くまでも utf8 と全く同じように処理
      されることに注意。例えば、フォントエンコーディングに OT1 と T2A が
      読み込まれている状態で「Д」が入力されると、utf8 はこれを \CYRD に
      変換するが、これは現在のフォントエンコーディングが OT1 である時は
      エラーになる(たとえ \bxUHex がフォントエンコーディングに関わらず
      動作するとしても)。


---------------------------------------------------
 bxutf8x 入力エンコーディング (v0.3) -- UTF-8 入力 
---------------------------------------------------

Unicode パッケージ(ucs パッケージ)が使用する utf8x 入力エンコーディング
を拡張して、bxutf8 と同様の機能を実現したものである。

■ 対応環境

    欧文 LaTeX2e / pLaTeX2e / upLaTeX2e

■ 読込

    inputenc のオプションとして指定する。
      \usepackage[bxutf8]{inputenc}

    inputenc が読み込み済の場合は \inputencoding を使う。
      \inputencoding{bxutf8}

    後者の使用については、bxutf8 と同じ制限の他に、utf8x に特有の制限
    がある。

■ 機能

    基本的には bxutf8 と同じなので、相違点を挙げておく。

    - utf8x (ucs) のプログラムは utf8 と比して遥かに複雑である。従って
      bxutf8x が正しく実装されているかについてはあまり自信が無い。
    - bxutf8x は \bxUInt という内部命令を用いる。
    - utf8x は実際にフォントエンコーディングが読み込まれているかに関わら
      ず広範な範囲の文字を自分で処理しようとする。結果的に、欧文の文字に
      関してはほとんど \bxUInt に変換されない。CJK 文字に対しては utf8x
      は既定では処理しないので \bxUInt に変換される。


--------------------------------------------
 bxbase パッケージ (v0.5) -- 基礎ライブラリ 
--------------------------------------------

他の BX シリーズのパッケージの下請けが主な役目である。文書作成者がこの
パッケージを読み込む場面は少ない。

■ 対応環境

    欧文 LaTeX2e / pLaTeX2e / upLaTeX2e

■ 読込

    \usepackage で読み込む。オプションはない。

■ pxbase パッケージとの関係

    bxbase パッケージと pxbase パッケージ(PX シリーズ)は大部分の機能を
    共通にしている。両方読み込んだ場合は、共通する機能については版が
    新しい方が採用される。過去互換性を崩す更新は行われないので、このこと
    に関して文書作成者が気にする必要はないはずである。

    なお、現在の所、bxbase のみに存在する機能はない。

■ 機能

    DVI special 出力の命令。

    \recordpapersize
      次の形の papersize special 命令を DVI の先頭に出力する。
        papersize=<幅>,<高さ>
      (幅と高さは現在の \paperwidth と \paperheight の値。)

    \dvipdfmxmapline{<テキスト>}
      dvipdfmx のマップ指定を文書中で行う。
      ※次の形の papersize special 命令を DVI の先頭に出力する。
        pdf:mapline <テキスト>

    \dvipdfmxmapfile{<ファイル名>}
      dvipdfmx のマップファイル指定を文書中で行う。
      ※次の形の papersize special 命令を DVI の先頭に出力する。
        pdf:mapfile <ファイル名>

    符号値による文字入力のための命令。

    \Ux{<コード値>,...}
    \UI{<コード値>,...}
      Unicode コード値による入力を行う。\Ux は欧文用、\UI は和文用(I は
      Ideographic の意味)。コード値は以下の形式で表す。コンマで区切って
      複数文字入力できる。
        - <16進数>:  A72C, 02000B, 1bd 等。
        - +<10進数>: +254, +0937 等。
        - '<8進数>:  '376, '1651 等。
      Unicode 文字の出力には次の順番で利用可能な最初の機能を用いる。(\UI
      の場合 3) を飛ばす。)
        1) zxjatype パッケージ。この場合、その機構に従って出力される。\UI
           は必ず和文フォントで出力し、\Ux は和文/欧文切替の対象となる。
        2) XeTeX の Unicode 出力。
        3) [\Ux のみ] bxums パッケージ。
        4) upTeX の和文 Unicode 出力。
        5) UTF/OTF/pxotf パッケージ。
        6) ums/bxsuika パッケージ。
      どれも使えない場合は「16進表現による代替表現」になる。

    \AJ{<コード値>,...}
      Adobe-Japan1 のコード値による入力を行う。コード値は 10 進数で指定
      する。出力には次の順番で利用可能な最初の機能を用いる。
        1) zxotf パッケージ。
        2) UTF/OTF/pxotf パッケージ。
      どれも使えない場合は代替表現になる。

    \JI{<コード値>,...}
      いわゆる「JIS コード」(JIS X 0208 の GL 表現)のコード値による入力
      を行う。コード値指定の方法は \Ux と同じ。出力には (u)pTeX の JIS
      コード和文出力の機能を使う。使えない場合は代替表現になる。

    \KI{<コード値>,...}
      いわゆる「区点コード」のコード値による入力を行う。コード値指定は
      以下のいずれかの方法で指定する。
        - RRCC : RR は区番号、CC は点番号を 10 進 2 桁で表したもの。
        - PRRCC : P は面番号。JIS X 0213 のための指定。
      出力には (u)pTeX の JIS コード和文出力の機能を使う。使えない場合は
      代替表現になる。JIS X 0213 の文字を出力したい場合は、現在の和文
      フォントのエンコーディングが JIS X 0213 に対応するものである必要が
      ある。さらに、第 2 面の文字を出力する場合には pTeX の内部漢字コード
      が sjis でなければならない。

    \bxUx / \bxUI / \bxAJ / \bxJI / \bxKI
       \Ux 等は非常に短い名前なので他のパッケージと衝突する恐れがあり、
       そこでこのパッケージでは既に同名の命令がある場合は上書きしない
       ようにしている。\bxUx 等はそれぞれ \Ux 等と同じで、先のような場合
       にも常に使える。

    加えて、このパッケージは bxutf8 の為のドライバ \bxUHex および bxutf8x
    の為のドライバを \Ux に相当するものに設定する。

    以下のものは本来は和文用の命令であるが、理由があって bxbase にも含めて
    いる。pxbase と共通なので詳細は PXbase の説明書を参照してほしい。

    \safecaret
      TeX エスケープ形式(^^ab)の解釈が失敗するのを回避する。

    Bwbel 関係の命令。

    \bxcaptionlanguage{<言語名>}
      Babel では、通常言語が切り替わるとキャプションや日付の文字列が切り
      替わる。この命令を実行すると、文字列は指定された言語のもので固定
      され、Babel の言語切替の命令に追随しなくなる。この命令自体はプレ
      アンブル中で何回でも使用できて最後のものが有効になる。引数には有効
      な言語オプションの名前の他に以下のものが指定できる。
        - main : 基底言語、すなわち Babel で最後に読み込まれた言語だが
          次に述べる \bxmainlanguage で変更可能。
        - default : 文書クラスで指定されたものをそのまま用いる。日本語
          の文書クラスで Babel を用いる時に便利である。
      この命令の意義については後の「キャプション文字列の切替機能について」
      の節を参照。

    \bxmainlanguage{<言語名>}
      基底言語、すなわち \begin{document} の直後において有効となる言語を
      設定する。通常は Babel において最後に読み込まれた言語オプションが
      基底言語になる。

■ キャプション文字列の切替機能について

    Babel の機能の 1 つとして、言語の切替に伴って、キャプションの文字列
    (「参考文献」や「図」等)および日付の書式をその言語用のものに切り替え
    るというものがある。これにより、ある言語(例えばスロベニア語)の為の
    文書クラスがなくても英語用のクラスと Babel の言語切替でスロベニア語
    のキャプションの文書が作成できる(レイアウトがその言語の使用圏で許容
    されるかの問題は残るが)。だがこの目的には、プレアンブルでキャプション
    言語を 1 回指定できればよく、文書途中での言語切替にまでキャプション
    が追随する利点はあまりなく、場合によっては弊害があると思われる。この
    ような場合は
      \bxcaptionlanguage{main}
    を実行すれば、キャプションは基底言語(\bxmainlanguage の説明参照)で
    固定され以後は変更されない。また
      \bxcaptionlanguage{spanish}
    のように直接に言語名を指定することもできる。

    日本語の場合はもっと特殊な事情がある。日本語のレイアウトは欧米の言語
    のものとは大きく異なるので、日本語の文書を作成する場合には日本語用の
    文書クラスが用いられるのが普通であり、そこでは当然キャプションは既に
    日本語になっている。このような場合は
      \bxcaptionlanguage{default}
    を実行すれば、キャプションは文書クラスで設定されたものに固定され、
    以後は変更されない。

■ 開発者向け機能

    \bxUHex{<コード値16進表記>}
      bxutf8 が構成する内部表現。用いる機能は \Ux と同じ。
    \bxUInt{<整数>}
      bxutf8x が構成する内部表現。用いる機能は \Ux と同じ。

    \bxInputDefFIle{<ファイルベース名>}
      拡張子 .def のファイルを \usepackage と同じ方式で読み込む。
    \bxCheckCPart{<ファイルベース名>}
      別のファイル(.sty/.def)との版の比較。
    \bxNullify\CS
      マクロ \CS を無効にする。
    \bxDebug{<テキスト>}
      デバッグメッセージの表示。
    \bxCheckMA<テキスト>\bxEndCheckMA
      \edef 中ではこの部分がエラーを出す命令に展開される。
    \bxIfPrimitive\CS{<yes>}{<no>}
      現在の \CS の定義が(同名の)プリミティブかの判定。
    \bxEngineTypeX  [整数定数]
      1=pTeX拡張; 2=XeTeX拡張; 3=Omega拡張; 0=以上に該当せず
    \bxEngineTypeY  [整数定数]
      1=eTeX拡張; 3=pdfTeX拡張; 0=以上に該当せず
    (upTeX か否かの判定は ifuptex パッケージを用いる)

    \bxTrivLangDef{<言語名>}
      中身が空の Babel 言語オプションを生成する。

    \bxToHexTwo{<整数>}      [%02X 形式; 0x00〜FF]
    \bxToHexThree{<整数>}    [%03X 形式; 0x000〜FFF]
    \bxToHexFour{<整数>}     [%04X 形式; 0x0000〜FFFF]
    \bxToHexFive{<整数>}     [%05X 形式; 0x00000〜FFFFF]
    \bxToHexFiveX{<整数>}    [%05X 形式; 0x00000〜FFFFF ※1]
    \bxToHexEight{<整数>}    [%08X 形式; 0x00000000〜7FFFFFFF]
    \bxToHexTiny{<整数>}     [%X 形式; 0x0〜FF]
    \bxToHexSmall{<整数>}    [%X 形式; 0x0〜7FFF]
    \bxToHexUC{<整数>}       [%04X 形式; 0x0000〜10FFFF ※2]
      16 進表記を \bxHex に返す。UC は 4〜6 桁での表記。
      ※1 0xFFFFF を超える場合は "FFFFF" になる
      ※2 XeTeX/LuaTeX/upTeX の場合、\char が可能な範囲。

    \bxCodeValueSeq\CS{<文字列>}    [16進]
    \bxCodeValueSeqD\CS{<文字列>}   [10進]
      \Ux, \UI が使っている、コード値の列を解釈するルーチン。

    \bxAssign<代入文>\relax
      代入文が完全(ゴミがない)かの判定しスイッチ \ifbxOk に返す。

    \bxToLower{<文字列>}
    \bxToUpper{<文字列>}
      小文字/大文字に変換したものを \bxRes に返す。

    \bxDocumentSpecial{<テキスト>}
      \AtBeginDvi を普通に用いて DVI の先頭部に special を出力する。
    \bxDocumentSpecialUrgent{<テキスト>}
      DVI のなるべく先頭(他の special より前)の位置に special を出力。

    \bxEnableSafeCaret
      safe caret 機能を使用可能にしておく。すなわち、プレアンブルでこの
      命令が呼ばれなかった場合、safe caret は使用不可になる。実際にある
      状況で safe caret を有効にするには、\bx@acr@normcaret を「その状況
      での本来の〈^〉の動作」に定義した上で〈^〉をアクティブにする必要が
      ある。
      ※ ユーザ命令の \safecaret はこの命令を実行するとともに、verbatim
      と babel での適切な safe caret 処理を有効化している。

    \bxUseShadowMap\CS{<TFM名>}
      命令語 \CS を指定の TFM から生成される shadow map として定義する。
    \bxMap\CS
      整数レジスタ \bxUcv の現在の値に shadow map を適用し、その結果を
      \bxUcv に代入する。
      ※ shadow map とは「16 bit 整数 → 整数」の写像を TFM として表現
      したもの。

---------------------------------------------------
  bxucs パッケージ (v0.2) -- 欧文 Unicode 文字出力 
---------------------------------------------------

Unicode subfont を利用して、(欧文の) Unicode 処理能力をネイティブには
もたない LaTeX 処理系で Unicode フォントを最大限活用する為のパッケージ
である。upLaTeX は和文に関するネイティブな Unicode 処理を行うが、欧文
として Unicode 文字を扱う場合にはこのパッケージが有効であろう。

■ 対応環境

    欧文 LaTeX2e / pLaTeX2e / upLaTeX2e

■ 読込

    \usepackage で読み込む。オプションはない。
      \usepackage{bxucs}

■ フォントの準備

    欧文フォントファミリに対してこのパッケージによる Unicode 出力を可能
    にする為には、次の 2 種類のエンコーディングに対するファミリの NFSS
    に基づくフォント定義が必要である。
      - LaTeX の通常のエンコーディング、最低でも OT1 と T1
      - Unicode subfont エンコーディング(ここでは USF と呼ぶ)

    例えば、次の 2 シェープからなるフォントファミリがあるとする。
      - FOO_R.ttf : regular weight
      - FOO_B.ttf ; bold weight
    これを LaTeX ファミリ名 "foo" で定義することを考える。

    最初に OT1 に関する定義をする。その為には、各シェープに対する TFM の
    名前を決める必要がある。regular を foo-r-ot1、bold を foo-b-ot1 と
    する(勿論 Berry 命名法に従っても良い)と、OT1 に対するフォント定義
    ファイル ot1foo.fd の内容は次のようになる。

      \DeclareFontFamily{T1}{foo}{}
      \DeclareFontShape{T1}{foo}{m}{n}{<->foo-r-ot1}{}
      \DeclareFontShape{T1}{foo}{bx}{n}{<->foo-b-ot1}{}

    T1 エンコーディングに対する設定も同様である。

    次に Unicode subfont (USF) に対する定義をする。Unicode subfont とは
    Unicode の BMP 領域を 256 文字毎に分割して複数の TFM に収めたもので
    ある。従って、1 つのシェープに対して TFM は(最大で) 256 個あること
    になり、名前の一部に番号(小文字 16 進表記)を含めて表す。今の場合で
    は例えば Regular のシェープに対する TFM 名は
      foo-r-u??   (?? は 00, 01, …, fe, ff)
    とすることができる。同様に Bold を foo-b-u?? とする。Unicode subfont
    に対するフォント定義ファイルは次の形式で記述される。

      \USFDeclareFontShape{<ファミリ>}{<番号列>}{
        \USFShape{<シリーズ>}{<シェープ>}{<TFM定義>}{<初期化>}
        (必要なだけ \USFShape を繰り返す)
      }

    Unicode subfont は 256 個全てが揃っているとは限らない。例えば 60 番
    (U+6000〜60FF) は漢字のみを含むので、元のフォントファイルが CJK 対応
    のものでない限り、60 番の subfont は存在しないことになる。<番号列>
    には、存在する番号の範囲の列を記す。ここでは 00, 01, 02, 03, ff が
    存在するとする。今の例でのフォント定義ファイル usffoo.fd の内容は次
    のようになる。

      \USFDeclareFontShape{foo}{00-03,FF}{
        \USFShape{m}{n}{<->foo-r-u#1}{}
        \USFShape{bx}{n}{<->foo-b-u#1}{}
      }

    あとは、今の過程で決めた事項に従って、実際に TFM ファイルを生成し
    (TrueType フォントの場合は ttf2tfm を使う)、さらに TFM と実物の
    フォントファイルを関連付けるように DVI ウェアを設定する必要もある。

■ 機能

    このパッケージは bxbase の \Ux のインタフェースを利用する。従って、
      \Ux{0425,043E,0440,043E,0448,043E}
    のように \Ux の引数にコード値の 16 進表記の列を書けばよい。ただし
    この時に、現在のフォントファミリは前述の説明で用意した Unicode
    subfont が定義されたものでなければならない。(なお、このパッケージは
    内部で bxbase を読み込むので別に読み込む必要はない。)

    使用中のフォントに指定されたコードの文字がない場合は、和文用の \UI
    の方に処理を渡す。ただしここで e-TeX 拡張が使えない場合、存在する
    文字と同じ subfont に属する文字は全て存在すると判断されてしまうと
    いう制限があり、結果として和文フォントには文字があるのに使えない
    という現象が起こりうる。


-------------------------------------------------------
  zxbase パッケージ (v0.4a) -- XeLaTeX 基礎ライブラリ
------------------------------------------------------

拙作の XeLaTeX 用パッケージ(ZX シリーズ)で使われる部品的機能を収めた
パッケージである。今のところ、このパッケージにはユーザ命令は定義されて
いないので、文書作成者が \usepackage で直接これを読み込むことはない。
(現在、zxotf がこのパッケージを内部で読み込む。)

----------------------------------------

■ 更新履歴

    version 0.5 <2010/06/15>
      - bxbase: \JI/\KI を追加。
      - bxbase: \dvipdfmxmapline/\dvipdfmxmapfont を追加。
      - bxutf8: BMP 外の符号値への対応。

    version 0.4a <2009/11/16>
      - bxbase で \UI/\Ux を zxjatype と、\AJ を zxotf と連携させた。
      - zxbase パッケージを追加。

    version 0.4 <2009/07/05>
      - PXbase の v0.4 に合わせた改訂。

    version 0.3 <2008/04/06>
      - bxutf8x を追加。
      - bxutf8 のバグを修正。
      - bxbase でも pxbase の命令 \recordpapersize を使用可能にした。

    version 0.2 <2008/03/28>
      - 最初の公開版。

# EOF