# $Id: README.tech.jp,v 1.47 2018-07-22 19:50:32+09 shige Exp $

README.tech.jp: 技術情報
Shigeharu TAKENO <shige@iee.niit.ac.jp>


■日本語化パッチに関する技術情報

以下に、特にこの日本語化パッチに関する少し細かい (詳しい) 話を書
きます。


1. 日本語化パッチが行なうこと
-----------------------------
1.1. 日本語化パッチの機能
-------------------------

この日本語化パッチは、オリジナルの latex2html に対して、以下のこ
とを行ないます (各項目末のかっこ内は対応するファイル名)。

(1) 日本語化
  (1-1) 日付 (各 HTML の一番下に現れるもの、最終ページに変換日と
    して記述されるもの、及び \today コマンドの日付) や「図」
    「表」などの日本語化
    (styles/japanese.perl)
  (1-2) latex --> platex 等、内部で使用するコマンド名の変更
    (prefs.pm, config/config.pl)
  (1-3) 最終ページ「この文書について」の日本語化
    (styles/japanese.perl)
### mess 169) の修正も
  (1-4) 生成される HTML ページ、および中間 LaTeX ファイルの nkf 
    による日本語コード変換 (jp1.X のみ)
    (latex2html.pin, texexpand.pin, config/config.pl, prefs.pm)
  (1-5) 生成する HTML ページの META タグに日本語の charset を埋め
    込み
    (latex2html.pin, styles/japanese.perl)
  (1-6) 生成する HTML ページのヘッダのコメント部分に日本語化パッチ
    バージョン等を埋め込み
    (latex2html.pin)
### mess 169) を追加
  (1-7) 各種日本語スタイルファイル用の perl スクリプトの追加
    (styles/ascmac.perl, styles/j-*.perl, styles/j*.perl, 
    styles/js*.perl (*=article,report,book), styles/jslides.perl)
  (1-8) jp2.1beta での UTF-8 対応
    (config/eucconv.pl, Makefile.in, configure, 
    styles/japanese.pin)

(2) バグ等の修正
  (2-1) \i,\j へのアクセント画像が i,j へのアクセント画像と同一視
    される問題の対処
    (latex2html.pin)
  (2-2) スタイルファイル名に '-' が含まれる場合 (j-article.sty な
    ど) の対処
    (latex2html.pin)
  (2-3) \t{oo} が正しく画像化されない問題への対処
    (latex2html.pin)
  (2-4) \accent23 等に対する処理の問題への対処
    (latex2html.pin)
  (2-5) amsmath 上の equation 環境に % を書いた場合の問題への対処
    (styles/more_amsmath.perl)
  (2-6) psfrag のオプション引数を使用した場合の問題への対処
    (styles/psfrag.perl)
  (2-7) perl の undefined 命令への対処
    (versions/html2_2.pl, versions/table.pl)
  (2-8) Netpbm-10.2X, 10.XX.YY への対処
    (config/config.pl, pstoimg.pin)
  (2-9) \prefacename の対応が中途半端になっている問題への対処
    (latex2html.pin)
  (2-10) ディスプレイ数式環境内の \label だけの行への対応
    (latex2html.pin)
###  (2-11) math.pl 使用時に "mathend000#" が残る問題への対処 
###    (latex2html.pin)
### ==> 削除: mess 134) [b], mess-latex2html 725) [e]
  (2-11) 削除
  (2-12) stylesheet に出されるロゴの問題の修正
    (latex2html.pin)
  (2-13) TITLE に日本語が含まれる場合 META タグの charset 指定の
    方が先にないと真っ白なページが表示されることがある問題の対処
    (latex2html.pin)
  (2-14) MS-Windows 上で which に関するエラーが出る問題への対処
    (l2hconf.pin)
### mess 60)
### mess-latex2html 454) [c]
  (2-15) \symbol の展開に関する問題への対処
    (styles/texdefs.perl, latex2html.pin)
  (2-16) display 数式環境内の \ref に関する問題への対処
    (latex2html.pin)
  (2-17) configure 時の左辺の表示の問題への対処
    (config/config.pl)
  (2-18) versions/html*.pl のバージョンと latex2html.pin 内の記述
    が合ってない問題と、LATEX2HTMLVERSION に複数のパスが指定でき
    ない問題の修正
    (latex2html.pin) 
  (2-19) 新しい perl で警告やエラーが出る問題への対応
    (latex2html.pin, styles/{html,frames,natbib}.perl,
    versions/frame.pl)
### hash, 配列に対する defined
  (2-20) Julius Smith 氏 (latex2html-200{6,9}) のパッチ
    (latex2html.pin)
  (2-21) \scriptsize が \normalsize で復帰しない問題への対処
    (latex2html.pin)
### mess 132)
### mess-latex2html 666)
  (2-22) マニュアルのコンパイル時の hyperref に関する問題への対処
    (doc/manual.tex)
### mess 99), 114) [a]
### mess-latex2html 502), 503)
  (2-23) Windows 版の引数で , を使用した場合の問題への対処
    (config/config.pl)
### mess 138)
### mess-latex2html 734), 735)
  (2-24) TeX Live への対応 (gs の検出)
    (config/config.pl)
### mess 126) [a]
### mess-latex2html 603) [h]
  (2-25) Netpbm の perl script コマンドの検出の問題への対処
    (config/config.pl)
### mess 126) [b]
### mess-latex2html 609) [j]
  (2-26) ディレクトリセパレータに関する問題への対処
    (latex2html.pin)
### mess 135), 136)
### mess-latex2html 686) [c], 732)
  (2-27) -split 0, 1 の際に link がつかない問題への対処
    (latex2html.pin)
### mess-latex2html 681)
  (2-28) -ps_image の際の表示に関する問題への対処
    (latex2html.pin)
### mess 135)
### mess-latex2html 686) [a]
  (2-29) graphicx パッケージに対するエラーメッセージへの対処
    (latex2html.pin)
### mess 121)
### mess-latex2html 576)
  (2-30) 数式画像の下に線が出る問題への対処
    (prefs.pm)
### mess 19)
### mess-latex2html 347) [d]
### 既に入ってたけどここに書かれていなかった。
  (2-31) styles/romanian.perl 内の誤植の修正
    (styles/romanian.perl)
