swk's log 最新ページ

latex2html - from swk's log

2012-02-25 Sat

* Windows 環境への LaTeX2HTML のインストールと手直し [latex2html] 2 users

LaTeX2HTML で生成して勤務先のサイトで公開していた講義資料がどういうわけか 1000 ブクマを超えたのを記念して,その過程で蓄積された LaTeX2HTML に関する バッドなノウハウを放出していこうと思う.たぶん何回かに分かれます.

何度も書いている通り 今の私のメイン環境は Windows + Cygwin なので,(そもそも UNIX 育ちのソフトウェアである) LaTeX2HTML も Cygwin でさくっと普通に動かせばいいんじゃないかと当初は思ったが,どっぷりハマって結局うまくいかなかった.

そんなわけで普通に Windows 用の移植版を使うことにしている.Perl くらいは Cygwin の /usr/bin/perl でいいんじゃないかと思ったが,これもどういうわけかダメだった.観念して,やっぱり普通に ActivePerl for Windows を使うことにする.

前提環境

インストール

LaTeX2HTML-2002-2-1 for Win32 を使うことにする.より新しい LaTeX2HTML-2008 もあるようだけど,試してない.基本的にはこのページのインストラクション通りの手順で進めていけばよい.

l2h-netpbm.exe をインストール.C:\l2h にいろいろ入る.(一部ツールが Cygwin とかぶってて冗長だ? 気にしません)

l2h2002-2patched-2.zip を展開.C:\local に展開したとする.

コマンドプロンプトを開き (Cygwin のシェルでもできそうな気がするが,追求しない),

> cd \local\l2h2002-2pached-2
> config PREFIX+c:\usr\local\latex2html
> install

を実行してインストールする.

この際,環境変数 PATH の中で C:\l2h\...\bin 等が C:\cygwin\bin より前にないとうまくいかないようだ.インストールのときだけ,これらを前の方に持ってきておく.(「コマンドプロンプト環境で Cygwin のコマンドに path なんか通さねーよ」という品行方正な方はこの段落は無視して結構です).

微修正

これで一応インストールは完了だが,少し手直しをしておく.具体的には, LaTeX2HTML のスクリプト本体と設定ファイル

  • C:\usr\local\latex2html\bin\latex2html.bat (bat だが,中身は実質的に Perl スクリプト)
  • C:\usr\local\latex2html\l2hconf.pm

をそれぞれ以下の通り修正する (+ の行を追加.- の行を削除).

--- latex2html.bat.orig
+++ latex2html.bat

(1883行目付近,slurp_input 関数の中)

         $string{'STRING'} = join('',@file_string);
+        $string{'STRING'} =~ s/([\x80-\xff])[\t ]*\n[\t ]*([\x80-\xff])/$1$2/g;

(15670行目付近,initialise 関数の中)

+        unless ($DOCTYPE) {
        $DOCTYPE = "-//".(($HTML_VERSION eq "2.0")? "IETF" : "W3C")
            . "//DTD HTML $HTML_VERSION"
            .(($HTML_VERSION eq "3.2")? " Final" : "")
            .(($HTML_VERSION eq "4.0")? " Transitional" : "");
+        }
--- l2hconf.pm.orig
+++ l2hconf.pm

(145行目付近)
-$DVIPSOPT = ' -Ppdf  -E';
+$DVIPSOPT = ' -E';

(570行目付近)
-$HTML_VERSION = '3.2';
+$HTML_VERSION = '4.1';

まず l2hconf.pm の $DVIPSOPT については, Q and Aの初っ端 にある通り.-Ppdf があると数式に下線がついたりするので外しておく.

次に latex2html.bat の slurp_input 内の部分について.日本語の TeX のソースファイルを適宜改行しながら書いている場合,そのまま HTML 化すると,ブラウザによっては改行のところに空白が空いてしまって見苦しい.これを取り除く処理を追加している (内部処理が EUC であることが前提. l2hconf.pm 内の $FROMNATIVE が EUC への変換になっていれば OK).

さて,問題は残りの部分である.初期状態では HTML 3.2 を吐くように設定されているが,さすがにアレなので,せめて HTML 4.01 くらいにはしたい.当然 l2hconf.pm に $HTML_VERSION = '4.01'; とか書いてみるわけだが,なぜか HTML 4.0 が吐かれてしまう.

実は LaTeX2HTML の内部は,$HTML_VERSION が「数字1桁 ドット 数字1桁」であることが前提のコードになっていて,4.01 は丸められて 4.0 になってしまう.この点を LaTeX2HTML がどうやって回避するかというと, $HTML_VERSION には 4.1 を指定しておき,その結果読み込まれることになるファイル latex2html/version/html4_1.pl に HTML 4.01 の設定が書かれているというすごい仕様が採用されている.

というわけで,$HTML_VERSION = '4.1'; と書いてみると,確かに html4_1.pl が読み込まれて HTML 4.01 らしきものが吐かれるわけだが,それでもなぜか先頭の DTD コメント行には「HTML 4.1」と書かれるようになる.それもそのはずで,html4_1.pl 内で正しく設定された $DOCTYPE 変数を, latex2html.bat 内で $HTML_VERSION を使ってわざわざ上書きしているのであった.仕方ないのでそこをスキップしたのが latex2html.bat の15670行目付近の修正.ひどい話だが,この辺は latex2html-2008 では直ってるんですかね.

実行

latex2html.bat に引数として tex ファイルを渡して実行すればOK.あるいは C:\l2h\tools\l2h.bat という (出力メッセージをシフト JIS に変換して表示する) ラッパーがあるので,そちらに渡してもよい.

ただし l2h.bat は引数を 6 個までしか取らないので,多数のオプションを渡したいときは -init_file オプションを使って設定ファイルを読み込ませるのがよい.

次回(?)はその設定ファイルのお話.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Alfredtib] wh0cd982906 [url=http... (2017-04-30 21:42:35)

* [KennethRurry] wh0cd297730 [url=http://ventolin7.top/]v... (2017-04-30 20:13:30)

* [Cliftonjar] Что думаете о интернет магазине и ценах ... (2017-04-30 17:49:32)

* [Aaronlon] wh0cd427966 [url=http... (2017-04-30 13:12:26)

* [KennethRurry] wh0cd711084 [url=http... (2017-04-30 05:54:57)

* ...

最終更新時間: 2012-02-25 19:20


Shingo W. Kagami - swk(at)kagami.org