平衡点
2014/01/07
_ AUCTeX の設定(その2)
面倒なので
を使うことに.
想定している処理は
- epLaTeX + dvipdfmx
- epLaTeX + dvips + ps2pdfwr
だけ(他人と共同作業することを考えると, 当分 epLaTeX のままだし). ようやく
- LaTeXmk で PDF 生成
- Evince で SyncTeX 有効にして表示
という快適環境が手に入りました, とさ.
2014/01/07 20:29 追記
LaTeXMk 実行時の文字コードの判定と, makeindex/mendex のオプション(ダミー)を修正
設定
というわけで, ひっそりと更新
以下, 設定全文です.
読み込み
Debian パッケージの場合, /etc/emacs/site-start.d/50auctex.el において 既に auctex.el と preview-latex.el が load されているため 特に読み込みの設定は必要無い. Debian 以外の場合に, auctex.el と preview-latex を読み込む.
# source: scheme
(unless (file-exists-p "/etc/emacs/site-start.d/50auctex.el")
(load "auctex.el" nil t)
(load "preview-latex" nil t))
auctex-latexmk
AUCTeX で Latexmk を使い, かつ platex 実行時に文字コード指定も追加してくれる. インストール自体は el-get を使用している
ここでは,
- default の "LaTeX" を上書き
- dvips + ps2pdfwr での処理の追加
をしている.
# source: scheme
(defun my:auctex-latexmk-setup ()
"Add LatexMk command to TeX-command-list."
(delq (assoc "LaTeX" TeX-command-list) TeX-command-list)
(add-to-list 'TeX-command-list
'("LaTeX" "latexmk -gg -pdfdvi %t" TeX-run-latexmk nil
(plain-tex-mode latex-mode doctex-mode) :help "Run LatexMk, with epLaTeX, dvipdfmx"))
(add-to-list 'TeX-command-list
'("LaTeXMk(ps2pdfwr)" "latexmk -gg -pdfps %t" TeX-run-latexmk nil
(plain-tex-mode latex-mode doctex-mode) :help "Run LatexMk, with (e)pLaTeX, dvips, ps2pdfwr"))
(setq LaTeX-clean-intermediate-suffixes
(append
'("\\.fdb_latexmk" "\\.aux.bak" "\\.synctex.gz") LaTeX-clean-intermediate-suffixes))
(setq TeX-command-output-list
'(("latexmk" ("pdf")))))
(add-hook 'LaTeX-mode-hook
(function (lambda ()
(require 'auctex-latexmk nil 'noerror)
(my:auctex-latexmk-setup)
(add-to-list 'auctex-latexmk-encoding-alist
'(iso-2022-jp . "jis"))
(add-to-list 'auctex-latexmk-encoding-alist
'(iso-2022-jp-unix . "jis"))
)))
~/.latexmkrc の設定は以下の通り
# source: perl
$kanji = "-kanji=$ENV{\"LATEXENC\"}" if defined $ENV{"LATEXENC"};
$latex = "platex -interaction=nonstopmode -src-specials -shell-escape --synctex=1 $kanji";
$latex_silent = "platex -interaction=batchmode -src-specials -shell-escape --synctex=1 $kanji";
$bibtex = "pbibtex $kanji";
# stop makeindex/mendex
$makeindex = "touch -m %D";
# if ( $ENV{"LATEXENC"} == "jis" ){
# $makeindex = "mendex -J %O -c -r -o %D %S ";
# } elsif ( $ENV{"LATEXENC"} == "euc" ){
# $makeindex = "mendex -E %O -c -r -o %D %S ";
# } elsif ( $ENV{"LATEXENC"} == "sjis" ){
# $makeindex = "mendex -S %O -c -r -o %D %S";
# } else {
# $makeindex = "mendex -U %O -c -r -o %D %S";
# }
$dvipdf = "dvipdfmx %O -o %D %S";
$dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
$ps2pdf = 'ps2pdfwr %O %S %D';
$pdf_mode = 3;
日本語用の設定
とはいえ, LaTeXmk にほぼ全て丸投げなので特に設定することは無かったりする.
文字コード自動判定関数
japanese-latex-mode には %(kanjiopt) があって, buffer の文字コードに合わせて platex 実行時に -kanji=euc 等が追加される. 同様の処理を latex-mode でも行なうために文字コード判定用の関数を定義しておく.
auctex.git - GNU AUCTeX では TeX-master について判定する処理が入っているけれど, 自分の用途では必要ないのでもう少しシンプルに(手抜き).
# source: scheme
(defun my:coding-get (coding-system)
"Convert buffer-file-coding-syetem to pTeX mnemonic.(origin: tex-jp.el)"
(let ((base (coding-system-base coding-system)))
(cdr (assq base
'((japanese-iso-8bit . "euc")
(iso-2022-jp . "jis")
(japanese-shift-jis . "sjis")
(utf-8 . "utf8"))))))
(eval-after-load "tex"
'(progn
(setq TeX-expand-list
(append
TeX-expand-list
'(("%(kanji)"
(lambda ()
(let* ((str (my:coding-get buffer-file-coding-system)))
(if str
(format " -kanji=%s " str) ""))
)))))))
TeX-engine の設定
どのタイミングで使われているのか良くわかっていないのだけれど, 一応設定しておく.
# source: scheme
(setq TeX-engine-alist
'((ptex "pTeX"
"ptex %(kanji)%`%S%(PDFout)%(mode)% -shell-escape"
"platex %(kanji)%`%S%(PDFout)%(mode)% -shell-escape"
"eptex")
(uptex "upTeX"
"uptex %(kanji)%`%S%(PDFout)%(mode)% -shell-escape"
"uplatex %(kanji)%`%S%(PDFout)%(mode)% -shell-escape"
"uptex"
)))
(setq TeX-engine 'ptex)
ちなみに japanese-latex-mode では TeX-engine-alist-builtin に ptex, jtex, uptex が追加(setq) されているため 上記設定は不要(かも).
japanese-latex-mode 用の細工
japanese-latex-mode において, 幾つかのコマンドが追加/上書きされている. あまり使うことの無いコマンドが表示されるのが嫌なので, それらを削除したり.
# source: scheme
(eval-after-load "tex-jp"
'(progn
(setq japanese-LaTeX-default-style "jsarticle")
(dolist (command '("pTeX" "pLaTeX" "pBibTeX" "jTeX" "jLaTeX" "jBibTeX"))
(delq (assoc command TeX-command-list) TeX-command-list))
))
source parse
auto の位置を変更. デフォルトではカレントディレクトリに auto が作成されて鬱陶しいので ~/.emacs.d/tmp/auctex 以下に置くことにする.
# source: scheme
(setq TeX-auto-save t)
(setq TeX-auto-local
(expand-file-name
(concat my:user-emacs-temporary-directory "auctex/auto")))
(setq TeX-style-local
(expand-file-name
(concat my:user-emacs-temporary-directory "auctex/style")))
(setq TeX-parse-self t)
(setq TeX-auto-untabify t)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
hook の追加
TeX-PDF-mode を有効にならない場合には TeX-command-output-list に拡張子を追加しておと良い
# source: scheme
(add-hook 'LaTeX-mode-hook 'TeX-PDF-mode)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)
見た目(preview-latex?)
フォントサイズの変更を無効化
# source: scheme
(setq font-latex-fontify-sectioning 1.0)
上付き, 下付きの無効化
# source: scheme
(setq font-latex-fontify-script nil)
SyncTeX
# source: scheme
(setq TeX-source-correlate-method 'synctex)
(setq TeX-source-correlate-start-server t)
(add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode)
RefTeX
# source: scheme
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
;; Make RefTeX faster
(setq reftex-enable-partial-scans t)