### mess 105)
### mess-latex2html 522) [n]
  (2-32) DIV の閉じタグが足りない問題 (修正はせずコメントとして)
    (versions/html*.pl (*=3_2,4_0,4_01,4_1))
### mess 129)
  (2-33) amsmath で align 環境内の cases 環境で置きる問題への対処
    (versions/math.pl)
### mess 99), 114) [g]
### mess-latex2html 501)
### tmp/l2h/work-nolm01/test-amsmath/mess
  (2-34) eqnarray* 環境の下の余分なスペースの問題への対処
    (versions/html*.pl (*=4_0,4_01,4_1))
### mess 145)
### mess-latex2html 739)
### 実際には html4_0.pl には jp1.10b2.7 くらいから入っていたけど、
### それが何かわからずに 4_1 には入ってなかった。
  (2-35) 正規表現に関する修正 (perl 5.22 以降で警告やエラーとなる)
    (versions/html*.pl (*=3_1,3_2,4_01,4_1), versions/math.pl,
     styles/{alltt,frame,graphics-support}.perl, latex2html.pin)
### mess 147)
### mess-latex2html 741)
### mess-latex2html 768-770), mess 164) のをさらに追加 
### mess 168 [b] のをさらに追加
  (2-36) enumerate パッケージを使用する際の問題に関する修正
    (latex2html.pin)
### mess 163)
### mess-latex2html 762-766)
  (2-37) perl-5.26 以降 @INC に . が含まれないことに対する修正
    (configure)
### mess 168)

(3) 機能の追加
  (3-1) 削除
###  (3-1) fleqn 使用時に数式の左寄せ/センタリングが不統一になる問題
###    への対処 ($USEFLEQNINDENT)
###    (versions/html*.pl (* = 3_2,4_0,4_01,4_1), versions/math.pl, 
###    latex2html.pin, styles/more_amsmath.perl)
  (3-2) tabular 環境を TABLE に直したときに TD, TH のオプションを
    追加できるように変数 $TDADDOPT, $THADDOPT を追加
    (versions/html*.pl (*=3_2,4_0,4_01,4_1))
### mess 84) 2011-03-26
### mess-latex2html 424), 470)
  (3-3) 式番号の幅が固定されている問題への対処 ($EQNO_WIDTH の追
    加)
    (versions/html*.pl (*=3_1,3_2,4_0,4_01,4_1), 
    versions/math.perl, styles/more_amsmath.perl, latex2html.pin)
### mess 59) 2010-09-09
### mess-latex2html 454)
  (3-4) 画像を大きく作ることで見た目の解像度を上げるオプションの
    追加 (-dresolution [n])
    (l2hconf.pin, latex2html.pin, styles/getimagesize.perl)
### mess 137), 144) 2018-02-16
### mess-latex2html 709), 730)


なお、(2-1), (2-3) はこれで完全に解決しているわけではなく、まだ問
題が残っています。これらについては、README.notice.jp の [39] を参
照して下さい。

なお、以前実装していた、fleqn オプションに対する左寄せ機能 (従来
の (3-1)) は、あまりスマートなものではなく、また需要もあまりなさ
そうなので、latex2html-2017 に対する日本語化パッチからは削除しま
した。


1.2. 追加された変数やオプション
-------------------------------

以下に、オリジナルの latex2html にはない変数やオプションの説明を
します。


・$JAPANESESETMONTHNAME (styles/japanese.perl) ((1-1))

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) ((1-1))

ASCII pTeX では、\西暦 というマクロで \today の年号が西暦になりま
すが、latex2html はこのマクロを処理できませんので、代わりにこの変
数で年号を西暦に変えます。

初期設定ファイルでこの変数を 1 に設定すれば、\today などの 日本の
日付表示の年号が西暦に変わり、「2018年2月19日」のような表記になり
ます。デフォルトの値は 0 でこれは元号表記 (「平成30年2月19日」等)
になります。詳しくは「4. 日付と変換者について」を参照してください。

この変数は、japanese.perl の前に設定する必要はなく、この変数値を
設定した後の japanese_today() に影響します。


・$USEBOTTOMLOCALDATE (styles/japanese.perl) ((1-1))

latex2html-2017.2 からは、各ページの下の変換者氏名や日付はデフォ
ルトではつかなくなりましたが、これを latex2html-2016 以前の表示に
戻し、かつその日付を日本の日付にするための変数です。これを 1 にす
ると

 Shigeharu TAKENO 平成30年2月19日

のようになります。0 とするとデフォルトと同じで、各ページの下には
何も表示されません。

ページ下の日付等は初期設定ファイルでより細かくカスタマイズするこ
とも可能です。また、この変数は japanese.perl の前に設定する必要が
ありますので、初期設定ファイル中で do_require_package により強制
的に japanese.perl を読み込むときはその前に記述する必要があります。
詳しくは「4. 日付と変換者について」を参照してください。


・$USESIGNEDINFOPAGE (styles/japanese.perl) ((1-3))

latex2html-2017.2 からはオリジナルの英語版の HTML 出力の最終ペー
ジ「About this document ...」から変換者の氏名が取り除かれました。
これに対応する日本語の「この文書について」のページでは、変換者氏
名は同じように削除することも、残せるようにもできるようにしてあり、
それを制御するのがこの変数です。

この変数の値を 1 にすると、変換者氏名が latex2html-2016 同様残り
ます。デフォルトは 0 で、オリジナルの latex2html-2017.2 の挙動と
同様変換者氏名を削除します。なお、これは日本語の最終ページ「この
文書について」にだけ適用されるもので、英語版の「About this 
document ...」の方はこの変数の値によらず変換者氏名は残りません。

また、OS によっては変換者氏名が正しく得られない場合があります。そ
の場合はこの変数を設定せず変換者氏名を表示させない手もありますが、
これを 1 にして、初期設定ファイルで $address_data[0] に正しい氏名
を設定する、という手もあります。詳しくは「4. 日付と変換者について」
を参照してください。


・$TONATIVE (l2hconf.pm; jp1.10beta のみ) ((1-4))

数式等を画像化する際に、一時的に生成する LaTeX ファイルの出力時の
日本語コード変換のプログラムを設定します。デフォルトでは 

 $TONATIVE = "|$NKF -e";

