;;; tex-jp.el --- Support for Japanese TeX. -*- coding: iso-2022-jp-unix; -*-
-;; Copyright (C) 2002-2007, 2012 Free Software Foundation, Inc.
-;; Copyright (C) 1999, 2001 Hidenobu Nabetani <nabe@debian.or.jp>
+;; Copyright (C) 1999, 2001-2008, 2012-2013, 2016-2017
+;; Free Software Foundation, Inc.
-;; Author: KOBAYASHI Shinji <koba@flab.fujitsu.co.jp>
+;; Author: KOBAYASHI Shinji <koba@flab.fujitsu.co.jp>,
+;; Hidenobu Nabetani <nabe@debian.or.jp>
;; Maintainer: Masayuki Ataka <masayuki.ataka@gmail.com>
+;; Ikumi Keita <ikumikeita@jcom.home.ne.jp>
;; Keywords: tex
;; This file is part of AUCTeX.
;;; Code:
(require 'latex)
+(require 'tex-buf)
(eval-when-compile
(autoload 'TeX-plain-tex-mode "plain-tex" nil t))
(const :tag "jTeX" jtex)
(const :tag "upTeX" uptex)))
+(defcustom japanese-TeX-use-kanji-opt-flag (not (eq system-type 'windows-nt))
+ "Add kanji option to Japanese pTeX family if non-nil.
+If `TeX-japanese-process-input-coding-system' or
+`TeX-japanese-process-output-coding-system' are non-nil, the process coding
+systems are determined by their values regardless of the kanji option."
+ :group 'AUCTeX-jp
+ :type 'boolean)
+
(setq TeX-engine-alist-builtin
(append TeX-engine-alist-builtin
'((ptex "pTeX" "ptex %(kanjiopt)" "platex %(kanjiopt)" "eptex")
(const :tag "AmSTeX" ams-tex-mode)))
(repeat :tag "Menu elements" :inline t sexp))))
+;; customize option \e$B$N=i4|CM$d\e(B saved value \e$B$=$N$b$N$r2~JQ$7$J$$$h$&$K\e(B
+;; \e$B$9$k$?$a!"\e(Bsetcar \e$B$N;HMQ$OHr$1$k!#\e(B
+(setq TeX-command-list
+ ;; `TeX-command-list' \e$B$HF1$89=B$$N?7$7$$\e(B list \e$B$r:n$k!#\e(B
+ ;; \e$B3FMWAG$N\e(B list \e$B$r\e(B l \e$B$H$7$F!"\e(Bl \e$B$=$N$b$N$r;H$C$?$j!"\e(Bl \e$B$r\e(B
+ ;; \e$B<c43=$@5$7$?\e(B list \e$B$r:n$C$?$j$7$F\e(B `mapcar' \e$B$G=8$a$k!#\e(B
+ (mapcar
+ (lambda (l)
+ (cond
+ ;; l \e$B$NBh\e(B1\e$BMWAG$,\e(B "BibTeX" \e$B$d\e(B "Index" \e$B$@$C$?$i!"\e(Bl \e$B$NBh\e(B2\e$BMWAG\e(B
+ ;; \e$B$@$1$rF~$lBX$($?JL$N\e(B list \e$B$r:n$k!#\e(B
+ ((equal (car l) "BibTeX")
+ (append (list (car l) "%(bibtex) %s") (cddr l)))
+ ((equal (car l) "Index")
+ (append (list (car l) "%(makeindex) %s") (cddr l)))
+ ;; \e$B$=$l0J30$N>l9g$O\e(B l \e$B$=$N$b$N$r;H$&!#\e(B
+ (t
+ l)))
+ TeX-command-list))
+
;; \e$B=gD4$K9T$1$PITMW$K$J$k!#\e(B
(setq TeX-command-list
(append japanese-TeX-command-list
'(("-" "" ignore nil t)) ;; separator for command menu
TeX-command-list))
-;; \e$B;CDj=hCV!#\e(Btex.el \e$B$K<h$j9~$s$G$b$i$($k$H$h$$!#\e(B
-(setcar (cdr (assoc "BibTeX" TeX-command-list)) "%(bibtex) %s")
-(setcar (cdr (assoc "Index" TeX-command-list)) "%(makeindex) %s")
+;; Define before first use.
+(defvar japanese-TeX-mode nil
+ "Non-nil means the current buffer handles Japanese TeX/LaTeX.")
+(make-variable-buffer-local 'japanese-TeX-mode)
+(put 'japanese-TeX-mode 'permanent-local t)
-;; \e$B;CDj=hCV!#\e(Btex.el \e$B$K<h$j9~$s$G$b$i$($k$H$h$$!#\e(B
-(setq TeX-expand-list
+(setq TeX-expand-list-builtin
(append
- TeX-expand-list
+ TeX-expand-list-builtin
'(
;; -kanji \e$B%*%W%7%g%s$NJ8;zNs$r:n$k!#\e(B
("%(kanjiopt)" (lambda ()
((eq TeX-engine 'jtex) "jbibtex")
((eq TeX-engine 'uptex) "upbibtex")
(t "bibtex"))))
- ;; mendex \e$B$H\e(B makeindex \e$B$NE,@Z$JJ}$rA*Br$9$k!#\e(B
+ ;; mendex, upmendex, makeindex \e$B$N$&$AE,@Z$J$b$N$rA*Br$9$k!#\e(B
("%(makeindex)" (lambda ()
- (if (memq TeX-engine '(ptex uptex))
- "mendex %(mendexkopt)" "makeindex")))
+ (cond
+ ;; upmendex \e$B$O\e(B XeLaTeX \e$B$d\e(B LuaLaTeX \e$B$G$b\e(B
+ ;; \e$B;H$($k!#\e(Bsee
+ ;; http://www.t-lab.opal.ne.jp/tex/README_upmendex.md
+ ;; FIXME: XeLaTeX \e$B$d\e(B LuaLaTeX \e$B$@$1$r;H$&\e(B
+ ;; \e$BMxMQ<T$N>l9g$O!"\e(Btex-jp \e$B$O\e(B load \e$B$5$l$J\e(B
+ ;; \e$B$$$N$G$3$N@_Dj$O0UL#$,$J$$!#\e(B
+ ((and (memq TeX-engine '(uptex xetex luatex))
+ (executable-find "upmendex"))
+ "upmendex %(dic)")
+ ((memq TeX-engine '(ptex uptex))
+ "mendex %(mendexkopt) %(dic)")
+ (t "makeindex"))))
;; mendex \e$BMQF|K\8l%3!<%I%*%W%7%g%s!#\e(B
("%(mendexkopt)" (lambda ()
(if (and (featurep 'mule)
(if str (format " -%c " (upcase (aref str 0)))
""))
"")))
+ ;; (up)mendex \e$BMQ<-=q;XDj%*%W%7%g%s!#\e(B
+ ("%(dic)" (lambda ()
+ ;; master \e$B$HF1L>$G3HD%;R$,\e(B .dic \e$B$N%U%!%$%k$,$"$l$P\e(B
+ ;; \e$B$=$l$r<-=qL>$H$7$F\e(B -d \e$B%*%W%7%g%s$KM?$($k!#\e(B
+ ;; C-c C-r \e$BEy$N>l9g\e(B _region_.dic \e$B$K$9$Y$-$G$O\e(B
+ ;; \e$B$J$$$N$G!"\e(B`TeX-master-file' \e$B$rM[$K8F$V!#\e(B
+ (let ((dicname (TeX-master-file "dic" t)))
+ (if (file-exists-p
+ (expand-file-name dicname (TeX-master-directory)))
+ (let ((result (format "-d %s" dicname)))
+ ;; Advance past the file name in order to
+ ;; prevent expanding any substring of it.
+ (setq pos (+ pos (length result)))
+ result)
+ ""))))
;; pxdvi \e$B$H\e(B %(o?)xdvi \e$B$NE,@Z$JJ}$rA*Br$9$k!#\e(B
("%(xdvi)" (lambda ()
;; pxdvi \e$B$O\e(B ptex, jtex \e$B6&MQ$J$N$G!"\e(B
;;; Viewing (new implementation)
-(unless (get 'TeX-view-predicate-list 'saved-value)
- (setq TeX-view-predicate-list
+(setq TeX-view-predicate-list-builtin
+ (append
'((paper-a4
- (TeX-match-style
- "\\`\\(a4j\\|a4paper\\|a4dutch\\|a4wide\\|sem-a4\\)\\'"))
+ (let ((regex "\\`\\(?:a4j\\|a4paper\\|a4dutch\\|a4wide\\|sem-a4\\)\\'"))
+ (or (TeX-match-style regex)
+ (and (fboundp 'LaTeX-match-class-option)
+ (LaTeX-match-class-option regex)))))
(paper-a5
- (TeX-match-style
- "\\`\\(a5j\\|a5paper\\|a5comb\\)\\'"))
+ (let ((regex "\\`\\(?:a5j\\|a5paper\\|a5comb\\)\\'"))
+ (or (TeX-match-style regex)
+ (and (fboundp 'LaTeX-match-class-option)
+ (LaTeX-match-class-option regex)))))
;; jarticle \e$B$J$I$@$H\e(B b4paper, b5paper \e$B$O\e(B JIS B \e$B7ONs!#\e(B
;; j-article \e$B$J$I$NJ}$K$O\e(B a4j, b5j \e$B$H$$$C$?%*%W%7%g%s$O$J$$!#\e(B
(paper-b5 ; ISO B5
- (and (TeX-match-style "\\`b5paper\\'")
- (not (memq TeX-engine '(ptex uptex)))))
+ (and (fboundp 'LaTeX-match-class-option)
+ (LaTeX-match-class-option "\\`b5paper\\'")
+ (not (TeX-match-style "\\`u?[jt]s?\\(?:article\\|report\\|book\\)\\'"))))
(paper-b5jis ; JIS B5
- (or (TeX-match-style "\\`b5j\\'")
- (and (TeX-match-style "\\`b5paper\\'")
- (memq TeX-engine '(ptex uptex)))))
+ (and (fboundp 'LaTeX-match-class-option)
+ (or (LaTeX-match-class-option "\\`b5j\\'")
+ (and (LaTeX-match-class-option "\\`b5paper\\'")
+ (TeX-match-style "\\`u?[jt]s?\\(?:article\\|report\\|book\\)\\'")))))
;; article \e$B$J$I$K$O\e(B b4paper \e$B$H$$$&%*%W%7%g%s$O$J$$!#\e(B
;; b4paper \e$B$H$$$&%*%W%7%g%s$,$"$C$?$i\e(B JIS B4 \e$B$H8+$J$9!#\e(B
(paper-b4jis
- (TeX-match-style "\\`\\(b4j\\|b4paper\\)\\'")))))
-;; jsarticle \e$B$@$HB>$K$b$b$C$HH=7?$N%*%W%7%g%s$,$"$k$,!"\e(B
-;; \e$BA4ItLLE]8+$F$k$H%-%j$,$J$$$N$G!"$3$l$/$i$$$G$$$$$@$m$&!#\e(B
-;; jsarticle.el \e$B$d\e(B jsbook.el \e$B$GDI2CJ,$N=hM}$r;E9~$a$P$$$$$N$+$bCN$l$J$$!#\e(B
-
-;; \e$B;CDj=hCV!#\e(Btex.el \e$B$K<h$j9~$s$G$b$i$($k$H$h$$!#\e(B
-(unless (get 'TeX-view-program-list 'saved-value)
- (setq TeX-view-program-list
- (cond
- ;; http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?AUCTeX
- ;; \e$B$r;29M$K$7$F$_$?!#\e(B
- ((eq system-type 'windows-nt)
- '(("Dviout" ("dviout -1 "
- ((paper-a4 paper-portrait) " -y=A4 ")
- ((paper-a4 paper-landscape) " -y=A4L ")
- ((paper-a5 paper-portrait) " -y=A5 ")
- ((paper-a5 paper-landscape) " -y=A5L ")
- ((paper-b5 paper-portrait) " -y=E5 ")
- ((paper-b5 paper-landscape) " -y=E5L ")
- ((paper-b4jis paper-portrait) " -y=B4 ")
- ((paper-b4jis paper-landscape) " -y=B4L ")
- ((paper-b5jis paper-portrait) " -y=B5 ")
- ((paper-b5jis paper-landscape) " -y=B5L ")
- (paper-legal " -y=Legal ")
- (paper-letter " -y=Letter ")
- (paper-executive " -y=Exective ")
- "%o" (mode-io-correlate " \"# %n '%b'\"")))
- ("TeXworks" "TeXworks %o")
- ("SumatraPDF" "SumatraPDF -reuse-instance %o"
- (mode-io-correlate " -forward-search \"%b\" %n"))
- ("MuPDF" "mupdf %o")))
- ;; \e$B$3$l$G$$$$$N$+$I$&$+$OIT0B!#\e(B
- ((eq system-type 'darwin)
- '(("Preview" "open -a Preview.app %o")
- ("TeXShop" "open -a TeXShop.app %o")
- ("TeXworks" "open -a TeXworks.app %o")
- ("Skim" "open -a Skim.app %o")
- ("displayline" "displayline %n %o %b")
- ("PictPrinter" "open -a PictPrinter.app %d")
- ("Mxdvi" "open -a Mxdvi.app %d")
- ("open" "open %o")))
- (t
- (setcar (cadr (assoc "xdvi" TeX-view-program-list-builtin))
- "%(xdvi) -unique")
- '(("TeXworks" "texworks %o")
- ("zathura" "zathura %o")
- ("MuPDF" "mupdf %o"))))))
+ (and (fboundp 'LaTeX-match-class-option)
+ (LaTeX-match-class-option "\\`\\(?:b4j\\|b4paper\\)\\'"))))
+ ;; jsclasses \e$B$@$HB>$K$b$b$C$HH=7?$N%*%W%7%g%s$,$"$k$,!"A4ItLLE]\e(B
+ ;; \e$B8+$F$k$H%-%j$,$J$$$N$G!"$3$l$/$i$$$G$$$$$@$m$&!#\e(B
+ ;; jsarticle.el \e$B$d\e(B jsbook.el \e$B$GDI2CJ,$N=hM}$r;E9~$a$P$$$$$N$+$bCN$l$J$$!#\e(B
+ TeX-view-predicate-list-builtin))
+
+(unless (memq system-type '(windows-nt darwin))
+ (let ((l (assoc "xdvi" TeX-view-program-list-builtin)))
+ (when l
+ (setcar (cadr l) "%(xdvi) -unique")
+ (setcdr (cdr l) '("%(xdvi)"))))
+ (setq TeX-view-program-list-builtin
+ (append TeX-view-program-list-builtin
+ '(("MuPDF" "mupdf %o" "mupdf")))))
;; \e$B$3$l$O\e(B tex.el \e$B$K<h$jF~$l$F$b$i$&$N$OFq$7$$$+!)\e(B
;; tex-jp.el \e$B$,FI$_9~$^$l$k$@$1$G!"\e(Bdvi viewer \e$B$N%G%U%)%k%H$,\e(B dviout \e$B$K\e(B
;; \e$B$J$C$F$7$^$&$N$ODq93$,Bg$-$$$+$b!#\e(B
(unless (get 'TeX-view-program-selection 'saved-value)
- (setq TeX-view-program-selection
- (append
- (cond
- ((eq system-type 'windows-nt)
- '((output-dvi "Dviout")
- (output-pdf "TeXworks")))
- ((eq system-type 'darwin)
- '((output-pdf "Preview")))
- (t
- nil))
- TeX-view-program-selection)))
+ (if (eq system-type 'windows-nt)
+ (setq TeX-view-program-selection
+ (append
+ '((output-dvi "dviout"))
+ TeX-view-program-selection))))
(mapc (lambda (dir) (add-to-list 'TeX-macro-global dir t))
(or (TeX-tree-expand
"jlatex" '("/jtex/" "/jbibtex/bst/"))
'("/usr/share/texmf/jtex/" "/usr/share/texmf/jbibtex/bst/")))
-;; \e$B=gD4$K9T$1$PITMW$K$J$k!#\e(B
-(setq LaTeX-command-style
- (append '(("\\`u[jt]\\(article\\|report\\|book\\)\\'\\|\\`uplatex\\'"
- "%(PDF)uplatex %(kanjiopt)%S%(PDFout)")
- ("\\`[jt]s?\\(article\\|report\\|book\\)\\'"
- "%(PDF)platex %(kanjiopt)%S%(PDFout)")
- ("\\`j-\\(article\\|report\\|book\\)\\'"
- "%(PDF)jlatex %(kanjiopt)%S%(PDFout)"))
- LaTeX-command-style))
-
(defcustom japanese-TeX-error-messages t
"*If non-nil, explain TeX error messages in Japanese."
:group 'AUCTeX-jp
:type 'boolean)
-(when (featurep 'mule)
-
-;; FIX-ME (2007-02-09) The default coding system in recent Unix (like Fedora and
-;; Ubuntu) is utf-8. But Japanese TeX system does not support utf-8 yet
-;; (platex-utf is under development, may be alpha phase). So,
-;; process-coding-system for Japanese TeX is not defined from
-;; default-coding-system. When platex-utf is out, we should look this setting,
-;; again.
-
-(defcustom TeX-japanese-process-input-coding-system
- (cond ((memq system-type '(windows-nt ms-dos cygwin)) 'shift_jis-dos)
- ((memq system-type '(mac darwin)) 'shift_jis-mac)
- (t 'euc-jp-unix))
- "TeX-process' coding system with standard input."
+(defcustom TeX-japanese-process-input-coding-system nil
+ "If non-nil, used for encoding input to Japanese TeX process.
+When nil, AUCTeX tries to choose suitable coding system.
+See also a user custom option `TeX-japanese-process-output-coding-system'."
:group 'AUCTeX-jp
- :type 'coding-system)
+ :type '(choice (const :tag "Default" nil) coding-system))
-(defcustom TeX-japanese-process-output-coding-system
- (cond ((memq system-type '(windows-nt ms-dos cygwin)) 'shift_jis-dos)
- ((memq system-type '(mac darwin)) 'shift_jis-mac)
- (t 'euc-jp-unix))
- "TeX-process' coding system with standard output."
+(defcustom TeX-japanese-process-output-coding-system nil
+ "If non-nil, used for decoding output from Japanese TeX process.
+When nil, AUCTeX tries to choose suitable coding system.
+See also a user custom option `TeX-japanese-process-input-coding-system'."
:group 'AUCTeX-jp
- :type 'coding-system)
-
-)
+ :type '(choice (const :tag "Default" nil) coding-system))
;; \e$B=gD4$K9T$1$PITMW$K$J$k!#\e(B
(defcustom japanese-TeX-command-default "pTeX"
("treport")
("tbook")
("jsarticle")
- ("jsbook"))
- "*List of Japanese document styles."
+ ("jsbook")
+ ;; for upLaTeX
+ ("ujarticle") ("ujreport") ("ujbook")
+ ("utarticle") ("utreport") ("utbook"))
+ "*List of Japanese document classes."
:group 'AUCTeX-jp
:type '(repeat (group (string :format "%v"))))
(setq LaTeX-style-list
(append japanese-LaTeX-style-list LaTeX-style-list))
-;;; Coding system
-(eval-and-compile
+;; text\e$B!A7O$NL@D+BN!&%4%7%C%/BN;XDj%3%^%s%I$O\e(B jLaTeX \e$B$K$O$J$$$h$&$G!"\e(B
+;; (u)pLaTeX \e$B$G$7$+;H$($J$$$,!"LdBj$K$J$k$3$H$O$J$$$@$m$&!#\e(B
+(setq LaTeX-font-list
+ (append '((?m "\\textmc{" "}" "\\mathmc{" "}")
+ (?g "\\textgt{" "}" "\\mathgt{" "}"))
+ LaTeX-font-list))
-(when (featurep 'mule)
+;;; Coding system
(defun japanese-TeX-set-process-coding-system (process)
"Set proper coding system for japanese TeX PROCESS."
- (if (with-current-buffer TeX-command-buffer japanese-TeX-mode)
- (set-process-coding-system process
- TeX-japanese-process-output-coding-system
- TeX-japanese-process-input-coding-system)))
-(setq TeX-after-start-process-function
- 'japanese-TeX-set-process-coding-system)
-
-(defcustom japanese-TeX-use-kanji-opt-flag t
- "Add kanji option to Japanese pTeX family if non-nil."
- :group 'AUCTeX-jp
- :type 'boolean)
+ (with-current-buffer TeX-command-buffer
+ (when japanese-TeX-mode
+ ;; TeX-engine \e$B$,\e(B ptex, jtex, uptex \e$B$N$$$:$l$+$G$"$k>l9g$N$_9M$(\e(B
+ ;; \e$B$k!#\e(Bluatex-ja \e$B$J$I$N>l9g$O$=$b$=$b$?$@$N\e(B latex-mode \e$B$G$h$/!"\e(B
+ ;; \e$B$o$6$o$6\e(B japanese-latex-mode \e$B$K$9$kI,MW$,$J$$!#\e(B
+
+ ;; FIXME: \e$B0J2<$N=hM}$O\e(B tex engine \e$B$rBP>]$H$9$k>l9g$7$+9M$($F$$$J$$!#\e(B
+ ;; bibtex \e$B$d\e(B mendex \e$BEy$NJd=u%D!<%k$N>l9g$O@5$7$/$J$$=hM}$+$b$7$l$J$$!#\e(B
+ (let*
+ ;; -kanji \e$B%*%W%7%g%s$"$j$N;~$NJ8;z%3!<%I!#\e(B
+ ((kanji (and japanese-TeX-use-kanji-opt-flag
+ (let ((str (japanese-TeX-get-encoding-string)))
+ (cond
+ ((equal str "euc") 'euc-jp)
+ ((equal str "jis") 'iso-2022-jp)
+ ((equal str "sjis") 'shift_jis)
+ ((equal str "utf8") 'utf-8)))))
+
+ ;; process \e$B$+$i$N=PNO$NJ8;z%3!<%I!#\e(B
+ (dec (cond
+ ;; windows \e$B$H\e(B mac \e$B$N>l9g!#\e(B
+ ((memq system-type '(windows-nt darwin))
+ (cond
+ ;; ptex \e$B$J$i\e(B mac \e$B$O\e(B utf-8\e$B!#\e(B
+ ;; windows \e$B$G\e(B -kanji \e$B%*%W%7%g%s$"$j$N;~$O$=$NJ8;z%3!<%I!"\e(B
+ ;; \e$B$J$7$N;~$O\e(B sjis\e$B!#\e(B
+ ((eq TeX-engine 'ptex)
+ (cond ((eq system-type 'darwin)
+ 'utf-8)
+ ((and japanese-TeX-use-kanji-opt-flag kanji)
+ kanji)
+ (t 'shift_jis)))
+ ;; jtex \e$B$J$i\e(B sjis \e$B$K8GDj$9$k!#\e(B
+ ((eq TeX-engine 'jtex)
+ 'shift_jis)
+ ;; uptex \e$B$J$i\e(B utf-8 \e$B$K8GDj$9$k!#\e(B
+ (t
+ 'utf-8)))
+ ;; unix \e$B$N>l9g!#\e(B
+ (t
+ ;; jtex \e$B$J$i\e(B euc \e$B$K8GDj$9$k!#\e(B
+ (cond
+ ((eq TeX-engine 'jtex)
+ 'euc-jp)
+ ;; \e$B$=$l0J30$O!"\e(Buptex \e$B$G$b\e(B locale \e$B$K=>$&!#\e(B
+ ;; \e$B$?$@$7!"\e(Blocale \e$B$,F|K\8l$r%5%]!<%H$7$J$$>l9g$O\e(B
+ ;; euc \e$B$K8GDj$9$k!#\e(B
+ (t
+ (let ((lcs
+ (cond
+ ((boundp 'locale-coding-system)
+ locale-coding-system)
+ ;; XEmacs doesn't have `locale-coding-system'.
+ ;; Instead xemacs 21.5 has
+ ;; `get-coding-system-from-locale' and
+ ;; `current-locale'. They aren't available on
+ ;; xemacs 21.4.
+ ((and
+ (featurep 'xemacs)
+ (fboundp 'get-coding-system-from-locale))
+ (get-coding-system-from-locale
+ (if (fboundp 'current-locale)
+ (current-locale)
+ ;; I don't know XEmacs well, so incorporate
+ ;; the suggestion of
+ ;; http://lists.gnu.org/archive/html/auctex-devel/2017-02/msg00079.html
+ ;; as well.
+ (or (getenv "LC_ALL")
+ (getenv "LC_CTYPE")
+ (getenv "LANG")
+ "")))))))
+ (if (and lcs (japanese-TeX-coding-ejsu lcs))
+ lcs 'euc-jp)))))))
+
+ ;; process \e$B$KM?$($kF~NO$NJ8;z%3!<%I!#\e(B
+ (enc (cond
+ ;; ptex \e$B$G\e(B -kanji \e$B%*%W%7%g%s$"$j$J$i!"$=$NJ8;z%3!<%I!#\e(B
+ ;; \e$B$J$7$J$i\e(B utf-8 \e$B$+\e(B sjis\e$B!#\e(B
+ ((eq TeX-engine 'ptex)
+ (if (and japanese-TeX-use-kanji-opt-flag kanji)
+ kanji
+ (if (eq system-type 'windows-nt)
+ 'shift_jis 'utf-8)))
+ ;; jtex \e$B$J$i\e(B euc \e$B$+\e(B sjis \e$B$K8GDj$9$k!#\e(B
+ ((eq TeX-engine 'jtex)
+ (if (memq system-type '(windows-nt darwin))
+ 'shift_jis 'euc-jp))
+ ;; uptex \e$B$J$i\e(B utf-8 \e$B$K8GDj$9$k!#\e(B
+ (t
+ 'utf-8))))
+
+ ;; \e$B2~9T%3!<%I$r;XDj!#\e(B
+ (setq dec (coding-system-change-eol-conversion
+ dec
+ (if (eq system-type 'windows-nt) 'dos 'unix))
+ enc (coding-system-change-eol-conversion
+ enc
+ (if (eq system-type 'windows-nt) 'dos 'unix)))
+
+ ;; Customize \e$BCM$,$"$l$P$=$l$rM%@h!#\e(B
+ (set-process-coding-system
+ process
+ (or TeX-japanese-process-output-coding-system dec)
+ (or TeX-japanese-process-input-coding-system enc))))))
-;;;###autoload
(defun japanese-TeX-coding-ejsu (coding-system)
"Convert japanese CODING-SYSTEM to mnemonic string.
euc-jp: \"euc\"
utf-8: \"utf8\"
Return nil otherwise."
(let ((base (coding-system-base coding-system)))
+ (if (featurep 'xemacs)
+ (setq base (coding-system-name base)))
(cdr (assq base
'((japanese-iso-8bit . "euc")
+ (euc-jp . "euc") ; for xemacs
(iso-2022-jp . "jis")
(japanese-shift-jis . "sjis")
+ (shift_jis . "sjis") ; for xemacs
(utf-8 . "utf8")
+ (mule-utf-8 . "utf8") ; for emacs 21, 22
+ ;; utf-8-auto \e$B$d\e(B utf-8-emacs \e$B$rF~$l$kI,MW$O$"$k$N$+!)\e(B
- ;; xemacs \e$B$@$H0J2<$NL>A0$O0c$&$+$b!D!#\e(B
+ ;; xemacs 21.5 with mule \e$B$K$O!"\e(Bjisx0213 \e$B$N\e(B charset \e$B$O\e(B
+ ;; \e$B$"$k$,$=$lMQ$N\e(B coding system \e$B$O$J$$!#\e(B
(euc-jis-2004 . "euc")
(iso-2022-jp-2004 . "jis")
(japanese-shift-jis-2004 . "sjis")
(japanese-cp932 . "sjis")
- (eucjp-ms . "euc"))))))
+ (eucjp-ms . "euc")
+ (windows-932 . "sjis") ; for xemacs 21.5 with mule
+ )))))
(defun japanese-TeX-get-encoding-string ()
"Return coding option string for Japanese pTeX family.
(japanese-TeX-coding-ejsu
(default-value 'buffer-file-coding-system))))
-))
-
;;; Japanese TeX modes
-(defvar japanese-TeX-mode nil
- "Non-nil means the current buffer handles Japanese TeX/LaTeX.")
-(make-variable-buffer-local 'japanese-TeX-mode)
-(put 'japanese-TeX-mode 'permanent-local t)
-
;;;###autoload
(defun japanese-plain-tex-mode ()
"Major mode in AUCTeX for editing Japanese plain TeX files.
(defun japanese-plain-tex-mode-initialization ()
"Japanese plain-TeX specific initializations."
(when japanese-TeX-mode
-; (setq TeX-command-default japanese-TeX-command-default)
- (TeX-engine-set japanese-TeX-engine-default)))
+ (TeX-engine-set japanese-TeX-engine-default)
+
+ ;; For the intent of the following lines, see the comments below
+ ;; in `japanese-latex-mode-initialization'.
+ (when enable-local-variables
+ (setq major-mode 'japanese-plain-tex-mode)
+ (add-hook 'hack-local-variables-hook #'japanese-TeX-reset-mode-name
+ nil t))))
-(add-hook 'plain-TeX-mode-hook 'japanese-plain-tex-mode-initialization)
+(add-hook 'plain-TeX-mode-hook #'japanese-plain-tex-mode-initialization)
;;;###autoload
(defun japanese-latex-mode ()
(defun japanese-latex-mode-initialization ()
"Japanese LaTeX specific initializations."
(when japanese-TeX-mode
-; (setq TeX-command-default japanese-LaTeX-command-default)
+ ;; `TeX-match-style' \e$B$r;H$&$N$O\e(B `TeX-update-style' \e$B$N8e$KCY$i$;$k!#\e(B
+ ;; \e$B$3$NCJ3,$G;H$&$H!"$=$NCf$G8F$V\e(B `TeX-style-list' \e$B$NCf$G\e(B
+ ;; `TeX-update-style' \e$B$,8F$P$l$F$7$^$$!"\e(Blocal variable \e$BEy$N=`Hw$,\e(B
+ ;; \e$B@0$C$F$J$$CJ3,$G\e(B style hook \e$B$,<B9T$5$l$FITE,$J7k2L$K$J$k$3$H$,\e(B
+ ;; \e$B$"$k!#$^$?!"\e(B`TeX-update-style' \e$B$O8e$+$i\e(B `find-file-hook' \e$BCf$G$b\e(B
+ ;; \e$B$&0lEY8F$P$l$k$N$G!"\e(B`TeX-parse-self' \e$B$,\e(B t \e$B$@$H\e(B parse \e$B=hM}$bL5BL\e(B
+ ;; \e$B$K\e(B 2 \e$B2s9T$o$l$F$7$^$&!#\e(B
+ (add-hook 'TeX-update-style-hook
+ #'japanese-LaTeX-guess-engine nil t)
+ (setq LaTeX-default-style japanese-LaTeX-default-style)
+
+ (when (and (fboundp 'font-latex-add-keywords)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ ;; jLaTeX \e$B$K$O$J$$%3%^%s%I$@$,!"$=$l$O$b$&5$$K$7$J$/$F$$$$$@$m$&!#\e(B
+ (font-latex-add-keywords '(("textgt" "{") ("mathgt" "{"))
+ 'bold-command)
+ (font-latex-add-keywords '("gtfamily")
+ 'bold-declaration))
+
+ ;; The value of `major-mode' should be `latex-mode', not
+ ;; `japanese-latex-mode', because the name `latex-mode' is hard
+ ;; coded in several places of AUCTeX like "(eq major-mode
+ ;; 'latex-mode)", "(memq major-mode '(doctex-mode latex-mode)" and
+ ;; so on. By such piece of codes, `japanese-latex-mode' should
+ ;; simply be regarded as `latex-mode'. So we'd like to leave
+ ;; `major-mode' as `latex-mode' here, but doing so confuses
+ ;; `hack-local-variables' in two ways.
+ ;; (1) It is tricked into considering that the major mode is not
+ ;; yet initialized and calls `japanese-latex-mode' again.
+ ;; (2) It does not read the directory local variables prepared for
+ ;; `japanese-latex-mode'.
+ ;; Thus we temporarily set `major-mode' to `japanese-latex-mode'
+ ;; here and plan to reset it to `latex-mode' after
+ ;; `hack-local-variables' is done.
+ (when enable-local-variables
+ (setq major-mode 'japanese-latex-mode)
+ (add-hook 'hack-local-variables-hook #'japanese-TeX-reset-mode-name
+ nil t))))
+
+(add-hook 'LaTeX-mode-hook #'japanese-latex-mode-initialization)
+
+;; This function is useful only within `hack-local-variables-hook'.
+(defun japanese-TeX-reset-mode-name ()
+ (cond ((eq major-mode 'japanese-latex-mode)
+ (setq major-mode 'latex-mode))
+ ((eq major-mode 'japanese-plain-tex-mode)
+ (setq major-mode 'plain-tex-mode)))
+ (remove-hook 'hack-local-variables-hook #'japanese-TeX-reset-mode-name t))
+
+;; Make `hack-dir-local-variables' to regard `latex-mode' as parent
+;; of `japanese-latex-mode', and `plain-tex-mode' as parent of
+;; `japanese-plain-tex-mode'.
+(put 'japanese-plain-tex-mode 'derived-mode-parent 'plain-tex-mode)
+(put 'japanese-latex-mode 'derived-mode-parent 'latex-mode)
+
+(defun japanese-LaTeX-guess-engine ()
+ "Guess Japanese TeX engine and set it to `TeX-engine'.
+Document class and its option is considered in the guess. Do not
+overwrite the value already set locally."
+ ;; `TeX-engine' may be set by the file local variable or by the menu
+ ;; Command->TeXing Options manually. Don't override the user
+ ;; preference set in such ways.
+ (unless (local-variable-p 'TeX-engine (current-buffer))
(TeX-engine-set
- ;; class file \e$BL>$KMj$k$N$O@5$7$$$N$+!)\e(B
- ;; jLaTeX \e$B$K$b\e(B jarticle \e$B$O0l1~$"$k$7!"\e(BpLaTeX \e$B$G$b<+J,$G\e(B j-article \e$B$r\e(B
- ;; \e$B%$%s%9%H!<%k$7$F;H$C$F$$$1$J$$K!$O$J$$!#\e(B
(cond
- ((TeX-match-style "\\`u[jt]\\(article\\|report\\|book\\)\\'\\|\\`uplatex\\'")
+ ((TeX-match-style "\\`u[jt]\\(?:article\\|report\\|book\\)\\'")
'uptex)
- ((TeX-match-style "\\`[jt]s?\\(article\\|report\\|book\\)\\'")
- 'ptex)
- ((TeX-match-style "\\`j-\\(article\\|report\\|book\\)\\'")
+ ((TeX-match-style "\\`[jt]s?\\(?:article\\|report\\|book\\)\\'")
+ (if (LaTeX-match-class-option "\\`uplatex\\'")
+ 'uptex 'ptex))
+ ((TeX-match-style "\\`j-\\(?:article\\|report\\|book\\)\\'")
'jtex)
- (t japanese-TeX-engine-default)))
- (setq LaTeX-default-style japanese-LaTeX-default-style)
-; (setq TeX-command-BibTeX
-; (if (and (eq TeX-engine 'ptex) (executable-find "pbibtex"))
-; "pBibTeX" "jBibTeX"))
-))
-
-(add-hook 'LaTeX-mode-hook 'japanese-latex-mode-initialization)
-
+ (t japanese-TeX-engine-default)))))
;;; Support for various self-insert-command
(fset 'japanese-TeX-self-insert-command
(cond ((fboundp 'can-n-egg-self-insert-command)
- 'can-n-egg-self-insert-command)
+ #'can-n-egg-self-insert-command)
((fboundp 'egg-self-insert-command)
- 'egg-self-insert-command)
+ #'egg-self-insert-command)
((fboundp 'canna-self-insert-command)
- 'canna-self-insert-command)
+ #'canna-self-insert-command)
(t
- 'self-insert-command)))
+ #'self-insert-command)))
(defun TeX-insert-punctuation ()
"Insert point or comma, cleaning up preceding space."
(expand-abbrev)
(if (TeX-looking-at-backward "\\\\/\\(}+\\)" 50)
(replace-match "\\1" t))
- (call-interactively 'japanese-TeX-self-insert-command))
+ (call-interactively #'japanese-TeX-self-insert-command))
;;; Error Messages
(if japanese-TeX-error-messages
(setq TeX-error-description-list
- '(("Bad \\\\line or \\\\vector argument.*" .
+ '(("\\(?:Package Preview Error\\|Preview\\):.*" .
+"`preview'\e$B$X\e(B`auctex'\e$B%*%W%7%g%s$rD>@\M?$($k$N$OHr$1$F$/$@$5$$!%\e(B
+\e$B%W%l%S%e!<$N<B9T;~0J30$G$3$N%(%i!<$,=P$?>l9g!$M>$j$K$3$_$$$C$?$3$H$r\e(B
+\e$B$7$9$.$+!$$G$J$1$l$P\e(BAUCTeX\e$B$,$R$I$$<:GT$r$7$F$$$^$9!%\e(B")
+
+ ("Bad \\\\line or \\\\vector argument.*" .
"\e$B@~$N79$-$r;XDj$9$k!$\e(B\\line\e$B$^$?$O\e(B\\vector\e$B$N:G=i$N0z?t$,IT@5$G$9!%\e(B")
("Bad math environment delimiter.*" .