Cygwin Emacs で TeX Live(W32TeX)を使うための設定

いつの間にか、Cygwin の Emacs がかなりまともに動作するようになっていたので、TeX Live(W32TeX)によるタイプセット・プレビュー用の設定をしておくことにしました。

~/.bashrc の設定

色付けの影響により、tex-shell のプロンプトが文字化けするので、その対策をしておきます。

if [ $EMACS ]
then
	PS1="\033[1;34m[\033[1;31mW\033[1;34m]>\033[0m "
else
	PS1="[\033[1;34m][[\033[1;31m]W[\033[1;34m]]>[\033[0m] "
fi

~/.emacs.d/init.el の設定

Cygwin のデフォルトシェルは Mac と同じ Bash なので、TeX 関連の設定は コレがほぼそのまま通用します。ただし、利用する TeX が W32TeX のため、ファイルパスのフォーマットには注意が必要で、下記では 31 行目で Windows パスに変換する処理を施しています。

  • control + cf … platex + dvips で ps ファイルを生成
  • control + cp … dvips + ps2pdf で pdf ファイルを生成
  • control + cw … ps ファイルを表示(あらかじめ関連付けが必要)
  • control + cw … pdf ファイルを表示(あらかじめ関連付けが必要)
;; 日本語の設定(UTF-8)
(set-language-environment 'Japanese)
(prefer-coding-system 'utf-8)

;; 種々雑多な設定
(setq make-backup-files nil)
(show-paren-mode nil)
(setq inhibit-startup-message t)
;; 環境内での自動インデントを無効化
(electric-indent-mode 0)

;; 行番号の設定(F5 キーで表示・非表示を切り替え)
;; 出典:調査中
(require 'linum)
(global-linum-mode 0)
(global-set-key [f5] 'linum-mode)
(setq linum-format
	(lambda (line) (propertize (format
		(let ((w (length (number-to-string
			(count-lines (point-min) (point-max))
		)))) (concat "%" (number-to-string w) "d "))
	line) 'face 'linum)))
(setq linum-format "%5d ")

;; *tex-shell* バッファの大きさ(高さ)を調整するためのキーの設定
(global-set-key (kbd "C-^") 'enlarge-window)
(global-set-key (kbd "C-~") 'shrink-window)
;; tex ファイルを dvi → ps ファイルに変換する設定 control + cf
(setq latex-run-command "F=*; platex -kanji=utf8 -no-guess-input-enc -interaction=nonstopmode $F && dvips ${F%.tex}")
;; dvi ファイルを ps → pdf ファイルに変換する設定 control + cp
(setq tex-dvi-print-command "F=`cygpath -w *`; dvips $F && ps2pdf ${F%dvi}ps")

;; PS ファイルを gv で開く control + cw
(setq tex-ps-preview-command "cygstart")
(add-hook 'text-mode-hook
	  (lambda ()
	    (local-set-key "C-cC-w" 'tex-ps-preview)))
(defun tex-ps-preview ()
	"Preview the .ps file made by \[tex-region], \[tex-buffer] or \[tex-file].
Runs the shell command defined by `tex-ps-preview-command'."
	(interactive)
	(let ((preview-file-name-ps (tex-append tex-print-file ".ps"))
		test-name)
	(if (and (not (equal (current-buffer) tex-last-buffer-texed))
			(buffer-file-name)
			;; Check that this buffer's printed file is up to date.
			(file-newer-than-file-p
			(setq test-name (tex-append (buffer-file-name) ".ps"))
			(buffer-file-name)))
		(setq preview-file-name-ps test-name))
	(if (not (file-exists-p preview-file-name-ps))
		(error "No appropriate `.ps' file could be found")
	(if (tex-shell-running)
		(tex-kill-job)
		(tex-start-shell))
	(tex-send-command tex-ps-preview-command preview-file-name-ps)
		t)))

;; PDF ファイルを Preview.app で開く control + cv
(add-hook 'text-mode-hook
	  (lambda ()
	    (local-set-key "C-cC-v" 'tex-pdf-preview)))
(setq tex-pdf-preview-command "cygstart")
(defun tex-pdf-preview ()
	"Preview the . pdf file made by \[tex-region], \[tex-buffer] or \[tex-file].
Runs the shell command defined by `tex-pdf-preview-command'."
	(interactive)
	(let ((preview-file-name-pdf (tex-append tex-print-file ".pdf"))
		test-name)
	(if (and (not (equal (current-buffer) tex-last-buffer-texed))
			(buffer-file-name)
			;; Check that this buffer's printed file is up to date.
			(file-newer-than-file-p
			(setq test-name (tex-append (buffer-file-name) ".pdf"))
			(buffer-file-name)))
		(setq preview-file-name-pdf test-name))
	(if (not (file-exists-p preview-file-name-pdf))
		(error "No appropriate `. pdf' file could be found")
	(if (tex-shell-running)
		(tex-kill-job)
		(tex-start-shell))
	(tex-send-command tex-pdf-preview-command preview-file-name-pdf)
		t)))

 
cygwin-emacs