1. Home
  2. Memo
  3. Latex2HtmlをWindowsで使う

Latex2HtmlをWindowsで使う

Last-Modified: 2008-01-07 18:45:32

はじめに

Latex2Htmlはtex文章をWebで気軽に閲覧できるようにhtmlファイルに変換するもの。Unix系OS上で使用されることが多いようだ。このLatex2htmlをWindows上で使う。

環境

目標

  1. Windows上にLatex2Htmlをインストールし使用可能にする。
  2. インストールした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;

いまは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もついていない。さぁ、どうしましょうか。

Memoに戻る | Homeに戻る

Copyright (c) Toru Mano. Last-Modified: 2008-01-07 18:45:32