Latex2HtmlをWindowsで使う
Last-Modified: 2008-01-07 18:45:32
はじめに
Latex2Htmlはtex文章をWebで気軽に閲覧できるようにhtmlファイルに変換するもの。Unix系OS上で使用されることが多いようだ。このLatex2htmlをWindows上で使う。
環境
- OS : Windows2000 professional
- その他 : CYGWIN_NT-5.0 2007-12-14 19:21
目標
- Windows上にLatex2Htmlをインストールし使用可能にする。
- インストールしたLatex2Htmlの出力をカスタマイズする。
必要なもの
やる気と時間
思った以上に面倒なことが多い。latex2html は主に UNIX 系のOSで使用されているのでwindows に関する情報が少ない、文字コードも違う。しかも、基本は英語なので、日本語化もしなきゃいけない。結構大変。
latex2html 本体
これがなくちゃはじまらない。
http://www.latex2html.org/ のDownload より http://saftsack.fs.uni-bayreuth.de/~latex2ht/current/latex2html-2002-2-1.tar.gz から、latex2html-2002-2-1.tar.gzをダウンロード。(2008年1月でこれが最新。)
Perl(Active Perl)
Cygwin の Perl は上手くいかなかった。path の関係か?
Active Perl を http://www.activestate.com/Products/activeperl/ より入手。path の通ったところにインストールするか、pathに追加する。
Netbpm
画像出力に使われる。重要。
1 March 1994 が推奨。しかし、そんな古いもの、もうない。 l2h-netbpm なるものがあるらしいのだが、リンク切れで入手できず。 本家っぽいサイトから違うものを入手する。 http://netpbm.sourceforge.net/から Pre-Built Distributions -> Netpbm 9.16 for DOS (Built with DJGPP) で古いNetbpmを入手。
日本語化パッチ
やはり、そのままではどうやら使いづらいらしい。 ありがたいことに日本語化パッチが公開されているので、 http://takeno.iee.niit.ac.jp/~shige/TeX/latex2html/ltx2html.html から、l2h-2002-2-1+jp1.9.patch.gz を入手。
windows 環境なので l2h-2002-2-1+jp2.0.patch.gz よりも l2h-2002-2-1+jp1.9.patch.gz が良いと思われる。(経験則)
patch commad
先の日本語化パッチを適用する際に patch コマンドを使用する。なので、pacth commandが必要。
Cygwin の setup.exe から入手可能。 (これが楽で確実か。)
nkf
日本語の文字コードを変換する時に必要。これは便利だからあったほうが良い。
(shift-jis でない環境へ ssh するときに
ssh name@host | nkf --windows -u
とすると文字化けしない、はず。)
cygwin,windows どっちのでもいいと思う。
tex
最後になったが、もちろん日本語tex環境も必要。
Install
tex,perl,netpbm,pacth 等を path の通った場所にインストール。
次に適当な場所に(ここではとりあえず C:\temp)に latex2html-2002-2-1.tar を展開。 l2h-2002-2-1+jp1.9.patch.gz も展開して l2h-2002-2-1+jp1.9.patch を取り出しておく
パッチあて
次に以下のコマンドでパッチをあてる
cd C:\mp\latex2html-2002-2-1
patch -p1 < ..\l2h-2002-2-1.jp1.9.patch
そしたら、たくさんのファイルができる。README.patch-2002jp とか参考になる。
cd C:\temp\latex2html
config PREFIX+C:\tex
test
などとして、一度動くか確認しよう。(test.batはCygwinでは上手く動かなかった。)
japanese.perlの変更
文字化け対策のため utf-8 を用いる。 japanese.perlを
$charset = 'UTF-8';
$japanese_encoding = 'UTF-8';
と変更し、文字コード utf-8 で japanese.perl を保存。
config.plの変更
さらにconfig/config.plを以下のように変更
$newcfg{'TONATIVE'} = "|$nkf --windows";
$newcfg{'TOHTML'} = "|$nkf --utf-8";
$newcfg{'FROMNATIVE'} = "$nkf -utf-8"
TONATIVE の文字コードは utf-8 でも変化はなかったような気がする。 結局コンソールの文字は化けてしまう。 嫌なら、
| nkf --windows -u
とパイプすれば、文字化けしなかった記憶がある。
当然ながら、変換もとの tex ファイルの文字コードも utf-8 。 (Meadow では C-x [RET] f で文字コードを指定して保存。 C-x [RET] c で文字コードを変更して再読み込み。 nkf 使って変換しようと思ったが上手くいかなかった。 )
prefs.pmの変更
環境に合わせてprefs.pm を以下のように編集
$prefs{'PREFIX'} = 'C:\\tex';
$prefs{'ICONPATH'} = '../../l2hicons'
$prefs{'PNG'} = 1;
- PREFIX : latex2htmlのインストールディレクトリ
- ICONPATH : iconを保存する場所
- PNG : 画像出力にPNGを使うか
いまはgifよりもPNGが主流と思われる。PNGのほうがきれいな気がする。(あくまでも気がするだけ。)
installの実行
そして、コマンドプロンプト(Cygwinでは上手くいかない)でlatex2htmlを展開したディレクトリで
config
test
install
とすれば C:\tex 以下に Latex2html がインストールされる。 上手くいかないとtestでエラーがでるはず。 今の時点では画像が灰色で塗られいるかも。(後で修正)
注意:この設定だと tex\bin の中に latex2html の bin ファイルが入る。 latex2html のアンインストールが困難になる。 混ざるのが嫌なら
>config PREFIX+=c:\tec\l2h
とすればよいと思う。(ためしてない) ただ、これだと latex2html に path を通さなくてはいけない、ちょっと面倒
設定
上のままでもつかえるが、少し手を加える。
画像内の日本語の文字化けを防ぐために、 c:\tex\lib\latex2html\l2hconf.pm の中
$LATEX = 'C:\\tex\\bin\\platex.exe --kanji=utf8';
と --kanji=utf8
を追加 これで上手くいってる。
latex に今の文字コードを教えている。何もしないと shift-jis であると認識してコンパイルするから、文字化けが起こるようだ。
また、画像の背景色を変更
#$LATEX_COLOR = "\\pagecolor[gray]{.7}";
$LATEX_COLOR = "\\pagecolor[white]{1.0}";
これで、画像が灰色に塗られることは起きない、はず。
あと、実行すると
**********WARNINGS********** No implementation found for style `graphicx'
とでるが問題ない様子。
同様に lstliting とかも警告が出るがこれはもともと対応していないらしい。 仕方ないがLatex2Htmlと一緒には使えない様子。
以上で基本的な設定は終了。これでLatex2HtmlがWindows上でも使えるはず。一つ目の目標は達成。
実際のサンプル例。(ただこの例はl2hconf.pmを少し変更してnavigation部のマークアップを変えている。)
出力のカスタマイズ
latex2htmlが出力するhtmlは汚いし、味気ない。 例えば、pタグが閉じていなかったり、idがダブっていたり。
そこで、perlやHTML TIDYを用いて、latex2htmlが出力したhtmlを変換する。
l2hconf.pmの変更
まず、 l2hconf.pmを以下のように編集
#$EXTERNAL_UP_LINK = '';
#$EXTERNAL_UP_TITLE = '';
$EXTERNAL_UP_LINK = "http://tmlaboratory.web.fc2.com/htdocs/doc";
$EXTERNAL_UP_TITLE = "Document";
#$BOTTOM_NAVIGATION = 0;
$BOTTOM_NAVIGATION = 1;
sub navigation_panel {
"<!--Navigation Panel-->"
# Now add a few buttons with a space between them
. "$NEXT $UP $PREVIOUS $CONTENTS $INDEX $CUSTOM_BUTTONS"
. "\n<ol class=\"navigation\">" # Line break
# If ``next'' section exists, add its title to the navigation panel
. ($NEXT_TITLE ? "\n<li> $next_name: $NEXT_TITLE</li>" : undef)
# Similarly with the ``up'' title ...
. ($UP_TITLE ? "\n<li> $up_name: $UP_TITLE</li>" : undef)
# ... and the ``previous'' title
. ($PREVIOUS_TITLE ? "\n<li> $prev_name: $PREVIOUS_TITLE</li>" : undef)
# ... and the ``contents'' title
. ($CONTENTS_LINK ? "\n<li> $CONTENTS_LINK</li> " : undef)
# ... and the ``index'' title
. ($INDEX_LINK ? "\n<li> $INDEX_LINK</li> " : undef)
# These <BR>s separate it from the text body.
. "\n</ol>"
}
sub bot_navigation_panel {
# Start with a horizontal rule (3-d dividing line)
"<hr />\n" . "<!--Navigation Panel-->"
# Now add a few buttons with a space between them
. "$NEXT $UP $PREVIOUS $CONTENTS $INDEX $CUSTOM_BUTTONS"
. "\n<ol class=\"navigation\">" # Line break
# If ``next'' section exists, add its title to the navigation panel
. ($NEXT_TITLE ? "\n<li> $next_name: $NEXT_TITLE</li>" : undef)
# Similarly with the ``up'' title ...
. ($UP_TITLE ? "\n<li> $up_name: $UP_TITLE</li>" : undef)
# ... and the ``previous'' title
. ($PREVIOUS_TITLE ? "\n<li> $prev_name: $PREVIOUS_TITLE</li>" : undef)
# ... and the ``contents'' title
. ($CONTENTS_LINK ? "\n<li> $CONTENTS_LINK</li> " : undef)
# ... and the ``index'' title
. ($INDEX_LINK ? "\n<li> $INDEX_LINK</li> " : undef)
."\n</ol>"
}
navigation関係を変更。下部にnavigationを追加して、マークアップをxhtml風に。
perlとHTML TIDYを使う
そして、htmlファイルをperlとHTML TIDYを使用して編集する、shell scriptを作る。(ファイル名はここではl2h2xhtml.sh)
#! /usr/bin/sh
link1="<link rel=\"stylesheet\" href=\""
link2="../../css/sky.css\" type=\"text/css\" />"
header="<body id=\"latex\"><div id=\"header\" title=\"T.M LABORATORY\"><p id=\"logo\">T.M LABORATORY</p>
<p>since 2006-01-30</p></div><div id=\"main\">"
xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
author="Toru Mano."
mail="Copyright © <a href=\"mailto:toru.mano@gmail.com\">"
test -z “$1” && echo “Usage: htmltex-arrange <directory>” && exit
cd “$1”
find . -maxdepth 1 -type f -name ‘*.html’ | while read html; do
echo “$html”
perl -i.bac -p0777e “s%<BODY >%$header%gi” “$html”
perl -i.bac -p0777e “s%<LINK REL=\"STYLESHEET\” HREF=\"\w.*.css\">%$link1$link2%gi" “$html”
perl -i.bac -p0777e “s%<ADDRESS>%</div><address>%gi” “$html”
perl -i.bac -p0777e “s%<address>\s+Administrator%<address>\n$author%gi” “$html”
perl -i.bac -p0777e “s%<A\W*NAME=\"([^\"]+)\"\W*HREF=\"([^\"]+)\" %<a href=\"\2\"%gi” “$html”
perl -i.bac -p0777e “s%<HTML>%<html xml:lang=\"ja\” lang=\"ja\">%g" “$html”
perl -i.bac -p0777e “s%<\!--Converted[^>]+>%%g” “$html”
sed “s%$author%$mail$author</a>%g” < “$html” > “$html.sed”
mv “$html” “$html.bac”
mv “$html.sed” “$html”
/cygdrive/c/tex/tidy_jp_win/tidy.exe -config c:/tex/tidy_jp_win/tidy_conf.txt -m “$html”
perl -i.bac -p0777e “s%<\?xml version=\"1.0\"\?>%$xml%g” “$html”
rm “$html.bac”
done
perlを使って、htmlファイルを置換。a要素のidがnavigationで二重に宣言されていることがあるので、削除。
また、自分で作成したcssを適用させるためhtmlのheadとbody以下に少々変更を加える。
忍者のweb space にアップロードするとIE(IE 6)ではxmlで表示されてしまう。 原因不明。しかし、先頭付近にある<!--Converted ... >を削除すればちゃんと表示される。 おそらく、ファイルの先頭付近にタグがないとxmlモードになるものと予測される。
HTML TIDYで、htmlからxhtmlへ。
html,xmlにlang,encodingを追加。
bacth file の作成
最後に、latex2htmlとl2h2xhtmlを連携させるbatch fileを作成。(ファイル名はlatex2xhtml.batとでもしおく。)
@echo off
echo starting latex2html ...
call latex2html %1 %2
echo starting l2h2xhtml ...
sh l2h2xhtml.sh %1
これで、各ファイルをpathの通った場所におき、
latex2xhtml.bat <file_name>
で実行できる。 但し、file_nameには拡張子.texを含めない。 (l2h2xhtmlがディレクトリを要求するため)
そしてこれが、最終的な 出力例。
残る問題
cssでlatex2htmlの出力ページを装飾すると数式表示にtableが使われているので そのborderを消さなくてはいけない。しかし、数式のほかにもtableが使われている場所があるとそのborderも一緒に消えてしまう。両方のtableにはidもclassもついていない。さぁ、どうしましょうか。