前の月 / 最新

swk's log 2012-02

<< 2012-02 >>
SuMoTuWeThFrSa
1234
567891011
12131415161718
19202122232425
26272829

2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
2000 : 01 02 03 04 05 06 07 08 09 10 11 12
1999 : 01 02 03 04 05 06 07 08 09 10 11 12
1998 : 01 02 03 04 05 06 07 08 09 10 11 12
1997 : 01 02 03 04 05 06 07 08 09 10 11 12
1996 : 01 02 03 04 05 06 07 08 09 10 11 12

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 ( )] [固定リンク]

* [reneyt16] Hardcore Galleries with hot Hardcore pho... (2019-02-24 14:48:12)

* [Josephdab] official source http... (2019-02-23 19:32:18)

* [avtowwdab] [url=http://avto-podbor.kz/]помощь в пок... (2019-02-23 02:26:54)

* [vickiexx1] Sexy pictures each dayhttp... (2019-02-23 01:56:06)

* [Georgepoche] [url=https://l2soft.eu/]l2 bot adrenalin... (2019-02-21 17:52:35)

* ...

2012-02-14 Tue

* UNIX使いだった俺がWindowsに移行してみるよ -- Meadow (Emacs) [unix2win] 2 users

カレー作りにかまけて久しく放置していたこのシリーズ [2010-01-22-1],その間に私のメイン環境も Windows XP から 7 に変わっていたりして既報分も最早アレなのだけど,まあその辺は追々書いていくことにして,今日はテキストエディタ Emacs (の Windows 版である Meadow) の話.

私自身は,ある程度以上の長さのテキスト書き (メール含む) はほぼ常に Emacs を使っているわけですが,それを見た人から「Emacs ってそんなにいいですか?」と聞かれたり,ごく稀に「Emacs 使ってみようと思うんですけど…」とか相談されたりします.えーと,あのー,まあ,なんだ, お勧めはしません.特に必要がない限り,今さら Emacs なんて使い始める必要はないんじゃないですかね? 私はもう他のエディタを体が受け付けないので使い続けますが.


さて微妙な雰囲気になったところで,インストールのメモ.Windows 7 で Meadow 3.01 の Netinstall 版を使う.

パッケージの選択はいつも悩むところ,というか,インストールする度に前回は何を入れたか忘れていてアレなのだが,現時点では (meadow/packages/setup/installed.db によれば) 以下のものがインストールされている.あまり深く考えずにインストールしているようだ.正直 tdiary-mode とか何のために入れてるのかわからんし.JDEE 関連は,入れたらパッケージ読み込みが途中でおかしくなったので外した.まあ使わないし.フォント関係は特に何も入れていない.

apel apel-10.7-1.tar.bz2 0
css-mode css-mode-1.0-1.tar.bz2 0
flim flim-1.14.9-1.tar.bz2 0
gnuserv gnuserv-0411-1999-5.tar.bz2 0
html-helper-mode html-helper-mode-3.8-4.tar.bz2 0
imagemagick imagemagick-6.2.8-0-Q16-1.tar.bz2 0
info-ja-eintr info-ja-eintr-2.04-3.tar.bz2 0
info-ja-elisp info-ja-elisp-2.9-4.tar.bz2 0
info-ja-emacs info-ja-emacs-21.3.50-2.tar.bz2 0
ispell ispell-3.3.02-1.tar.bz2 0
japanese-holidays japanese-holidays-1.1-1.tar.bz2 0
javascript-mode javascript-mode-2.0b8-2.tar.bz2 0
Meadow Meadow-3.02-r4261-3.tar.bz2 0
mew mew-5.1-1.tar.bz2 0
migemo migemo-1.8-1.tar.bz2 0
misc misc-0.7-1.tar.bz2 0
mule-ucs mule-ucs-0.85-20050113-2.tar.bz2 0
pukiwiki-mode pukiwiki-mode-2.30-1.tar.bz2 0
ruby-mode ruby-mode-23606-1.tar.bz2 0
semi semi-1.14.6-4.tar.bz2 0
tdiary-mode tdiary-mode-20050831-1.tar.bz2 0
yaml-mode yaml-mode-0.3-1.tar.bz2 0

コントロールパネル-システム で設定している環境変数は

TZ    	JST-9
GNUCLIENT     -F
GNUCLIENTW    -F
HOME  	C:\cygwin\home\swk

TZ がないと,とりあえず目に見えるところでは,Mew で送ったメールのタイムゾーンがおかしくなるようだ.

GNUCLIENT(W) の -F は,gnuclient(w) コマンドでファイルを開いたときに Emacs のウィンドウを前面に出すオプション,のはずだが,どうも効いてないような.


各種設定は .emacs ファイルに書くわけだが,UNIX 中心で Emacs を使っていた頃から .emacs は肥大化しまくっていて,何が必要で何が不要なのかさっぱりわからない状況になっていた.これを機にざっくり整理してみた.

.emacs.meadow [この記事の公開時の版] [最新版] (これを .emacs の中から load している)

以下大雑把にメモ.見出しは .emacs.meadow 内のコメントに対応している. (見出しからのリンクは,この記事の公開時のファイルの該当箇所を指している)

;; MULE-UCS; must be put before set-language-environment

UTF-8 なファイルが扱えないと仕事にならない昨今,mule-ucs はどうしても必要.コメントに書いてある通り, set-language-environment する前に jisx0213 を読み込まないといけないという罠がある.

;; ime

文字化けして見えるかもしれない行は

(setq mw32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))

と書いてある.基本的には Meadow に標準でついてくる設定ファイルの通りだけど,

(add-hook 'mw32-ime-on-hook '(lambda () (set-cursor-color "green")))
(add-hook 'mw32-ime-off-hook '(lambda () (set-cursor-color "black")))

として IME の状態によってカーソルの色を変えている.それから,y/n とか yes/no と聞かれたときに IME がオンになっているとイラッとするので,

(wrap-function-to-control-ime 'y-or-n-p nil nil)
(wrap-function-to-control-ime 'yes-or-no-p nil nil)

を入れている.その直後で IME の オン/オフ を C-o にバインドしているが,これは canna を使っていた頃の名残り.あ,というか FreeBSD では今も canna 使っているので名残りというのはおかしいのだが.

その後はしばらく標準の設定項目が続く.よく理解していないものも多い.

;; printing: use ps-print-{buffer,region}[-with-faces]

Windows の文化では驚くべきことかも知れないが,Meadow は標準のままで自前でテキストファイルを印刷することができない(はず).なので,他のテキストエディタ (notepad とか) にファイルを渡して印刷させたりということがよく行われるが,残念な感じが漂い過ぎなので何とかしたい.

一方で,Meadow は Emacs であって UNIX 文化で育ってきたソフトウェアなので,PostScript として出力して印刷するのはお手の物,というかそうするのが正しいと考えて作られているフシがある.おとなしくそれに従うのがよかろう.PostScript プリンタ以外に出力するためには gs (GhostScript) を使えばよい.というわけで gsview32 に渡すように設定している.印刷するときはコメントにあるように

M-x ps-print-buffer
M-x ps-print-buffer-with-faces
M-x ps-print-region
M-x ps-print-region-with-faces

のいずれかを実行する.-with-faces があると色つきになる.

行番号の有無とかヘッダの有無とか,いろいろ切り替えられるようにしようかと思ったこともあるけど,現状でそれほど困らないのでずっと後回しにしたままである.

;;printing in mew: use mew-summary-print (# key)

メールの読み書きにはずっと Mew を使っています.Mew の設定は基本的に.mew.el という別ファイルに分かれていて,その設定についてはまた改めて書こうと思うが,とりあえずここで印刷用の設定だけをしている.要はヘッダをつけて ps-print-buffer-with-faces を呼んでいるだけ.

なぜこれが .mew.el じゃなくて .emacs に入っているのかというと,たぶんこれが Meadow/Windows 依存なので .mew.el からは分離したいと,この設定を書いた当時の私が考えたからだと思う.実は .emacs も Meadow 依存のファイルとそれ以外の共通設定ファイルに分かれていたのだが,だんだん面倒くさくなってまとめてしまって今に至る.

;; imaxima

Maxima,ときどき使います.標準の端末ではどうにも使いにくいし wxWidget のインタフェースも好きじゃないので,結局 Emacs で使うことに. imaxima は表示も見やすくてよい.

;; basic preferences

なぜこんな中途半端なところから「基本設定」が始まるのかというと,昔はここから (Windows に依存しない) 共通設定ファイルが始まってたからですな.今はもうグダグダになってますが.

比較的最近 (といってもここ数年) になって使い始めたものとしては:

(show-paren-mode nil)

括弧の対応を表示.これってどうして nil なんだっけ,と思って今調べたら,デフォルトでオフなのを toggle してオンにすることになるらしい. nil の代わりに正の数にすれば,もとの状態に関わらずオンにするようだ.そのうち直す.

(define-key minibuffer-local-completion-map "\C-w" 'backward-kill-word)

ミニバッファで C-w を打つとカーソル前の文字をワード単位で消してくれる.C-x C-f したときに長いディレクトリ名を編集する場合などに便利.

(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)

同名のファイルを複数開いたときに「Makefile<1>」「Makefile<2>」とか表示されて,どっちがどっちだかわからなくなるのを緩和する.<> の中に1階層上のディレクトリ名が表示されるので,(ディレクトリの掘り方にもよるが) だいぶわかりやすくなる.

;; sdic

英辞郎をインストールして sdic で使ってます.辞書ファイルの変換の話とかはまたそのうち気が向いたら.

で,sdic-eiwa-dictionary-list とか sdic-waei-dictionary-list を設定するところでディレクトリ名を何度も繰り返し書いているのがダサい,というかパス名が Windows 依存なので嫌なのだが,これを避けようと思うと意外と面倒くさい.のでダサいまま放置.

;; shell

特筆事項なし.あまり Emacs 内でシェルを起動することはないので,まあ念のため書いてあるだけ.実際このまま M-x shell で起動するとプロンプトのエスケープシーケンスが化けまくってひどいことになるのだが,気にしてない.

;; dev env

C/C++ での開発は最近はもっぱら Visual Studio を使っているので,Emacs の出番はないかと思いきや,しっかり Visual Studio から外部エディタとして登録して使っています.

「標準のエディタにも Emacs-like なキーバインド用意されてますよ?」 うん,知ってますけど,その like というやつが曲者で,ほとんど同じという認識で使っていたら微妙なところで挙動が違ったりして却ってストレスがたまります.(xyzzy もそれが理由で使うのやめた)

「でも,IntelliSense とか超便利ですよ?」 うん,それもわかりますが,それでも Emacs じゃなきゃ体が動かないのでどうしようもないのです.年を取るというのはそういうことだ.

まあそれでも etags とかを駆使すればそれなりにシンボル名補完とか定義検索とかはできるので,そういう設定が書いてある.

(global-set-key "\C-c\C-i" 'complete-symbol)
(global-set-key "\C-cc" 'compile)
(setq compile-command "make ")

…のはいいのだが,じゃあこの make ってのは何なのか? というと,ソースコードと一緒に怪しい Makefile を用意して,make を実行することで Visual Studio のウィンドウでビルドが実行されて,さらにその出力メッセージが Emacs のバッファに出力されるみたいな頭のおかしい 小細工を (たまに) しているので,そのための設定です.そんなものに需要はないと思うので詳しくは書きませんが,万一興味がある人がいれば,まあそのうち.

(そこまでするなら nmake 使えよ,って話なのですが,そうしてしまうと研究室のメンバと本格的に話が通じなくなるので)

;; sig

sig.el なるファイルを load していて,何だそれ? って話なのですが,15 年くらい前に自分で書いた,メールのシグネチャを対話的に切り替えて挿入するコードです.人様にお見せできるコードではありません….似たような機能のパッケージはいろいろとあると思うので,スルーしてください.

;; mhc

スケジュール管理は,ここ10年くらいずっと MHC を使っています.というか,その前は紙の手帳だったので,ソフトウェアとしては MHC しか使ったことがない.細かい設定は別ファイル .mhc.el に分かれていて,これも詳しくはまたそのうち.

;; comment

comment-region が C-c > に,uncomment-region が C-c < にバインドされているのは,YaTeX を使ってた頃の名残り.

;; time

M-& で「Tue Feb 14, 2012」みたいな文字列を,C-u M-& で「2012-02-14」みたいな文字列を挿入.地味に多用している.

;; latex

上にも書いた通り,以前は YaTeX を愛用していましたが,最近はもう syntax hilight さえしてくれれば後は何でもよくなったというか,あまりお節介を焼いてくれないものの方が好みになりました.latex-mode も verbatim とか super/subscript でフォントを変えられるのは嫌いなので,その手の機能は切っている.

(add-hook 'latex-mode-hook 
          '(lambda () 
             (setq tex-verbatim-face nil) 
             (defun tex-font-lock-suscript () nil)))
関連記事:
[2010-01-22-1] UNIX使いだった俺がWindowsに移行してみるよ
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Andrey.volfu] узнайте цену качественной отделки коттед... (2019-02-27 16:51:16)

* [AleksandrKex] Вечером серфил материалы сети интернет, ... (2019-02-27 06:12:41)

* [Filippnom] Прошлым вечером мониторил данные инет, н... (2019-02-27 05:28:28)

* [TihonBiP] [url=https... (2019-02-27 02:12:55)

* [Timofeycaupe] Минут десять серфил данные сети интернет... (2019-02-26 01:28:57)

* ...

2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
2000 : 01 02 03 04 05 06 07 08 09 10 11 12
1999 : 01 02 03 04 05 06 07 08 09 10 11 12
1998 : 01 02 03 04 05 06 07 08 09 10 11 12
1997 : 01 02 03 04 05 06 07 08 09 10 11 12
1996 : 01 02 03 04 05 06 07 08 09 10 11 12

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


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