2005-11-01

LaTeX の日本語コマンドで改行をさせない (AUCTeX 11.81)

AUCTeX の fill (改行) 回りで、またバグがあったので修正パッチ。対象は AUCTeX 11.81。

症状

日本語 TeX では、次のようにして日本語のコマンドを作ることができる。

\newcommand{\ほげぼげ}{日本語のコマンド}

本来、 \ほげぼげ は一つのコマンドなので、途中で改行を入れてはいけない。 例えば、次のソースは

\ほげ
ぼげ

\ほげというコマンドと、 ぼげという単なるテキストとして解釈される。

そのため、自動改行するエディターは、改行位置の日本語がコマンドでないことを確認しないといけなのだけど、 AUCTeX 11.81 の M-q (fill-paragraph) は何も考えずにコマンドを分割してしまう。思わぬコンパイル・エラーを引き起こす原因になるので、日本語コマンドを書く (もしくはそういうソースをもらう) 可能性のある人は下のパッチをどうぞ。

Patch

AUCTeX 11.81 に対するパッチ。

*** latex.el 11 10 2005 12:01:34 +0900 5.386
--- latex.el 11 10 2005 15:16:33 +0900 
***************
*** 2760,2765 ****
--- 2760,2774 ----
      (if (looking-at "..\\c>")
   (forward-char 1)
        (forward-char 2)))
+   ;; Cater for Japanese Macro
+   (when (and (boundp 'japanese-TeX-mode) japanese-TeX-mode
+       (aref (char-category-set (char-after)) ?j)
+       (TeX-looking-at-backward (concat (regexp-quote TeX-esc) "\\(?:[a-zA-Z]\\|\\cj\\)+")
+           (1- (- (point) (line-beginning-position))))
+       (save-excursion
+         (goto-char (match-beginning 0))
+         (zerop (logand 1 (skip-chars-backward "\\\\")))))
+       (goto-char (match-beginning 0)))
    ;; Cater for \verb|...| (and similar) contructs which should not be
    ;; broken. (FIXME: Make it work with shortvrb.sty (also loaded by
    ;; doc.sty) where |...| is allowed.  Arbitrary delimiters may be

なお、この修正は 2005-10-31 に AUCTeX CVS にコミットされている。

No comments:

Post a Comment