のようになっていて、nkf を使って EUC-JP のコードに変換します。
Shift_JIS 環境の場合は

 $TONATIVE = "|$NKF -s";

のように設定します。これを自分の LaTeX 環境に合わせて設定すること
で、元となる LaTeX ファイルの日本語コードが何であっても正しく処理
できるようになります。この変数を初期設定ファイルで設定する場合は、
japanese.perl とは無関係にどこでも設定できますが、l2hconf.pm の値
を変えたい場合だけ設定すればいいでしょう。

なお、jp2.1beta は日本語コード変換を行いませんので、この変数はあ
りません。


・$TOHTML (l2hconf.pm, styles/japanese.perl; jp1.10beta のみ) 
  ((1-4))

生成する HTML ファイルを出力時する際の日本語コード変換のプログラ
ムを設定します。l2hconf.pm では

 $TOHTML = "| cat";

となっていて、すなわち日本語コード変換をしない設定になっています
が、この値は styles/japanese.perl 内で $REQUIRE_LANGUAGES の値に
応じて適切なものが設定されます。デフォルトでは

 $TOHTML = "| $NKF -j";

と設定されていてますが、これはコマンドラインオプション -lang (下
の -lang の項参照) で切りかわります。

なお、日本語コード変換ソフトとして nkf 以外のものを使用する場合は、
直接 styles/japanese.perl を修正してください。

また、p2.1beta は日本語コード変換を行いませんので、この変数はあり
ません。


・-lang=(jis|euc|sjis|jutf|en|no), $REQUIRE_LANGUAGE (latex2html;
  jp1.10beta のみ) ((1-4), (1-5))

日本語化パッチ jp1.10beta では、このオプション -lang=* で、生成す
る charset を変更できます。それぞれ、

 jis  => ISO-2022-JP (7bit JIS)
 euc  => EUC-JP
 sjis => Shift_JIS
 jutf => UTF-8

を意味し、また en は English (日本語なし) を、no は指定なし (初期
設定ファイルでの設定を無視させるためのもの) を意味します。

$REQUIRE_LANGUAGE はその指定する値 ("jis" 等) を保存する変数で、
~/.latex2html-init (~ は $HOME を意味します) でこの値を設定してお
けば、-lang を指定しなくてもデフォルトでそれを指定したことと同じ
になります。もちろんコマンドラインオプションで指定したものの方が
優先されます。

なお、これを指定すると、en, no 以外の場合は styles/japanese.perl
が読み込まれ、en の場合は styles/english.perl が読み込まれ、no の
場合は読み込みは行われませんが、en や no の場合でも jarticle 等の
クラスファイルを使用していると styles/japanese.perl が自動的に読
み込まれますので、日本語化が行われてしまいます。

デフォルトではこれらは何も設定されていません。

jp2.1beta は日本語コード変換を行いませんので、このオプション、変
数はありません。


・&infopagehook ((1-1))

これは、japanese.perl に追加した関数 (サブルーチン) で、HTML の最
終ページ「この文書について」を生成する &japanese_infopage() 内で

 &infopagehook if defined &infopagehook;

とだけ定義されています (ページ本体の出力前に実行される)。よって、
.latex2html-init でこのサブルーチンを定義することでこの最後のペー
ジを多少制御できます。例えば、セクション毎に背景色を変えたい場合、
普通のページならば \section の後ろに

  \bodytext{bgcolor="#ffffaa"}

のようなものを書けば済むのですが、最後のページの色だけは通常は制
御できず、最後のセクションの色が引き継がれてしまいます。この場合
に、.latex2html-init 内に

 sub infopagehook {
    $BODYTEXT = 'bgcolor="#ffffff"';
 }

のようなものを入れることで最終ページの背景色のカスタマイズが行え
ます。このように、最終ページのカスタマイズを行う場合に多少この仕
組みが利用できます。


・$TDADDOPT, $THADDOPT ((3-2))

