latex2html (2)
昨日に続いてこの話を。
latex2html だけど、思ったよりちゃんと変換をしてくれる。ルビを使っているとその部分がうまく変換されない(HTML はルビを扱えるのだけど)、というのと、OTF パッケージを使用している場合に変換がうまく行えない(これは想定の範囲内だった)、ということはあるけれど、たとえば論文とか、何かのソフトのドキュメントとかを変換するのには、たしかにこれは重宝しそうである。
……などと思っていたら、例の TeX フォーラムの質問者が、「文字化けがまだ解消されない」と書いている。よくよく聞いてみると、\documentclass に article を設定していると文字化けが生じ、jarticle を設定していると文字化けが生じない、という。
あー、なるほど。おそらくこの人は、TeX / LaTeX レベルのことしか見えなくなってしまっているに違いない。日本語の HTML の文字化けのかなりの割合が、charset の不適切な設定に起因する、ということは、僕にとっては基本的な経験則なのだけど、ほとんどの人にとってはそうではないのだろう。
質問者が提示してきた2種類の LaTeX document から DVI ファイルを生成してから、latex2html で HTML ファイルを生成して比較をすると……ああ、やっぱり。article を指定した方の LaTeX document から生成した HTML ファイルには、
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">がない。これが、質問者が「文字化けする」と言う原因に違いない。
HTML において META タグで charset を明示することは must ではないはずなのだ。たとえば、僕の手元の HTML document では全て META タグで charset は管理しているのだけど、万が一これが欠落していても、それで確実に文字化けする、ということはないはずだ(誤った charset を明示していたら、ほぼ確実に化けると思うけれど)。まあでも、質問者の言う「文字化け」の原因は、これ以外にはちょっと思いつかない。
latex2html に charset を指定する META タグの生成を強制するためには、~/latex2html-init 内に、
$charset = "UTF-8";と明示しておけばよい。一応その旨回答しておいたけれど……うーむ。META タグでの charset 設定がないと確実に文字化けする環境だったら、たしかにここでハマる可能性はあるかもねえ。ただし、複数種類のブラウザで検証していたら、このことには早々に気付きそうな気もするけれど。生成された HTML document の diff をとってみる、とか、思いつかないものなのだろうか……いや、責める気は毛頭ないですよ。確かにハマるかもしれないからね。