AUCTeX 11.82 以前に含まれる preview-latex で、プレビューとして表示される画像の位置がズレることがあるとの報告を頂いた (ありがとう Ikumi さん)。パッチも送って下さったのでこの場を借りて紹介する。
原因
LaTeX ファイルを JIS で保存していると困ることになる。というのも preview-latex は「platex コマンドのメッセージの文字コードはファイルの文字コードと同じ」と仮定しているため。
例えば、Windows の場合。platex コマンドは JIS と Shift_JIS の両方を扱うことができる (自動判別)。platex コマンドは処理をしながらこんなことをやりました
とメッセージを Shift_JIS で表示する。preview-latex はそのメッセージをファイルの文字コードと同じだと思って解析する。ここで、ファイルの文字コードが JIS だと、出力 (platex のメッセージ) と入力 (preview-latex の期待) で齟齬が産まれる。結果、正しい画像位置を決められなくなるというわけ。
UNIX の場合は Shift_JIS を EUC と読み換えて下さいな。
どうすればいいかというと、preview-latex に platex の出力メッセージの文字コードを教えてあげればいい。Ikumi 氏のパッチは、それをする。
Patch for AUCTeX 11.82
--- preview/preview.el-11.82 Sun Sep 25 04:15:55 2005 +++ preview/preview.el Sun Jan 22 23:49:03 2006 @@ -2583,7 +2583,10 @@ string (substring string (match-end 0)))) (setq output (concat output (regexp-quote string))) (if (featurep 'mule) - (decode-coding-string output buffer-file-coding-system) + (decode-coding-string output + (or (and (boundp 'TeX-japanese-process-output-coding-system) + TeX-japanese-process-output-coding-system) + buffer-file-coding-system)) output))) (defun preview-parse-messages (open-closure) @@ -3424,8 +3427,10 @@ (setq TeX-sentinel-function 'preview-TeX-inline-sentinel) (when (featurep 'mule) (setq preview-coding-system - (with-current-buffer commandbuff - buffer-file-coding-system)) + (or (and (boundp 'TeX-japanese-process-output-coding-system) + TeX-japanese-process-output-coding-system) + (with-current-buffer commandbuff + buffer-file-coding-system))) (when preview-coding-system (setq preview-coding-system (preview-buffer-recode-system
emathPh の問題
emath のグラフ描画パッケージ (emathPh) を使うと preview-latex が
LaTeX: LaTeX found no preview images
とのたまうとの報告がある。
ぼくは emath を使ってないので検証してない。何か情報があればコメントなりメールなりを下さいませ。
蛇足
何故ファイルを JIS で保存するのか。Ikumi 氏曰く、UNIX と Windows で文字コード変換をする手間を省くためだといふ。
もし、ファイルを UNIX に合わせて EUC で保存すると、Windows の TeX 処理の前に文字コードを Shift_JIS に変換する必要がある。逆もまたしかり。でも、ファイルを JIS で保存しておけば、どちらのプラットフォームでも問題なくコンパイルが通る。
なるほどなぁ、と思った。
No comments:
Post a Comment