これは、tabular 環境を HTML の TABLE タグに変換した際に、TD タグ
や TH タグにオプションを設定するための変数で、主に html パッケー
ジの \HTMLset を使って設定します。具体的には、例えば以下のように
使用します:

 \newcommand{\celi}{\HTMLset{TDADDOPT}{CLASS="celgrp1"}}
 \newcommand{\celii}{\HTMLset{TDADDOPT}{CLASS="celgrp2"}}
 \newcommand{\celiii}{\HTMLset{TDADDOPT}{CLASS="celgrp3"}}
 \newcommand{\celiv}{\HTMLset{TDADDOPT}{CLASS="celgrp4"}}
 ... 
 \begin{tabular}{|c|c|}\hline
 \celi a & \celii b \\
 \celi c & \celii d \\ \hline
 \celiii e & \celiv f \\ \hline
 \end{tabular}
 \htmlsetstyle[TD]{celgrp1}{background-color=#ffccff}
 \htmlsetstyle[TD]{celgrp2}{background-color=#ffffcc}
 \htmlsetstyle[TD]{celgrp3}{background-color=#ccffff}
 \htmlsetstyle[TD]{celgrp4}{background-color=#ffffff} 

このサンプルでは、TD, TH タグにクラスを設定していて、そのクラス毎
に CSS により背景色を設定していることになります。

HTML のテーブルでは、tabular 環境のようにある行だけ hline を抜い
た表を作ることが簡単にはできませんが、上の例のように背景色を使っ
て、擬似的に複雑な罫線の表も多少は実現できるようになります。


・$EQNO_WIDTH ((3-3))

latex2html では、$EQNNO_START と $EQNO_END で、equation 環境や 
eqnarray 環境の数式番号の表記を変更できるようになっています。例え
ば、「(1)」を「【数 1】」のように変えたい場合は、

 \HTMLsetenv{EQNO_START}{【数 }
 \HTMLsetenv{EQNO_END}{】} 

のようにすればいいのですが、実際にはそこの表示は縦に 2 行以上で表
示されてしまいます。それは、その環境は latex2html は TABLE タグで
表現していて、その式番号部分の幅が固定幅 (10 ピクセル) になってい
るからです。その幅をこの変数 $EQNO_WIDTH で変更できるようにしまし
た。例えば、行全体の 10% 幅にしたければ

 \HTMLsetenv{EQNO_WIDTH}{10\%} 

のように設定できます。


・-dresolution [n] ((3-4))

数式を画像化する際、その画像を綺麗に見せるオプションとして、
latex2html には -antialias, -antialias_text オプションがあります。
これは pstoimg で画像を作る際に、gs の -dTextAlphaBits=4 オプショ
ンを使用してアンチエイリアスを行う手法ですが、それだと限界があり
ますし、あまり効かない場合もあるようです (gs のバージョン依存 ?)。

そこで、pstoimg に元々用意されている -density オプションを使って、
オーバーサンプリングの手法で表示画像の解像度を上げる方法を試験的
に導入してみました (jp1.10beta 2.18, jp2.1beta 1.18 より)。

[n] は整数値で、0 はデフォルト値の 72 を使うことを意味します。72
より大きな値を指定すれば見た目の解像度が上がり、72 より小さな値を
指定すれば解像度が下がります。36 から 2000 の間の指定が可能ですが、
大きな値を指定すると、画像の作成に時間もかかりますし、生成する画
像ファイル、および中間ファイルもその分大きくなりディスクスペース
を圧迫します。

pstoimg の -density は作成する画像の解像度 (DPI) を指定するオプシ
ョンで、デフォルトは 72dpi ですが、大きな値を指定すると当然大きな
ピクセルサイズの画像ができます。それを、HTML レベルで img タグの
WIDTH, HEIGHT のオプションの値を変更することで、ブラウザでの表示
サイズが元のものと変わらないようにしています。よって、ブラウザに
よっては -density オプションを使用すると画像だけ妙なサイズで表示
される可能性もありますし、その Web ページをブラウザの機能で印刷し
た場合もおかしくなる可能性があります。

お勧めの値は 144 ~ 200 程度で、初期設定ファイル .latex2html-init
に 

 $DRESOLUTION = 144;

のように書いてこのオプションの代わりにすることもできます。


1.3. jp2.1beta の UTF-8 対応
----------------------------

jp2.1beta 1.10 までは、Shift_JIS の LaTeX 環境への対応のコードを
残していましたが、実際には文字化けが起こることがわかっていました
ので、jp2.1beta 1.11 から Shift_JIS 対応を削除し、その代わりに
UTF-8 対応を試験的に追加することにしました。

そのため、インストール環境を多少改変し、configure スクリプトに
--with-kanji=CODE (CODE=euc|utf8) オプションを追加し、日本語用の
styles/japanese.perl もテンプレート (styles/japanese.pin) とし、
config/eucconv.pl スクリプトを用いて、

・--with-kanji=euc、または --with-kanji オプションを使用しない場
  合は、styles/japanese.pin の日本語コードを EUC-JP のままとし、
  $CHARSET の設定を EUC-JP としたものを styles/japanese.perl とす
  る
・--with-kanji=utf8 の場合は、
  styles/japanese.pin の日本語コードを UTF-8 に変換し、$CHARSET 
  の設定を UTF-8 としたものを styles/japanese.perl とする

ようにしてあります。よって、手動で日本語コード変換をすることなく
通常の make で UTF-8 環境の latex2html がインストールできることに
なります。なお、~/.latex2html-init を使う場合は、それもそれぞれの
日本語コード (EUC-JP, UTF-8) でなければいけません。

ただし、現在の latex2html には元々 UTF-8 に関連するコードがかなり
入っているのですが、それへの対応はまだ何も行っていません。よって
副作用が起こる可能性が十分ありますので、まだこれは試験的なもので
す。


2. オプション、初期設定ファイル等の設定の優先順位
-------------------------------------------------

latex2html の挙動を変更/制御する場合、オプションや初期設定ファイ
ル等によって設定ができますが、latex2html ではその設定がうまく効か
ない場合があります。これは、それらの設定が latex2html 内部でどの
ような順位で行なわれているかを把握することで、その理由を見つけ、
対処することができるかもしれませんので、ここにまとめておきます。

なお、日本語用の style/japanese.perl ファイルの読み込まれ方は、
jp1.10beta, jp2.1beta からかなり変更をしましたので、それもここで
説明しておきます。なお、以下の説明では、インストール先のディレク
トリを

 $bin = [prefix]/bin
 $lib = [prefix]/lib/latex2html
 $share = [prefix]/share/lib/latex2html

とします (cf. README.patch-jp の「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] が読み込ま
れた場合でも、現在のディレクトリがホームディレクトリ (~) でなけれ
ば、[d] があればそれも読み込まれます。


「1. 日本語化パッチが行なうこと」で紹介した日付等の設定を行なう日
本語の設定ファイル japanese.perl ($share/styles/japanese.perl) は、
標準では

・jp2.1beta の場合: 
 ドキュメントクラスで jarticle 等の日本語用クラスファイルが指定さ
 れている場合、[g] によって $share/styles/jarticle.perl が読み込
 まれ、その内部で japanese.perl が読み込まれる

・jp1.10beta の場合: 
  コマンドラインオプション -lang jis 等によって直接 japanese.perl
  が読み込まれる (タイミングは [f] と [g] の間) か、そうでない場
  合にドキュメントクラスで jarticle 等の日本語用クラスファイルが
  指定されている場合、[g] によって $share/styles/jarticle.perl が
  読み込まれ、その内部で japanese.perl が読み込まれる

となっています。つまり、いずれの場合も japanese.perl の順番はかな
り後ろの方で、優先順位が高い状態になっています (前の設定を後に読
み込まれたものが上書きするので後の方が優先順位が高い) ので、例え
ばデフォルトの japanese.perl に書かれている挙動を、オプションや初
期設定ファイルで変更できない、ということになってしまいます。


今までの jp1.9, jp2.0 以前の日本語化パッチでは、japanese.perl フ
ァイルは、実は [a] の中 (の最後の方) で読み込まれる形になっていて
優先順位が低い状態になっていましたが、これは元々の latex2html の
オリジナルの仕様 (「LaTeX Web コンパニオン」でも説明されている形
式) とは少し違っていますので、現在の jp1.10beta, jp2.1beta からは
上のような形 (オリジナルの latex2html と同じ形) にしてあります。

現在の日本語化パッチの元で japanese.perl に書かれている挙動を変更
するには、以下のような複数の方法があります。これは、「LaTeX Web 
コンパニオン」にも書かれている標準的な (多分正当な) 方法です。

・初期設定ファイル ([c] か [d] か [f]) に、

   &do_require_package("japanese");

 と書いて、強制的に japanese.perl を読み込み、その後に変更したい
 変数を再定義する (japanese.perl を一度読み込むと [f],[g] で 2 度
 読みはされないので、これで japanese.perl の設定を書き換えること
 ができる)。

・デフォルトの l2hconf.pm ファイル ([a]) を自分用にコピーし、その
 中に 

   &do_require_package("japanese");

 と書き (latex2html の古い日本語化同様 [a] での読み込みになる)、
 その自分用のファイルのフルパス名を環境変数 L2HCONFIG に設定し、
 変更したい変数等はこのファイルの中、あるいは初期設定ファイルに記
 述する。

なお、「LaTeX Web コンパニオン」には、

  &do_require_package("$LATEX2HTMLSTYLES/japanese.perl");

のように書かれていますが、これは間違いで、最後に .perl をつけると
読み込んでくれませんし、$LATEX2HTMLSTYLES/ も必要ありません (逆に
$LATEX2HTMLSTYLES/ をつけると、本来の機能に反して 2 度読みされて
しまう可能性がありますので、つけてはいけません)。


ただし、これらの方法にも問題があり、[c],[d],[f] を切り替えて使っ
ている場合、

・[f] を指定しても、[c],[d] は、それが存在する場合はそれは上の順
  番で必ず一度読み込まれる
・[d] と [f] の間に展開されてしまう latex2html の内部変数もある
  (うまく [f] で再定義が効かないものがある)

などに注意が必要です。特に問題なのが、英語の LaTeX との共存をする
場合と日付の日本語化の問題です。これらに関しては、「3. 英語版との
共存について」「4. 日付と変換者について」を参照して下さい。

なお、[c] の初期設定ファイルのファイル名 (パス名を含まないファイ
ル名部分のみ) は環境変数 L2HINIT_NAME で変更可能なので、[c],[d] 
を無効化したい場合は、L2HINIT_NAME を適当に設定してデフォルトの定
義ファイルを読み込ませないようにする、という回避策はあります (私
も latex2html のテストの際に良くこの手を使います)。


3. 英語版との共存について
-------------------------

日本語でない LaTeX ファイルや英語版の latex2html で公開したい場合
などのためにオリジナルの挙動の latex2html と共存させるには、今ま
での jp1.9,jp2.0 以前の日本語化パッチでは、wrapper スクリプトの 
l2h を使って

% l2h -en [LaTeX file]

とすることで英語化は可能でしたが、これは「2. オプション、初期設定
ファイル等の設定の優先順位」の [a] の中で強制的に english.perl を
読みこむようにしているので、厳密にはオリジナルの挙動とは違ってい
ました。jp1.10beta, jp2.1beta では、それを以下のようにしています。

・jp2.1beta の場合:
  ドキュメントクラスで jarticle 等の日本語用クラスファイルが指定さ
  れていなければ japanese.perl は読みこまれず、オリジナルの 
  latex2html の挙動と同じになる
  
・jp1.10beta の場合:
  -lang オプションがない、あるいは -lang=no の場合で、かつドキュ
  メントクラスで jarticle 等の日本語用クラスファイルが指定されて
  いない場合は japanese.perl は読みこまれず、オリジナルの 
  latex2html の挙動と同じになる (なお、-lang=en の場合は強制的に
  sytles/english.perl を読みこむ)


ただし、いくつか問題があります。

[a] 初期設定ファイルで日本語の設定が行われている場合

これは例えば、

[a-1] jp1.10beta の初期設定ファイルで「$REQUIRE_LANGUAGE = "jis";」
  などと設定している

や、または

[a-2] 強制的に japanese.perl を do_require_package で読み込ませて
  いる

場合が相当します。[a-1] の場合は、

・コマンドラインオプションで -lang=no とする
・カレントディレクトリに .latex2html-init というファイルを作って
  その中で「$REQUIRE_LANGUAGE = "no";」とする (~/.latex2html-init
  を ./.latex2html-init で打ち消す)
・コマンドラインオプションの -init_file で別な初期設定ファイルを
  指定して上と同様にする

などの方法で一応英語化が可能ですが、-init_file で初期設定ファイル
を指定しても、「2. オプション、初期設定ファイル等の設定の優先順位」
で説明したデフォルトの初期設定ファイル [c],[d] は、それらがあれば
[f] より先にそれらが読み込まれることに注意が必要です。


また、[a-2] の場合は、japanese.perl を読んだ内容をすべて打ち消す
のは大変なので、その初期設定ファイル自体を打ち消す方が楽だと思い
ます。一旦初期設定ファイル名を書き変える、という手もありますが、
環境変数を利用する手もあります。

例えば japanese.perl を読み込む形の ~/.latex2html-init を使わず、
それに代わる初期設定ファイル ./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] documentclass のオプションで jarticle 等を使っている場合

jp1.10beta で -lang=(en|no) としても、documentclass のオプション
で日本語用の jarticle 等を使用している場合は、それにより 
japanese.perl が読みこまれてしまいます。よって、japanese.perl を
読みこませたくない場合は、jarticle などの日本語用クラスファイルを
使用しないでください。

また、japanese.perl を読みこむと、jp1.10beta では 
$REQUIRE_LANGUAGE の値に応じて texexpand 内でも日本語コード変換が
行われてしまいますので、8bit 文字列を含む非日本語の LaTeX ファイ
ルでは問題が起こる可能性があります。


4. 日付と変換者について
-----------------------
4.1. デフォルトの値
-------------------

latex2html-2016 までは、latex2html で変換した Web ページの各ペー
ジの一番下に、変換者の氏名と変換日の日付とが表示されるようになっ
ていましたが、現在の latex2html-2017.2 からは、それに使用される変
数 ($ADDRESS) のデフォルトの設定が空文字となり、よって各ページ下
には氏名も日付も表示されなくなりました。

変換者氏名については、latex2html-2016 までは最終ページの「この文
書について」の本文からも削除され、変換日付のみ出力されるようにな
りました。氏名は、OS によっては正しく得られない場合も多いため削除
されたのではないかと思います。

各ページ下の氏名と日付、および最終ページの署名については、従来の
出力に戻すことも難しくはありませんので、それも含めて説明します。


latex2html では、自動計算による日付は、

[d1] LaTeX の \today コマンドの展開結果
[d2] 各ページの一番下に書かれる日付 (latex2html-2016 以前)
[d3] 最終ページに書かれる変換日

で使用され、変換者名 (latex2html の実行者名) も

[a1] 各ページの一番下に書かれる署名 (latex2html-2016 以前)
[a2] 最終ページに書かれる変換者名 (latex2html-2016 以前)

に自動的につきますが、これらは統一することもできますし、バラバラ
に設定することもできます。「1. 日本語化パッチが行なうこと」で紹介
した変数とともに、その仕組みなどについて説明します。

まず、デフォルトの値は以下のようになっています。

    | オリジナル *1)    | 現在の日本語化 *2)
----+-------------------+-------------------
[d1]| February 19, 2018 | 平成30年2月19日 
[d2]| (なし)            | (なし)
[d3]| 2018-02-19        | 2018-02-19
[a1]| (なし)            | (なし)
[a2]| (なし)            | (なし)
----+-------------------+-------------------
 *1) オリジナルの (英語版の) latex2html-2017.2
 *2) jp1.10b, jp2.1b の日本語化パッチをあてたもの
 ただし、いずれも初期設定ファイルの設定がない状態で、*2) について
 は japanese.perl を読み込んで日本語化が行なわれた状態。


