竹の 09/18 2005
---------------
■日本語化パッチに関する技術情報
以下に、特にこの日本語化パッチに関する少し細かい (詳しい) 話を書
きます。
1. 日本語化パッチが行なうこと
-----------------------------
1.1. 日本語化パッチの機能
-------------------------
この日本語化パッチは、オリジナルの latex2html に対して、以下のこ
とを行ないます (各項目末のかっこ内は対応するファイル名)。
1) 日付 (各 HTML の一番下に現れるもの、最終ページに変換日として記
述されるもの、及び \today コマンドの日付) や「図」「表」などの日
本語化
(styles/japanese*.perl)
2) latex --> platex 等、内部で使用するコマンド名の変更
(prefs.pm, config/config.pl)
3) 最終ページ「この文書について」の日本語化
(styles/japanese*.perl)
4) 生成される HTML ページ、および中間 LaTeX ファイルの nkf による
漢字コード変換 (jp1.X のみ)
(latex2html.pin, texexpand.pin)
5) 生成する HTML ページの META タグに日本語の charset を埋め込み
(latex2html.pin, styles/japanese*.perl)
6) 生成する HTML ページのヘッダのコメント部分に日本語化パッチバー
ジョン等を埋め込み
(latex2html.pin)
7) 各種日本語スタイルファイル用の perl スクリプトの追加
(styles/ascmac.perl, styles/j-*.perl, styles/j*.perl,
styles/js*.perl (* = article,report,book), styles/jslides.perl)
8) Netpbm-10.2X への対処
(config/config.pl, pstoimg.pin)
9) 以下の各種問題、バグ等への対処
9-1) \i,\j へのアクセント画像が i,j へのアクセント画像と同一視さ
れる問題の対処
(latex2html.pin)
9-2) スタイルファイル名に '-' が含まれている場合 (j-article.sty
など) の対処
(latex2html.pin)
9-3) \t{oo} が正しく画像化されない問題への対処
(latex2html.pin)
9-4) \accent23 等に対する処理の問題への対処
(latex2html.pin)
9-5) amsmath 上の equation 環境に % を書いた場合の問題の対処
(styles/more_amsmath.perl)
9-6) psfrag のオプション引数を使用した場合の問題の対処
(styles/psfrag.perl)
9-7) perl の undefined 命令への対処
(versions/html2_2.pl, versions/table.pl)
9-8) fleqn 使用時に数式がセンタリングされてしまう問題の対処
(versions/html*.pl (* = 3_2,4_0,4_1))
9-9) \prefacename の対応が中途半端になっている問題への対処
(latex2html.pin)
9-10) ディスプレイ数式環境内の \label だけの行への対応
(latex2html.pin)
なお、9-1), 9-3) はこれで完全に解決しているわけではなく、まだ問題
が残っています。これらについては、README.notice.jp の [39] を参照
して下さい。
1.2. 追加された変数やオプション
-------------------------------
以下に、オリジナルの latex2html にはない変数やオプションの説明を
します。
・$JAPANESESETMONTHNAME (styles/japanese*.perl; jp2.1beta,
jp1.10beta1,jp1.10beta2)
これは、japanese.perl に元々含まれていて (by 武藤さん) コメントア
ウトされていた日本の月名を、有効にしてそれらを切りかえて使用する
ための変数です。変数の値は 1,2,3 のいずれかで、それぞれの設定によ
って日本語の日付 (の japanese_today() による部分) の月名が
1 ==> 1月、2月、3月、4月、...
2 ==> 睦月、如月、弥生、卯月、皐月、水無月、文月、葉月、長月、
神無月、霜月、師走
3 ==> 孟春、仲春、季春、孟夏、仲夏、季夏、孟秋、仲秋、季秋、
孟冬、仲冬、季冬
となります。デフォルトの値は 1 です。
この変数は japanese*.perl の前に設定する必要がありますので、初期
化ファイル中で &do_require_package("japanese"); で japanese*.perl
を読み込むときはその前に記述する必要があります。詳しくは「4. 日付
と変換者について」を参照してください。
・$USEJAPANESESEIREKI (styles/japanese*.perl; jp2.1beta,
jp1.10beta1,jp1.10beta2)
年号は、ASCII pTeX で定義されているマクロ \西暦 を用いても残念な
がら西暦にはならず、そのための変数です。この変数を明示的に 1 に設
定すれば、日本の日付表示 (の japanese_today() による部分) が西暦
つまり、「2005年8月14日」のような表記になります。デフォルトの値は
0 でこれは元号表記 (「平成17年8月14日」等) を意味します。詳しくは
「4. 日付と変換者について」を参照してください。
・$USEBOTTOMLOCALEDATE (styles/japanese*.perl; jp2.1beta,
jp1.10beta1,jp1.10beta2)
各ページの下につく日付を日本の日付にするための変数です。これを 1
にすると
Shigeharu TAKENO 平成17年8月14日
のように、0 とすると (デフォルト)
Shigeharu TAKENO 2005-08-14
のようになります。
ページ下の日付等は初期化ファイルでより細かくカスタマイズすること
も可能です。また、この変数は japanese*.perl の前に設定する必要が
ありますので、初期化ファイル中で &do_require_package("japanese");
で japanese*.perl を読み込むときはその前に記述する必要があります。
詳しくは「4. 日付と変換者について」を参照してください。
・$TONATIVE (l2hconf.pm; jp1.10beta1,jp1.10beta2)
数式等を LaTeX コマンドにかけて画像化する際に、生成される LaTeX
ファイルの出力時の漢字コード変換のプログラムを設定します。デフォ
ルトでは
$TONATIVE = "|nkf -e";
のようになっています。Shift_JIS 環境の場合は
$TONATIVE = "|nkf -s";
のように設定します。これを自分の LaTeX 環境に合わせて設定すること
で、元となる LaTeX ファイルの漢字コードが何であっても正しく処理で
きるようになります。なお、jp2.1beta は漢字コード変換を行いません
のでこの変数はありません。
・$TOHTML (l2hconf.pm, styles/japanese*.perl; jp1.10beta1,
jp1.10beta2)
生成される HTML ファイルの出力時の漢字コード変換のプログラムを設
定します。デフォルト (l2hconf.pm) では
$TOHTML = "| cat";
となっていて、すなわち漢字コード変換をしない設定になっています。
実際の漢字コード変換の設定は、styles/japanese*.perl の方に設定さ
れていて、jp1.10beta1 ではデフォルトで
$TOHTML = "| nkf -j";
と設定されていて、jp1.10beta2 では、styles/japanese*.perl (それぞ
れの漢字コード用のファイル) 毎に設定されているデフォルトの値は違
っています。
.latex2html-init などでユーザが変更する場合 (その必要があるのは多
分 jp1.10beta1 のみ) は、出力する HTML の漢字コードを指定する変数
$charset とセットで
$charset = "EUC-JP";
$TOHTML = "| nkf -e";
のように変更しますが、その前に styles/japanese.perl を
&do_require_package("japanese");
として先に取り込んでおく必要があります。詳しくは README.notice.jp
の [35] を参照してください。jp2.1beta は漢字コード変換を行いませ
んのでこの変数はありません。
・-lang=(jis|euc|sjis|jutf|en|no), $REQUIRE_LANGUAGE (latex2html;
jp1.10beta2)
これは jp1.10beta2 のみ用のオプションと変数で、日本語化パッチ
jp1.10beta2 では、このオプション -lang=* で、生成する charset を
変更しますが、$REQUIRE_LANGUAGE はその指定する値 ("jis" 等) を保
存する変数です。~/.latex2html-init (~ は $HOME を意味します) でこ
の値を設定しておけば、-lang を指定しなくてもデフォルトでそれを指
定したことと同じになります。もちろんコマンドラインオプションで指
定したものの方が優先されます。
なお、これを指定すると、それ用の styles/japanese-*.perl が読み込
まれます (en の場合は styles/english.perl, no の場合は読み込みな
し)。これらのファイルは、jp1.10beta2 以外では jarticle 等のクラス
ファイルを指定することで自動的に読み込まれますが、jp1.10beta2 で
は自動的な読み込みは行なわれません。よってこれが設定されていなく
て、コマンドラインオプションも指定しなかった場合は、
styles/japanese*.perl 等は (styles/english.perl も含めて) 一切読
みこまれません。
デフォルトでは何も設定されていません。
2. オプション、初期化ファイル等の設定の優先順位
-----------------------------------------------
latex2html の挙動を変更/制御する場合、オプションや初期化ファイル
等によって設定ができますが、latex2html ではその設定がうまく効かな
い場合があります。これは、それらの設定が latex2html 内部でどのよ
うな順位で行なわれているかを把握することで、その理由を見つけ、対
処することができるかもしれませんので、ここに書いておきます。
なお、日本語用の style/japanese.perl ファイルの読み込まれ方は、
jp1.10beta, jp2.1beta からかなり変更をしましたので、それもここで
説明しておきます。なお、以下の説明では、インストール先のディレク
トリを
$bin = [prefix]/bin
$lib = [prefix]/lib/latex2html
$share = [prefix]/share/lib/latex2html
とします (cf. 「2.4. make」)。
latex2html での設定、挙動の変更は以下で行なわれます。
[a] $lib/l2hconf.pm の設定
[b] $bin/latex2html に書かれたデフォルトの設定
[c] ~/.latex2html-init の設定 (あれば) (注: ~ = $HOME)
[d] 現在のディレクトリにある .latex2html-init の設定 (あれば)
[e] latex2html のコマンドラインオプションによる設定
[f] latex2html のコマンドラインオプション -init_file で指定した初
期化ファイルによる設定
[g] 使用したスタイルファイルに対応した perl ファイル
($share/styles/*.perl, $hsare/versions/*.perl) による設定
全てのオプションの挙動がそうだとは限りませんが、通常は上の順番で
読み込まれ、後で読み込まれたものが、先に読み込まれた設定を上書き
します。
なお、[c],[d],[f] は Perl の require 命令を使用しているので同じフ
ァイルが 2 度読み込まれることはありません。[d] は [c] が読み込ま
れた場合でも、現在のディレクトリがホームディレクトリ (~) でなけれ
ば、それがあれば読み込まれます。
「1. 日本語化パッチが行なうこと」で紹介した日付等の設定を行なう日
本語の設定ファイル japanese.perl ($share/styles/japanese.perl) は、
標準では
・jp1.10beta1.X, jp2.1beta1.X の場合:
ドキュメントクラスで jarticle 等の日本語用クラスファイルが指定さ
れている場合、[g] によって $share/styles/jarticle.perl が読み込
まれ、その内部で japanese.perl が読み込まれる
・jp1.10beta2.X の場合:
コマンドラインオプション -lang jis 等によって直接 japanese.perl
(-lang sjis の場合は japanese-sjis.perl 等) が読み込まれる (タ
イミングは [f] と [g] の間)
となっています。つまり、いずれの場合も japanese.perl の順番はかな
り後ろの方で、優先順位が高い状態になっています (前の設定を後に読
み込まれたものが上書きするので後の方が優先順位が高い) ので、例え
ばデフォルトの japanese.perl に書かれている挙動を、オプションや初
期化ファイルで変更できない、ということになってしまいます。
今までの jp1.9, jp2.0 以前の日本語化パッチでは、japanese.perl フ
ァイルは、実は [a] の中 (の最後の方) で読み込まれる形になっていて
優先順位が低い状態になっていましたが、これは元々の latex2html の
オリジナルの仕様 (「LaTeX Web コンパニオン」でも説明されている形
式) とは少し違っていますので、現在の jp1.10beta, jp2.1beta からは
上のようにしてあります。
現在の日本語化パッチの元で japanese.perl に書かれている挙動を変更
するには、以下のような複数の方法があります。これは、「LaTeX Web
コンパニオン」にも書かれている標準的な (多分正当な) 方法です。
・初期化ファイル ([c] か [d] か [f]) に、
&do_require_package("japanese");
と書いて、それを読み込んでおいてその後に変更したい変数を再定義す
る (japanese.perl を一度読み込むと [f],[g] では 2 度読みはされず
これで japanese.perl の設定が書き換えられる)。
・デフォルトの l2hconf.pm ファイル ([a]) を自分用にコピーし、その
中に
&do_require_package("japanese");
と書き、その自分用のファイルのフルパス名を環境変数 L2HCONFIG に
設定し、変更したい変数等はこのファイルの中、あるいは初期化ファイ
ルに記述する。
なお、「LaTeX Web コンパニオン」には、
&do_require_package("$LATEX2HTMLSTYLES/japanese.perl");
のように書かれていますが、これは間違いで、最後に .perl をつけると
読み込んでくれませんし、$LATEX2HTMLSTYLES/ も必要ありません (逆に
$LATEX2HTMLSTYLES/ をつけると、本来の機能に反して 2 度読みされて
しまう可能性がありますので、つけてはいけません)。
ただし、これらの方法にも問題があり、[c],[d],[f] を切り替えて使っ
ている場合、
・[f] を指定しても、[c],[d] は、それが存在する場合はそれは上の順
番で必ず一度読み込まれる
・[d] と [f] の間に展開されてしまう変数もある (うまく [f] で再定
義が効かないものがある)
などに注意が必要です。特に問題なのが、英語の LaTeX との共存をする
場合と日付の日本語化の問題です。これらに関しては、「3. 英語版との
共存について」「4. 日付と変換者について」を参照して下さい。
なお、[c] の初期化ファイルのファイル名 (パス名を含まないファイル
名部分のみ) は環境変数 L2HINIT_NAME で変更可能なので、[c],[d] を
無効化する場合、L2HINIT_NAME を適当に設定してデフォルトの定義ファ
イルを読み込ませないようにする、という回避策はあります。
3. 英語版との共存について
-------------------------
日本語でない LaTeX ファイルや英語版の latex2html で公開したい場合
などのためにオリジナルの挙動の latex2html と共存させるには、今ま
での jp1.9,jp2.0 以前の日本語化パッチでは、wrapper スクリプトの
l2h を使って
% l2h -en [LaTeX file]
とすることで英語化は可能でしたが、これは「2. オプション、初期化フ
ァイル等の設定の優先順位」の [a] の中で強制的に english.perl を読
みこむようにしているので、厳密にはオリジナルの挙動とは違っていま
した。jp1.10beta, jp2.1beta では、それを以下のようにしています。
・jp1.10beta1, jp2.1beta1 の場合:
ドキュメントクラスで jarticle 等の日本語用クラスファイルが指定さ
れていなければ japanese*.perl は読みこまれず、オリジナルの
latex2html の挙動と同じになる。
・jp1.10beta2:
-lang オプションがない、あるいは -lang=no の場合は (たとえ
jarticle が使われていても) japanese*.perl は読みこまれず、オリ
ジナルの latex2html の挙動と同じになる。
ただし、いくつか問題があります。
[a] 初期化ファイルで日本語の設定が行われている場合
これは例えば jp1.10beta2 の初期化ファイル (~/.latex2html-init) で
$REQUIRE_LANGUAGE = "jis";
などと設定していたり、または強制的に japanese*.perl を
&do_require_package("japanese");
によって読み込ませている場合が相当します。前者の場合は
・コマンドラインオプションで -lang=no とする
・カレントディレクトリに .latex2html-init というファイルを作って
その中で
$REQUIRE_LANGUAGE = "no";
とする (~/.latex2html-init を ./.latex2html-init で打ち消す)l
・コマンドラインオプションの -init_file で別な初期化ファイルを指
定して上と同様にする
などの方法があります。しかし、-init_file で初期化ファイルを指定し
ても、「2. オプション、初期化ファイル等の設定の優先順位」で説明し
たデフォルトの初期化ファイル [c],[d] はそれらがあれば先にそれらが
読まれることに注意してください。
後者の japanse*.perl を強制的に読み込ませている場合はかなりやっか
いです。japanese*.perl を読んだことを打ち消すのは大変なので、その
初期化ファイル自体を打ち消すのが楽だと思います。一旦初期化ファイ
ル名を書き変える、という手もありますが、環境変数を利用する手もあ
ります。
例えば ~/.latex2html-init で japanese*.perl を読み込んでいて、そ
れを読み込ませないようにして、それに代わる初期化ファイル
./l2h-en-init を読ませたい場合、環境変数 L2HINIT_NAME を使って
% setenv L2HINIT_NAME l2h-en-init (csh 系の場合)
% latex2html file.tex
とすると ~/.latex2html-init は読まれずに ./l2h-en-init が読まれま
す (ただし ~/l2h-en-init があればそちらが先に読まれます)。
L2HINIT_NAME は初期化ファイル名を設定する変数です (デフォルトでは
.latex2html-init)。
[b] jp1.10beta1 の場合
jp1.10beta1 では、texexpand (input、usepackage 等を展開するプログ
ラム) で漢字コード変換を行っていますので、そのままの texexpand を
利用する形では厳密にはオリジナルの挙動の latex2html との共存はで
きず、例えば日本語ではない 8bit コードの入った LaTeX ファイルなど
では問題が起こる可能性があります。
jp1.10beta1 の texexpand は、先頭で
$FROMNATIVE = "/usr/local/bin/nkf -e";
のように定義されていて、
open(IN,"${FROMNATIVE} $infile |") || die ...
のように使われています。よって、
1) これらを
# $FROMNATIVE = "/usr/local/bin/nkf -e";
...
# open(IN,"${FROMNATIVE} $infile |") || die ...
open(IN,"<$infile |") || die ...
と書き換えた texexpand を texexpand-en という名前に変更して、
2) lib/latex2html/l2hconf.pm の $TEXEXPAND の設定を texexpand-en
に書き換えた l2hconf.pm を l2hconf-en.pm という名前に変更して、
3) 環境変数 L2HCONFIG を l2hconf-en (または l2hconf-en.pm のフル
パス) と設定して、
latex2html を実行すれば、一応日本語化の影響を外すことはできるよう
になると思います。
なお、jp1.10beta2 の場合は、$REQUIRE_LANGUAGE の値によって
texexpand 内での漢字コード変換も制御しているので、それらが日本語
ではない場合 (jis,euc,sjis,jutf ではない場合) はオリジナルの仕様
の texexpand になりますから問題ありませんし、jp2.1beta の場合は漢
字コード変換を行いませんので問題ありません。
4. 日付と変換者について
-----------------------
4.1. デフォルトの値
-------------------
latex2html では、自動計算される日付は、
[d1] LaTeX の \today コマンドの展開結果
[d2] 各ページの一番下に書かれる日付
[d3] 最終ページに書かれる変換日
で使用され、変換者名 (latex2html の実行者名) も
[a1] 各ページの一番下に書かれる署名
[a2] 最終ページに書かれる変換者名
に自動的につきますが、これらは統一することもできますし、バラバラ
に設定することもできます。「1. 日本語化パッチが行なうこと」で紹介
した変数とともに、その仕組みなどについて説明します。
まず、デフォルトの値は以下のようになっています。
| オリジナル *1) | 以前の日本語化 *2)| 現在の日本語化 *3)
----+------------------+-------------------+-------------------
[d1]| August 14, 2005 | 平成17年8月14日 | 平成17年8月14日
[d2]| 2005-08-14 | 平成17年8月14日 | 2005-08-14
[d3]| 2005-08-14 | 平成17年8月14日 | 2005-08-14
[a1]| Shigeharu TAKENO | Shigeharu TAKENO | Shigeharu TAKENO
[a2]| Shigeharu TAKENO | Shigeharu TAKENO | Shigeharu TAKENO
----+------------------+-------------------+-------------------
*1) オリジナルの (英語版の) latex2html-2002-2-1
*2) jp1.9, jp2.0 以前の日本語化パッチを当てたもの
*3) jp1.10b, jp2.1b 以降の日本語化パッチを当てたもの
ただし、いずれも初期化ファイルの設定はなしで、*2),*3) は日本語化
が行われる (japanese.perl が読み込まれる) ようにした状態。
4.2. それぞれが設定される仕組み
-------------------------------
[d1],[d2],[d3],[a1],[a2] は、latex2html 内部では次のように設定さ
れます。
[d1] \today コマンドは do_cmd_today() 関数で展開されるが、これは
japanese_today() (正確には "$default_language"_today() 等) が定
義されていればそれを使用し、そうでなければ default_today()
(= August 14, 2005 のような "[月名] [日], [西暦]" 形式) を使用
する。
[d2] 関数 address_data('ISO') の返り値として渡される配列
@address_data の 2 番目の要素 $address_data[1]。address_data()
内部では、その引数をそのまま get_date() に渡して日付を取得して
いる。
[d3] 関数 japanese_infopage() が実行される時点での配列値
$address_data[1] がそのまま使用される。これはかなり後の方で実行
される。
[a1] 関数 address_data('ISO') の返り値として渡される配列
@address_data の 1 番目の要素 $address_data[0]。
[a2] 関数 japanese_infopage() が実行される時点での配列値
$address_data[0] がそのまま使用される。これはかなり後の方で実行
される。
つまり [d1] は (do_cmd_today() の下請けの) japanese_today() によ
って、[d2],[d3] は get_date('ISO') によって日付が設定されているこ
とになります。実際には japanese_today() も内部で get_date() を呼
び出しています。
また、[d2],[a1] は、@address_data が取得された後でそれを
$ADDRESS = "$address_data[0]\n$address_data[1]";
のようにしていて、実際にはこの $ADDRESS がページ下の出力として使
われています。
4.3. get_date()
---------------
日付を自動計算する関数は、プリミティブな関数である get_date() を
呼び出していますが、実はこれは色々な出力が可能な関数になっていて
これを使って日付をカスタマイズすることもできます。
get_date() には以下のような 4 種類の使用方法があります:
[g1] &get_date()
[g2] &get_date('ISO')
[g3] &get_date($format) (例えば &get_date("%d日%d月%d年"))
[g4] &get_date('$format',$order)
(例えば &get_date('"%d年%02d月%02d日"','1900+$y,$Month[$m],$d'))
これらはそれぞれ以下のようになります ([g3],[g4] は例の場合):
[g1] 8/14/2005
[g2] 2005-08-14
[g3] 14日8月2005年
[g4] 2005年08月14日
[g3],[g4] は見てわかる通り、sprintf() を内部で使用しています。
[g3] の場合は引数部分は日、月、西暦の順で入りますが、[g4] ではそ
れを更に細かく設定できます。ここで、$order には
$y = 西暦 - 1900, $m = 月 - 1, $d = 日、@Month = 月名の配列
の変数の値を使うことができます。[g3] は実際に
sprintf($format, $d, $m+1, 1900+$y)
を行っています。
なお、[g3] では $format (書式文字列) は '' で囲んでも "" で囲んで
もどちらでも構いませんが、[g4] では、$format は '" と "' で、
$order は '' で囲む必要があります。
4.4. カスタマイズ例
-------------------
[d1] のカスタマイズは、「1. 日本語化パッチが行なうこと」で紹介し
た変数 $JAPANESESETMONTHNAME, $USEJAPANESESEIREKI を使う以外に初
期化ファイル中では
・月名 @Month を再定義する ($JAPANESESETMONTHNAME とは別のものを)
・japanese_today() (または 直接 do_cmd_today()) を再定義する
などで行えます。@Month の再定義は、japanese_today() で使用される
月名をカスタマイズする場合は、
&do_require_package("japanese");
のように japanese*.perl を読み込んだ後で再定義する必要があり、
それは japanese_today() の再定義の場合も同様なのですが、
japanese_today() を再定義する場合は、単に上と同じ形式で
japanese*.perl を読み込んでもサブルーチンの検索順序のため (?) に
上書きがうまくいきませんので、japanese*.perl の読み込みを
BEGIN{
&do_require_package("japanese");
}
のように BEGIN ブロックで囲む必要があるようです。do_cmd_today()
の再定義の場合は japanese*.perl の読み込みは必要ありません。
[d2],[d3] を細かくカスタマイズするには、初期化ファイルの中で
・address_data($format,$order) (または直接 get_date()) を使う
・japanese_today() を使う
のような方法があります。ただし、japanese_today() を使う場合は先に
&do_require_package("japanese");
として先に japanese*.perl を読み込む必要があります。また、それら
で使用される月名の配列 @Month は、[d1] 同様に再定義したり、
$JAPANESESETMONTHNAME で切りかえることもできます。
[a1],[a2] のカスタマイズは、初期化ファイルの中で、直接
$address_data[0] や $ADDRESS を再定義すればできます。
なお、[d2],[a1] の各ページの一番下に書かれるものは、実際には
$ADDRESS の値が使用されていますので、[d2] や [a1] とは無関係の文
字列を設定することも可能です。それは、latex2html のコマンドライン
オプション -address を使ってもできます。
以下にいくつかサンプルを紹介します。いずれも初期化ファイルでの設
定例です。==> の後に書いたのがその結果です。
1) [d1],[d2],[d3] を和暦に統一する:
$USEBOTTOMLOCALDATE=1;
# 後に読み込まれる japanese.perl に影響する
==> [d1]=[d2]=[d3]="平成17年8月14日"
2) [d1],[d2],[d3] を日本語の西暦に統一する:
$USEJAPANESESEIREKI=1;
$USEBOTTOMLOCALDATE=1;
# 後に読み込まれる japanese.perl に影響する
==> [d1]=[d2]=[d3]="2005年8月14日"
3) [d1],[d2],[d3] を和暦に統一し、[a1],[a2] も同じ日本語文字列に
する:
$USEBOTTOMLOCALDATE=1;
&do_require_package("japanese");
# ↑これがないと、後で japanese*.perl が読み込まれたときに
# $ADDRESS が上書きされてしまう
$address_data[0]="竹野茂治";
$ADDRESS = "$address_data[0]
\n$address_data[1]";
# や
はデフォルトでは含まれていない
==> [d1]=[d2]=[d3]="平成17年8月14日", [a1]=[a2]="竹野茂治"
3) [d2] のみをカスタマイズ (和暦で表示を変更) する:
# [d2] ([d3]) のカスタマイズ
$address_data[1] = &get_date('"%dねん%2dがつ%2dにち"','1900+$y,
$m+1,$d');
$ADDRESS = "$address_data[0]
\n$address_data[1]";
# [d3] をデフォルトの値に戻す
@address_data = &address_data('ISO');
==> [d1]="平成17年8月14日", [d2]="2005ねん 8がつ14にち",
[d3]="2005-08-14"
4) [d1] を 14/8/2005 (イギリス式) に、[d2] を 14 Aug 2005 に、
[d3]を和暦にし、[a1] をデフォルトの変換者名に、[a2] を指定した
日本語文字列にする:
# [d1] のために do_cmd_today() を再定義
sub do_cmd_today {
local($today) = &get_date(); # 月/日/年
$today =~ s|(\d+)/0?(\d+)/|$2/$1/|; # 日/月/年、に入れ替え
join('',$today,$_[0]); # この出力は決まった形式
}
# または japanese_today() の再定義も可
# BEGIN{
# &do_require_package("japanese");
# }
# sub japanese_today {
# local($today) = &get_date();
# $today =~ s|(\d+)/0?(\d+)/|$2/$1/|;
# join('',$today,$_[0]);
# }
#
# [d2],[a1]
@Month = ( 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
'Sep','Oct','Nov','Dec');
@address_data = &address_data('"%d %s %d"','$d,$Month[$m],
1900+$y');
$ADDRESS = "$address_data[0]
\n$address_data[1]";
# [d3]
$address_data[1] = &get_date('"平成%2d年%2d月%2d日"','$y-88,
$m+1,$d');
# [a2]
$address_data[0] = "竹野茂治";
==> [d1]="14/8/2005", [d2]="14 Aug 2005",
[d3]="平成17年 8月14日",
[a1]="Shigeharu TAKENO", [a2]="竹野茂治"
5) [d2],[a1] とは無関係なものをページ下に出力する:
$ADDRESS = "竹野茂治@新潟工科大学
2005 年吉日";
# またはコマンドラインオプションで
# -address="竹野茂治@新潟工科大学
2005 年吉日"
5. 目次
-------
1. 日本語化パッチが行なうこと
1.1. 日本語化パッチの機能
1.2. 追加された変数やオプション
2. オプション、初期化ファイル等の設定の優先順位
3. 英語版との共存について
4. 日付と変換者について
4.1. デフォルトの値
4.2. それぞれが設定される仕組み
4.3. get_date()
4.4. カスタマイズ例
5. 目次
+=================================================+
竹野茂治 〒945-1195 新潟工科大学 情報電子工学科
shige@iee.niit.ac.jp TEL(&FAX): 0257-22-8161
+=================================================+