4.2. それぞれが設定される仕組み
-------------------------------

[d1],[d2],[d3],[a1],[a2] は、latex2html 内部では次のように設定さ
れます。

[d1] "$default_language"_today() (japanese.perl で定義される 
  japanese_today() 等) が定義されていればその返り値、そうでなけれ
  ば default_today() の返り値

[d2] 変数 $ADDRESS の値。latex2html-2016 以前は、そこに日付を表す
  配列要素 $address_data[1] が使われていたが、latex2html-2017.2 
  では $ADDRESS のデフォルト値は空文字。なお、$address_data[1] の
  値は、get_date('ISO') の返り値。

[d3] $address_data[1] の値 (= get_date('ISO') の返り値)。

[a1] 変換者氏名を表す配列要素 $address_data[0] の値。なお、この値
  は L2hos->fullname() の返り値。

[a2] latex2html-2016 以前は $address_data[0] を使用。
  latex2html-2017.2 以降では、最終ページから変換者氏名部分が丸ご
  と削除されたので英語版では使用されないが、japanese.perl では、
  従来の表記に復帰も可能 ($address_data[0] を使用)。

latex2html が提供する default_today() も japanese_today() も、実
際には内部で get_date() (latex2html が提供) を呼び出していて、そ
の返り値 ("2018-02-19" のような文字列) を加工して、それぞれ
"February 19, 2018" や "平成30年2月19日" のような文字列を作って、
それを返しています。

また、[d2],[a1] は、実際には $ADDRESS の値を表示しているだけです
が、latex2html-2016 以前は

  $ADDRESS = "$address_data[0]\n$address_data[1]";

と定義されていて、これにより変換者氏名と日付が表示されていました
が、latex2html-2017.2 以降は $ADDRESS がデフォルトでは空文字とし
て定義されていますので、現在はデフォルトでは各ページ下には氏名と
日付は表示されません。逆に、$ADDRESS を初期設定ファイルやコマンド
ラインオプション -address で上記のように設定すれば、ページ下部に
従来通りの氏名と日付を表示させることができるようになります。


4.3. 日付文字列を作る関数
-------------------------

日付文字列を作る関数は、latex2html (と日本語化パッチ) でいくつか
用意されています。もちろん、Perl 自身が提供する localtime() など
を使って、色々な現在の日付文字列を作ることができますが、ここでは
latex2html で定義されている関数を紹介します。

・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] 2/19/2018
[g2] 2018-02-19
[g3] 19日2月2018年
[g4] 2018年02月19日

前節の [d3] はこの [g2] を使っています。[g3],[g4] は sprintf() を
内部で呼び出して、指定書式に対応しています。[g3] の場合、引数部分
は日、月、西暦の順で入りますが、[g4] ではそれを更に細かく設定でき
ます。ここで、$order には

 $y = 西暦 - 1900, $m = 月 - 1, $d = 日、@Month = 月名の配列

の変数の値を使うことができます。[g3] は実際に

 sprintf($format, $d, $m+1, 1900+$y)

を行っています。

なお、[g3] では $format (書式文字列) は '' で囲んでも "" で囲んで
もどちらでも構いませんが、[g4] では、$format は '" と "' で (それ
ぞれ 2 文字)、$order は '' で囲む必要があります。

・default_today()

latex2html で定義されている関数で、get_date() を引数なしで呼び出
し ([g1])、月番号を月名に変え (配列 @Month を使用)、日付の 0 を取
り除いて出力文字列に変えています。例えば、"2/19/2018" ならば、
"February 19, 2018" といった出力になります。

月名配列 @Month を再定義すればその出力は多少変えられますが、引数
指定はなく、関数自体を再定義しない限り、その出力文字列を大きく変
更することはできません。

この関数は、(日本語などの) 特定の言語指定がない場合の [d1] の
\today コマンドの展開で使用されます。

・japanese_today()

japanese.perl で定義されている関数で、japanese.perl が読み込まれ
た場合に [d1] の \today コマンドの展開で使用されます。

なお、german.perl で定義されている german_today() のように、各言
語用の日付文字列作成関数が、各言語用ファイルで用意されていて、年、
月、日の表示順や句読点、月名などが各言語用にカスタマイズされてい
ます。

日本語用の japanese_today() は、デフォルトでは "平成30年2月19日"
のような日付を生成していますが、「1.2. 追加された変数やオプション」
で説明されているように、$JAPANESESETMONTHNAME で月名を和名のもの
に変更したり、$USEJAPANESESEIREKI によって年号の元号表示を西暦に
変えることができます。

ただし、$JAPANESESETMONTHNAME は japanese.perl を読み込む前に設定
する必要があり、また [d2],[a1] を latex2html-2016 の状態に復帰す
る (かつ日付を日本語表示する) には、$USEBOTTOMLOCALDATE を設定す
る必要があります。 

japanese_today() は、[d1] 以外に、$USEBOTTOMLOCALDATE を設定した
場合の $address_data[1] の設定に使用されています。そのため、
$USEBOTTOMLOCALDATE を設定した場合は、[d2],[d3] も自動的に [d1]
と同じ日本語文字列になります。それらを違う日付にしたい場合は、
「4.4. カスタマイズ例」を参照してください。


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] を細かくカスタマイズするには、初期設定ファイルの中で

・$USEBOTTOMLOCALDATE を 1 に設定する
・$address_data[1] ([d3]), $ADDRESS ([d2]) の値を書き換える

などの方法があります。前者は、japanese_today() の返り値を
$address_data[1] に設定し、$ADDRESS を

  $ADDRESS = "$address_data[0]\n$address_data[1]";

に設定します。

後者の変数を直接書き換える方法はさらに細かくカスタマイズすること
ができますが、日付は通常は固定文字列を設定するのではなく、変換日
の日付を自動計算させる必要があるので、なんらかの日付文字列の生成
関数を使うことになります (「4.3. 日付文字列を作る関数」参照)。そ
して、そのために japanese_today() 使用する場合は、

 &do_require_package("japanese");

として先に japanese.perl を読み込む必要があります。また、それら
で使用される月名の配列 @Month は、[d1] 同様に再定義したり、
$JAPANESESETMONTHNAME で切りかえることもできます。


[a1],[a2] のカスタマイズは、初期設定ファイルの中で、直接
$ADDRESS や $address_data[0] を再定義すればできます。

なお、各ページの下に書かれる [d2],[a1] は、$ADDRESS の値が使用さ
れていて、これは latex2html のコマンドラインオプション -address 
を使って実行時に指定することもできます。


以下にいくつかサンプルを紹介します。いずれも初期設定ファイルでの
設定例です。==> の後に書いたのがその結果です。

1) [d1],[d2],[d3] を元号表記に統一する:

 $USEBOTTOMLOCALDATE=1; 
 # この後に (自動的、あるいは強制的に) 読み込まれる japanese.perl
 # に影響する

 ==> [d1]=[d2]=[d3]="平成30年2月19日"


2) [d1],[d2],[d3] を日本語の西暦に統一する:

 $USEJAPANESESEIREKI=1;
 $USEBOTTOMLOCALDATE=1;
 # この後に読み込まれる japanese.perl に影響する

 ==> [d1]=[d2]=[d3]="2018年2月19日"


3) [d1],[d2],[d3] を元号表記に統一し、[a1],[a2] を同じ文字列にす
  る (さらに [d2] を 2 行にして、イタリック体に):

 $USEBOTTOMLOCALDATE=1;
 &do_require_package("japanese");
 # ↑これがないと、後で japanese.perl が読み込まれたときに 
 # $ADDRESS が上書きされてしまう
 $address_data[0]="竹野茂治";
 $ADDRESS = "<i>$address_data[0]<br>\n$address_data[1]</i>";
 # <i> や <br> はデフォルトでは含まれていない

 ==> [d1]=[d2]=[d3]="平成30年2月19日", [a1]=[a2]="竹野茂治"


4) [d2] のみをカスタマイズする:

 # [d2] のカスタマイズ
 # (使われていない $address_data[2] を変数として使用)
 $address_data[2] = &get_date('"%dねん%2dがつ%2dにち"','1900+$y,
   $m+1,$d');
 $ADDRESS = "<i>$address_data[0]<br>\n$address_data[2]</i>";

 ==> [d1], [d3] はデフォルトのまま、[d2]="2018ねん 2がつ19にち"


5) [d1] を 19/2/2018 (イギリス式) に、[d2] を 19 Feb 2018 に、
  [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.perl を使う場合は 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[1] = &get_date('"%d %s %d"','$d,$Month[$m],
   1900+$y');
 $ADDRESS = "$address_data[0]<br>\n$address_data[1]";
 # [d3] (上のように @Month を再定義すると japanese_today() がその
 #   影響を受けてしまうので、get_date() を使用)
 $address_data[1] = &get_date('"平成%d年%d月%d日"','$y-88,$m+1,
   $d');
 # [a2] 
 $address_data[0] = "竹野茂治";

 ==> [d1]="19/2/2018", [d2]="18 Feb 2018", 
     [d3]="平成30年2月19日",
     [a1]="Shigeharu TAKENO", [a2]="竹野茂治"


6) [d2],[a1] のデフォルトの設定とは無関係なものをページ下に:

 $ADDRESS = "竹野茂治＠新潟工科大学<br>2018 年吉日";
 # またはコマンドラインオプションで
 # -address="竹野茂治＠新潟工科大学<br>2018 年吉日"


5. 日本語コードについて
-----------------------

現在の日本語化パッチが行う日本語コード処理について説明しておきま
す。

まず、考えるべき日本語コードの種類を、ここでは EUC-JP (euc, E)、
Shift_JIS (sjis, S)、ISO-2022-JP (jis, J)、UTF-8 (utf8, U) としま
す (以後かっこ内の名前で記します)。考えるべきは以下のコードです。

[a] 環境変数 LANG (ユーザ毎)
[b] 入力 LaTeX ファイル (ユーザ毎)
[c] 初期設定ファイル ~/.latex2html-init (ユーザ毎)
[d] styles/japanese.perl (システム)
[e] 画像生成用中間ファイル images.tex (システム、ユーザ毎)
[f] 生成される HTML ファイル (ユーザ毎)
[g] HTML ファイルの meta タグにつけられる charset (ユーザ毎)

最後に「ユーザ毎」と書いたのは、ユーザが指定できるもので、システ
ムと書いたものは、インストール時に決定されるものです。

厳密にはいずれのコードも、euc, sjis, jis, utf8 の 4 種類がありえ
ますが、jis は、原則 [g] のみを想定しています。実際、最近の 
FreeBSD や Solaris などの Unix 系 OS では jis ロケール ([a]) はサ
ポートしていませんし、jis の LaTeX ファイル ([b]) を latex2html 
で処理するとうまく動作しない可能性があります。

[a] は、LANG などによってユーザが設定できるものなので、一つのイン
ストールで複数の [a] に対応できる必要があります。最近の perl では
LANG が latex2html の処理に影響することはなく、[a] はむしろ [e] 
の処理に影響を与えるようです。なお、LANG を jis に設定できるシス
テムは多くはないだろうと思います。こちらでも、LANG のテストは、
euc, sjis, utf8 のみで行っています (最近は主に FreeBSD 上)。

[b] は、多くの場合は各ユーザのロケール ([a]) に等しいだろうと思い
ますが、当然ユーザ毎 (時にはファイル毎) に異なる可能性があります。

[c] は、ユーザ毎に設定するファイルですが、直接 latex2html のコー
ドの一部として取り込まれるため、正しい動作をさせるには、適切な日
本語コードで作成 (あるいは変換) する必要があります。日本語化パッ
チ jp1.10beta では原則 euc、jp2.1beta では、configure 時に 
--kanji で指定したもの (euc または utf8) でなくてはいけません。そ
れ以外の日本語コードで作成すると、生成される HTML ファイルが文字
化けする可能性があります。

[d] も、latex2html の一部として取り込まれるため、[c] と同じで適切
な日本語コードでなければいけませんが、この日本語コードはインスト
ール時に自動的に決定されます。日本語化パッチ jp1.10beta では euc、
jp2.1beta では configure 時に --kanji で指定したもの (euc または
utf8) になります。

[e] は、latex2html が内部で数式の画像化のために作成する一時的なフ
ァイルで、現在の jp1.10beta パッチでは、$TONATIVE の設定を使って
変換し、jp2.1beta パッチでは [b] と同じものになります。
latex2html は内部で platex を呼びだしてこのファイルをコンパイルす
るので、platex が仮定するコードと images.tex のコードが合っていな
いと、数式画像内の日本語が化けますが、platex が仮定するデフォルト
の日本語コードはロケール ([a]) の影響を受けるので、現在の 
jp1.10beta パッチでは、インストール時に $TONATIVE で決定する [e] 
のコードに合わせて platex に強制的に -kanji オプションを付けて 
platex のコードを $TONATIVE の設定に合わせています。
jp2.1beta ではデフォルトの platex のまま (-kanji オプションなし)
でコンパイルします。

[f] は、jp1.10beta パッチでは、-lang オプションによって実行時に色
々なものに変更することが可能です。デフォルトでは config/config.pl
の $TOHTML で設定される jis になります。jp2.1beta パッチでは、日
本語コード変換を行いませんので、[b] と同じものになります。

[g] は、[f] の各 HTML ファイルのヘッダに meta タグとして、

  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">

のようなものがつけられるのですが、この charset の後ろに書かれる 
charset 名のことです。これと [f] の日本語コードが合っていないと、
参照するブラウザによっては文字化けする可能性があります。
jp1.10beta パッチでは、-lang オプションで設定する [f] のコードに
連動して変更されますが、その設定は styles/japanese.perl で行われ
ています。
jp2.1beta パッチでは、styles/japanese.perl で元々設定されているも
のが使われますが、それはインストール時に --with-kanji オプション
で決定され、固定されています。
ただし、jarticle.sty などを使わない LaTeX ファイルでは (そして初
期設定ファイルで日本語環境が設定されていない場合は)、
styles/japanese.perl は読み込まれないため、この meta タグの設定は
オリジナルの latex2html と同じ挙動となります (デフォルトでは meta
タグなし)。


普通に考えると、[a], [b], [c] はユーザ毎に変更でき、[d], [e] はイ
ンストール時に決定、[f], [g] はユーザ毎に変更でき、[a]=[b]=[c],
[d],[e] はシステム用に適当なもの、[f]=[g]、が自然に思いますが、実
際は、

・jp1.10beta:
  [a], [b] はユーザ毎に違ってよい、[c] = [d] は EUC-JP 固定、[e] 
  はインストール時に決定、[f] = [g] はユーザ毎に違ってよい

・jp2.1beta:
  必然的に [e] = [f] = [b] となるが、インストール時に euc か utf8
  に固定される ([d], [g] もそれになる) ため、[a], [b], [c] のすべ
  てがそれと合っていなければならない

のようになっています。

しかし、例えば HTML ファイルを公開するサーバに転送する際に、勝手
に HTML ファイルの日本語コードを変換してしまうようなシステムでは
[f] = [g] では不都合が出る場合もありますし、[c] をユーザ毎に [a] 
に合わせたい、といった要望もあるでしょう。

最終的には、perl の拡張機能である Encode モジュールを使って、nkf
なしに日本語文字コードの相互変換をまかなうのがよいだろうと思うの
ですが、

・Encode モジュールの使用が現在の perl ではあまり推奨されていない
  (全部 UTF-8 化すべき ?)
・Encode モジュールを使用する場合、その変換は nkf 部分だけを置き
  かえればよいわけではなく、安定動作したものがまだできていない

といった問題もあり、以前は日本語コードの指定の自由度を上げる方向、
すなわち [a], [b], [c], [f], [g] に独立な日本語コードの設定が行え
るような仕組みを考えていましたが、そこまでの需要もなさそうですし、
安定動作の方が優先すると思いますので、現在は日本語コードの変換は
むしろ最低限にする方向で考えていて、しばらくは現在の 1.10beta と
2.1beta を併用させた状態を維持したいと思っています。


6. 目次
-------
1. 日本語化パッチが行なうこと
 1.1. 日本語化パッチの機能
 1.2. 追加された変数やオプション
 1.3. jp2.1beta の UTF-8 対応
2. オプション、初期設定ファイル等の設定の優先順位
3. 英語版との共存について
4. 日付と変換者について
 4.1. デフォルトの値
 4.2. それぞれが設定される仕組み
 4.3. 日付文字列を作る関数
 4.4. カスタマイズ例
5. 日本語コードについて
6. 目次

+=================================================+
 竹野茂治   〒945-1195 新潟工科大学 情報電子工学科 
 shige@iee.niit.ac.jp      TEL(&FAX): 0257-22-8161 
+=================================================+
