今はVim使ってる。

有名なエディタだが設定がめんどい。

GNU EmacsでもWindows版はあるがgnupackのNTEmacsだと最初から日本語をインライン入力できるのでこちらのほうがいい。gnupackの「ダウンロード-Emacs」からダウンロードする。

インストール

ダウンロードしたファイルを解凍する。どこに、置いてもいいけど、Cドライブ直下に置いてみた。

環境変数の設定

「コンピュータ」を右クリック、「プロパティ」-「システムの詳細設定」-「環境変数」に行く。

変数「Path」
Emacsのbinフォルダがある場所を設定する。例えば

C:\emacs\bin

など。

変数「HOME」
Emacsの設定を書くファイルなどを置くフォルダを設定する。デフォルトだと

C:\Users\ユーザー名\AppData\Roaming

になっている。 「AppData」は隠しフォルダなので「フォルダオプション」で「すべてのファイルとフォルダを表示する」を選択していないと表示されない。GIMPなどのUNIX系のプログラムの設定ファイルもこの「HOME」で設定された場所に置かれる。変更したい場合は設定しよう。

文字化けしないようにする

そのままだと棒線「ー」が文字化けして□が出てきてしまう。そこでHOMEに設定した場所に.emacs.dという名前のフォルダを作り、init.elというファイルを作って、以下を追加する(最近は.emacsよりこちらの方が推奨されているらしい。.emacs.dの構成についてはここ、load-pathの通し方についてはここが参考になるかも)。

(set-language-environment 'Japanese) ;これをしないと文字化けが起こる

起動するにはbinフォルダ内の「runemacs.exe」をダブルクリックする。

これでとりあえずは使える。以下はお好みで設定しよう。

日本語入力と文字コード

IME

;;; IMEの設定

(w32-ime-initialize) ;IME の初期化

(setq default-input-method "W32-IME")

;; Windows IME の ON/OFF をモードラインに表示

(setq w32-ime-show-mode-line t)

;; IME mode-line indicator

;; ON : [あ] OFF : [–]

(setq-default w32-ime-mode-line-state-indicator "[–]")

(setq w32-ime-mode-line-state-indicator "[–]")

(setq w32-ime-mode-line-state-indicator-list
'("[–]" "[あ]" "[–]"))

;; IME の ON/OFF でカーソルの色を変える。

(add-hook 'w32-ime-on-hook
(lambda () (set-cursor-color "brown")))

(add-hook 'w32-ime-off-hook
(lambda () (set-cursor-color "black")))

;; IMEの制御(yes/noをタイプするところでは IME をオフにする)

(wrap-function-to-control-ime 'universal-argument t nil)

(wrap-function-to-control-ime 'read-string nil nil)

(wrap-function-to-control-ime 'read-char nil nil)

(wrap-function-to-control-ime 'read-from-minibuffer nil nil)

(wrap-function-to-control-ime 'y-or-n-p nil nil)

(wrap-function-to-control-ime 'yes-or-no-p nil nil)

(wrap-function-to-control-ime 'map-y-or-n-p nil nil)

この設定はnoriy0363のBlogを参考にしました。ただしMeadowだとmw32-imeとなっているところはNTEmacsではw32-imeとしなくてはならないという情報をWurly’s HOMEPAGEから得たので、その部分を変更しています。

isearchの日本語入力をミニバッファ上で

NTEmacs 23.3.92以降で有効な設定です。gnupackの開発メモを参考にしました。

(defun w32-isearch-update ()

(interactive)

(isearch-update))

(define-key isearch-mode-map [compend] 'w32-isearch-update)

(define-key isearch-mode-map [kanji] 'isearch-toggle-input-method)

;

(add-hook 'isearch-mode-hook
(lambda () (setq w32-ime-composition-window (minibuffer-window))))

(add-hook 'isearch-mode-end-hook
(lambda () (setq w32-ime-composition-window nil)))

文字コード

emacsのモード行に表示される文字コードの見方や文字コードの変換についてはここ参照。

たとえばファイルの保存に使用する文字コード(カレントバッファのみ)をutf-8-unixにしたい場合はC-x RET f utf-8-unixと打つ。

UTF-8N (UTF-8 BOM なし)のエンコードにするにはここによると、utf-8-with-signatureを設定すればいいらしい(未確認)。

関連付け

emacsclient

ファイルをemacsclientw.exeに関連づければ、ダブルクリックして起動できる。ただし環境変数「ALTERNATE_EDITOR」を設定しておく必要あり。例えば

C:\emacs\bin\runemacs

など。

以下を.emacsに加えるといいかも。

;;emacsclient

(server-start) ;すでに開いているEmacsのバッファとして開く

gnuserv

※NTEmacs22でemacsclientwを使おうとしたらエラーが出たので、gnuservを使った時期があるが、NTEmacs23ではエラーが出なくなったのでemacsclientを使えば良い。

Guy’s Home PageのGnuserv for NTをダウンロードする。

その中のgnuserv.elをsite-lispの中に、Releaseの中にある*.exeを全てbinの中に放り込む。

.emacsに以下を追加する。

(require 'gnuserv)

(gnuserv-start)

(setq gnuserv-frame (selected-frame))

これで設定は終了。gnuclientw.exeにファイルを関連づければOK。関連付けがうまくいかない場合はここを見てレジストリをいじるといいかも。

空白スペース・タブを目立たせる

ここ参照。

同期する

2台以上のパソコンでEmacsを使う場合はSugarSyncなどでsite-lispのフォルダを同期すると良いかも。

emacsのコマンド

Windowsのショートカットキーを使う

「Options」の「C-x/C-c/C-v Cut and Paste (CUA)」にチェックを入れるとC-z/C-x/C-c/C-vでundo/cut/copy/pasteができる。変更したらその下にある「Save Options」でセーブしよう。

バッファの切り替え

(iswitchb-mode 1)

を.emacsに追加。C-x bでミニバッファ上にバッファ一覧が現れる。C-sC-rで選択。RETでバッファを切り替える。

参照

ウィンドウの切り替え

C-x oでカーソルの位置が変わる。

行・列の番号表示と、行番号へ移動

以下を加える。ただし左側に行番号を表示させたい場合はlinumが必要。

;; 行・列番号表示

(require 'linum) ;左に行番号表示

(global-linum-mode)

(setq line-number-mode t) ;行番号表示

(setq column-number-mode 1) ;列番号表示

linumと行番号へ移動する方法についてはここを見よ。

直前のコマンドをミニバッファに表示する

C-x Esc Escで直前のコマンドをミニバッファに表示。さらにM-pと打つと一つ前のコマンド、M-nと打つと次のコマンド(参照)。

矩形処理

  • C-x r o (open-rectangle) : 矩形領域だけスペースを確保する
  • C-x r c (clear-rectangle) : 矩形領域を消去する.スペースは確保
  • C-x r d (delete-rectangle) : 矩形領域を消去する.スペースも消す
  • C-x r t (string-rectangle) : 矩形領域を文字で置き変える
  • C-x r r a (copy-rectangle-to-register) : 矩形領域を「レジスタ a 」へ保存
  • C-x r i a (insert-register) : 「レジスタ a 」の矩形領域を貼り付け
  • C-x r k (kill-rectangle) : 矩形領域を削除してキルリングに追加
  • C-x r y (yank-rectangle) : キルリングの矩形領域を貼り付ける

参照

一行コピー

以下を.emacsに加える。こちらを参考にした。

;M-Kで行のコピー

(defun duplicate-line()

(interactive)

(move-beginning-of-line 1)

(kill-line)

(yank)

(move-beginning-of-line 1)

)

(global-set-key (kbd "M-K") 'duplicate-line)

検索・置換

改行の検索・置換

検索・置換のミニバッファで、C-q C-jと打つと改行を入力できる

grep

grep についてを参照。

M-x grep-findfindgrepを使ってサブディレクトリまで検索できるコマンドだが、Windowsで使う場合、コマンドプロンプトにもfindという同名のコマンドがあり、うまくかない。これを解決するにはCygwinをインストールして、環境変数でCygwinのPATH(例えばC:\cygwin\bin;)をWindows system directoryのPATHより前で設定すればいい(例えば先頭とか)。こうすることによってコマンドプロンプトのfindではなく、UNIXコマンドのfindが呼び出される。(参照:9.5.1 How do I do a recursive grep?)

なお、

grep: NUL: No such file or directory

という表示が出るが、これを消したい場合はここの設定をすればよいらしい。

Ediff

shell-mode関連

shell-mode

M-x shell

と打つ。

以下を加えると便利(こちらからコピー)。

;; shell-modeで上下で補完したい

(setq shell-mode-hook

(function (lambda ()
(define-key shell-mode-map [up] 'comint-previous-input)
(define-key shell-mode-map [down] 'comint-next-input))))

eshell-mode

M-x eshell

と打つ。

eshellの設定のリンク

ansi-term

ansi-termを使うと便利らしいが、Windowsではどうにもならなかった。

ansi-termの設定のリンク

PHP

Web開発のためのEmacsの設定参照。

C言語

オートインテンド

上記の[email protected]: Emacs で C 言語プログラミングを始める人へのイントロダクションの「自動インデント用の設定」を設定すると、デフォルトではGNUスタイルになる。K&Rスタイルにするには以下のようにする。

;; C言語

(add-hook 'c-mode-common-hook
'(lambda ()
;; '}'または';' を入力したら、自動改行+インデント
(c-toggle-auto-hungry-state 1)
;; RET キーで自動改行+インデント
(define-key c-mode-base-map "\C-m" 'newline-and-indent)
;; K&R style
(c-set-style "k&r")

))

K&Rスタイル、GNUスタイルについてはこちら

cc-modeで利用出来るスタイルについてはこちら

コンパイル

smart-comileを使うといちいちgcc filename.c -o filenameと打たなくて良くなる。C++, Java, Fortran, Perlにも対応。

実行

shellやeshellを使う。

M-x eshell ./filename

で実行。scanfで入力待ちを行うと、その前のprintfが表示されない。printfの後にfflush(stdout);を加えると良い。

TeX

YaTeX

こいつを使うとTexの入力が楽になる。やてふ→野鳥と呼ばれる。

YeTeXのインストール

yatexのHPから、最新のyatex(yatex 1.74とか)をダウンロードする。解凍してフォルダ名をyatex1.74とかからyatexに変えて

emace/site-lispの下に置く。

.emacsに以下を書き加える。



;;; YaTeX

;; yatex-mode の起動

(setq auto-mode-alist

(cons (cons "\.tex$" 'yatex-mode) auto-mode-alist))

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; 野鳥が置いてある directry の load-path 設定

;; default で load-path が通っている場合は必要ありません

(setq load-path

(cons (expand-file-name
"/emacs/site-lisp/yatex") load-path))

基本的な使い方は物理のかぎしっぽの野鳥(YaTeX)に書いてある。

以下はお好みで加えるよう。



;; [prefix] t lでdviからpdfを作成する。%sはファイル名

(setq dviprint-command-format "dvipdfmx %s")

;; [prefix] b Eでeqnarrayを表示

(setq yatex-mode-load-hook

'(lambda()

(YaTeX-define-begend-key "bE" "eqnarray")

)

)

;; 自動改行を無効

(add-hook 'yatex-mode-hook'(lambda ()(setq auto-fill-function nil)))

;; 開き括弧の入力で閉じ括弧を自動入力しない

(setq YaTeX-close-paren-always 'never)


テンプレート

例えば

\documentclass[11pt,a4paper]{jsarticle}

\usepackage{amsmath,amssymb}

\usepackage{bm}

\usepackage{graphicx}

\usepackage{ascmac}

\begin{document}

\end{document}

というファイルを用意して、~/.emacs.d/template.texなどに置く。

.emacs

;; テンプレート

(setq YaTeX-template-file "~/.emacs.d/template.tex")

を追加する。Emacsで拡張子texのファイルを新規作成するか、空の拡張子texのファイルを開くとテンプレートを挿入してくるか聞いてくるので、挿入したければyをタイプする。

dvioutとの連携

source special をサポートした TeX コンパイラで-srcのオプションをつけてコンパイルすると、エディターと dvioutとの間で相互ジャンプが出来きる [1]。例えば

platex -src foo.tex

だ。YaTeXを使っている人は

(setq tex-command "platex -src") ;source specialでdvioutと連携

と設定すればよい。

dviout→Emacs

ここ[1]には秀丸エディタやWinShellを使う場合の説明が書いてあるが、ここではEmacsのみを説明する。

  1. dvioutを起動して、Option → Setup Parameters… → Common → src:に

emacsclientw^s +%d %s

を記入してSaveする(emacsclientwにPathが設定されていない場合はemacscilentwをC:\emacs\bin\emacsclientw等と書かないとだめだと思う)。

  1. Jump → DireCt Jump to Editorにチェックを入れる

  2. 関連付け – emacsclientを参考にしてemacsclientを設定する。

  3. dvioutでテキストをダブルクリックすると、Emacs上のカーソルが対応する段落に移動する。

補足

emacsclientw^s +%d %s

^sはプログラムとオプションの区切り、%d は行番号、%s はファイル名。

+は行を指定してemacsclientwを使うオプション。emacsclientのオプションについてはここ

Emacs→dviout

例えば

dviout -1 foo "# 123/This book foo.tex"

とコマンドを打つと、foo.texの123行目の”This book”と書かれた場所に対応する部分がdvioutが表示に表示される。-1は最初に起動されたdvioutに対するコマンドを意味する。

これをEmacsで実現するには以下のように設定する(これはこちらのコードをコピペしました。urlはリンクが切れていたので正しい位置に変更してます。)。

;; dviout-jump-to-line

(add-hook 'yatex-mode-hook

'(lambda ()
(define-key YaTeX-mode-map "\C-c\C-j" 'dviout-jump-to-line)))

;; http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/18610.html

;; must typeset tex-source file with -src (source specials) option

(defun dviout-jump-to-line ()

(interactive)

(save-excursion

(save-restriction

(widen)

(let ((word (thing-at-point 'word)))
(beginning-of-line 1)
(let* ((curr-line (+ 1 (count-lines (point-min) (point))))
(dvi-master-file (expand-file-name
(cond
((and (eq major-mode 'yatex-mode)
(fboundp 'YaTeX-get-preview-file-name))
(YaTeX-get-preview-file-name))
((and (boundp 'TeX-master)
(stringp TeX-master))
TeX-master)
(t
(buffer-file-name)))))
(dvi-file (concat
(file-name-sans-extension dvi-master-file) ".dvi"))
(master-file (expand-file-name (buffer-file-name))))
(let ((args (list "-1" dvi-file
(concat "# " (int-to-string curr-line) "/" word
" '" master-file "'"))))
(process-kill-without-query
(apply 'start-process " _preview-jump_" nil "dviout" args)
)
(message (apply 'concat "dviout" args))
))))))

C-c C-jでカーソルの位置に対応する箇所がdvioutに表示される。

latex-math-preview

latex-math-preview.el は Emacs で LaTeX を編集するときに一部分だけをプレビュするための拡張機能です。具体的には、数式、選択領域(transient-mark-mode)、beamer の frame (まだ実験段階です)のプレビュとこれらを画像に保存(png や eps などの形式)することができます。また、記号の一覧を表示し、その中から選択して挿入する機能も備えています。

インストール

簡単な説明。

latex-math-preview.elを上記のサイトからダウンロードしてload-pathに指定されているディレクトリ(site-lispなど)に置く。

阿部 紀行さんのインストーラーを使った人はdvipngが入っている。コマンドのパスも通っている。

以下を.emacsに追加する。

; autoload

(autoload 'latex-math-preview-expression "latex-math-preview" nil t)

(autoload 'latex-math-preview-insert-symbol "latex-math-preview" nil t)

(autoload 'latex-math-preview-save-image-file "latex-math-preview" nil t)

(autoload 'latex-math-preview-beamer-frame "latex-math-preview" nil t)

; キーバインド(yatex-modeの場合)

(add-hook 'yatex-mode-hook
'(lambda ()
(YaTeX-define-key "p" 'latex-math-preview-expression)
(YaTeX-define-key "\C-p" 'latex-math-preview-save-image-file)
(YaTeX-define-key "j" 'latex-math-preview-insert-symbol)
(YaTeX-define-key "\C-j" 'latex-math-preview-last-symbol-again)
(YaTeX-define-key "\C-b" 'latex-math-preview-beamer-frame)))
(YaTeX-define-key "o" (concat YaTeX-prefix "p\C-xo"))))

(setq latex-math-preview-in-math-mode-p-func 'YaTeX-in-math-mode-p)

上の設定は、YaTeX-prefix が \C-c であれば、

\C-c p
数式、選択領域のプレビュ
\C-c \C-p
数式、選択領域から画像を作成して保存
\C-c j
記号の一覧、挿入
\C-c \C-j
直前の記号の再挿入
\C-c \C-b
beamer の frame のプレビュ
\C-c o
追加。数式、選択領域のプレビュの後、元のウィンドウに戻る。

となる。\C-c pではプレビュした後、プレビューのウィンドウがアクティブなウィンドウになる。\C-x oで元のウィンドウにカーソルが戻るが、毎回やるのが面倒なので加えた。concatは文字列を連結する関数。

Emacs Lisp

Emacs Lisp手ほどきから抜粋。

Emacs で.emacs や*.el を編集しようとすると,(変数auto-mode-alist が変更されていない限り) 自動的にそのバッファはEmacs Lisp 編集専用モードになる。このモードでは,Java モードと同様,TAB やLFD で自動的な字下げが行われる。一般的には,その字下げに従うようにすればよい。

Emacs Lisp のコメントはセミコロンからその行の終りまでであるが,それについては,以下の取り決めに従って書くようにすると,後々便利である。M-; やTAB でも,この取り決めに準じてコメントの字下げが行われる。

’;’
セミコロン一つで始まるコメントは,右の端を同じ桁にそろえて書く。このコメントでは,その行の左に書かれたLisp プログラムの働きを説明する(コメントが存在しない行ではM-; は,自動的にこのセミコロンを書き込む)。
’;;’
セミコロン二つで始まるコメントは,Lisp プログラムと同じ字下げにそろえて書く。このコメントでは,以下の行に書かれたプログラムが何を目的に働くのか,あるいは,現在の状態はどうなっているはずかを説明する。あるいは,関数定義の直前の行に書いて,その関数がどんな関数か,どう呼び出せばよいかを説明する。
’;;;’
セミコロン三つで始まるコメントは,左端から書く。関数定義の中には書かない。このコメントでは,全体的,一般的な説明を述べる。
’;;;;’
セミコロン四つで始まるコメントは,左端から書く。プログラムの大きな区切りの先頭で題名を書くのに使う。

.emacs

自分の.emacs。

;; 最初の画面なし

(setq inhibit-startup-message t)

;; load-path

(let((default-directory (expand-file-name "~/.emacs.d/elisp")))

(add-to-list 'load-path default-directory)

(if (fboundp 'normal-top-level-add-subdirs-to-load-path)

(normal-top-level-add-subdirs-to-load-path)))

(prefer-coding-system 'utf-8)

;;;; 日本語入力のための設定

(set-language-environment 'Japanese) ;これをしないと文字化けが起こる

;(set-default-font "MS ゴシック-10.5")

;;; IMEの設定

(w32-ime-initialize) ;IME の初期化

(setq default-input-method "W32-IME")

;; Windows IME の ON/OFF をモードラインに表示

(setq w32-ime-show-mode-line t)

;; IME mode-line indicator

;; ON : [あ] OFF : [–]

(setq-default w32-ime-mode-line-state-indicator "[–]")

(setq w32-ime-mode-line-state-indicator "[–]")

(setq w32-ime-mode-line-state-indicator-list

'("[–]" "[あ]" "[–]"))

;; IME の ON/OFF でカーソルの色を変える。

(add-hook 'w32-ime-on-hook
    
(lambda () (set-cursor-color "brown")))

(add-hook 'w32-ime-off-hook
    
(lambda () (set-cursor-color "black")))

;; IMEの制御(yes/noをタイプするところでは IME をオフにする)

(wrap-function-to-control-ime 'universal-argument t nil)

(wrap-function-to-control-ime 'read-string nil nil)

(wrap-function-to-control-ime 'read-char nil nil)

(wrap-function-to-control-ime 'read-from-minibuffer nil nil)

(wrap-function-to-control-ime 'y-or-n-p nil nil)

(wrap-function-to-control-ime 'yes-or-no-p nil nil)

(wrap-function-to-control-ime 'map-y-or-n-p nil nil)

;; auto-install

(require 'auto-install)

(setq auto-install-directory "~/.emacs.d/elisp/auto-install/") ;Emacs Lispをインストールするディレクトリの指定

(auto-install-update-emacswiki-package-name t)

(auto-install-compatibility-setup) ;install-elisp.elとコマンド名を同期

;; anything

(defvar org-directory "");reference to free variable \`org-directory'というエラーの回避 http://d.hatena.ne.jp/myhobby20xx/20110308/1299593824

(require 'anything-startup)

;; auto-complete

(require 'auto-complete)

(require 'auto-complete-config)

(global-auto-complete-mode t)

(setq ac-auto-start t)

;;; isearchで日本語検索するときに変換中の文字列をミニバッファに表示する

;; NTEmacs 23.3.92以降

;; http://d.hatena.ne.jp/ksugita0510/20110103/p1

(defun w32-isearch-update ()

(interactive)

(isearch-update))

(define-key isearch-mode-map [compend] 'w32-isearch-update)

(define-key isearch-mode-map [kanji] 'isearch-toggle-input-method)

;

(add-hook 'isearch-mode-hook
    
(lambda () (setq w32-ime-composition-window (minibuffer-window))))

(add-hook 'isearch-mode-end-hook
    
(lambda () (setq w32-ime-composition-window nil)))

;; リージョン部に色をつける

(setq transient-mark-mode t)

;; C-hでバックスペース

(global-set-key "\C-h" 'delete-backward-char)

;; バッファの切り替え

(iswitchb-mode 1)

;; M-Kで行のコピー

(defun duplicate-line()

(interactive)

(move-beginning-of-line 1)

(kill-line)

(yank)

(move-beginning-of-line 1)

)

(global-set-key (kbd "M-K") 'duplicate-line)

;; 行・列番号表示

(require 'linum) ;左に行番号表示

(global-linum-mode)

(setq line-number-mode t) ;行番号表示

(setq column-number-mode 1) ;列番号表示

;; emacsclient

(server-start) ;すでに開いているEmacsのバッファとして開く

;; 全角スペースの表示

(require 'jaspace)

;; タブはスペースにする

(setq-default indent-tabs-mode nil)

;; C-xcでコンパイル。M-x compileは面倒

;; (global-set-key "\C-xc" 'compile)

;; smart-compile

;; http://homepage.mac.com/zenitani/elisp-j.html#smart-compile

(require 'smart-compile)

(global-set-key "\C-cc" 'smart-compile)

(define-key menu-bar-tools-menu [compile] '("Compile…" . smart-compile))

;; nxhtml

(load "nxhtml/autostart.el")

;; php-mode

(require 'php-mode)

;;(setq php-mode-force-pear t) ;PEAR規約のインデント設定にする

;;(add-to-list 'auto-mode-alist '("\.php$" . php-mode)) ;*.phpのファイルのときにphp-modeを自動起動する

;; php-mode-hook

(add-hook 'php-mode-hook
    
(lambda ()
        
(require 'php-completion)
        
(php-completion-mode t)
        
(define-key php-mode-map (kbd "C-o") 'phpcmp-complete) ;php-completionの補完実行キーバインドの設定
        
(make-local-variable 'ac-sources)
        
(setq ac-sources '(
                            
ac-source-words-in-same-mode-buffers
                            
ac-source-php-completion
                            
ac-source-filename
                            
))))

;; (add-hook 'php-mode-hook

;; (lambda ()

;; (require 'php-completion)

;; (php-completion-mode t)

;; (define-key php-mode-map (kbd "C-o") 'phpcmp-complete)

;; (when (require 'auto-complete nil t)

;; (make-variable-buffer-local 'ac-sources)

;; (add-to-list 'ac-sources 'ac-source-php-completion)

;; (auto-complete-mode t))))

;; C言語

(add-hook 'c-mode-common-hook
    
'(lambda ()
        
;; {, }, ;を入力したら、自動改行+インデント
        
(c-toggle-auto-hungry-state 1)
        
;; RET キーで自動改行+インデント
        
(define-key c-mode-base-map "\C-m" 'newline-and-indent)
    
;; K&R style
        
(c-set-style "k&r")
        
;; インデントの変更
        
(setq c-basic-offset 2)

))

;; shell-modeで上下で補完したい

;; (setq shell-mode-hook

;; (function (lambda ()

;; (define-key shell-mode-map [up] 'comint-previous-input)

;; (define-key shell-mode-map [down] 'comint-next-input))))

;;;; TeX

;;; YaTex

;; yatex-mode の起動

(setq auto-mode-alist

(cons (cons "\.tex$" 'yatex-mode) auto-mode-alist))

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; 野鳥が置いてある directry の load-path 設定

;; default で load-path が通っている場合は必要ありません

;; (setq load-path

;; (cons (expand-file-name

;; "/emacs/site-lisp/yatex") load-path))

;; [prefix] t lでdviからpdfを作成する。%sはファイル名

(setq dviprint-command-format "dvipdfmx %s")

;; [prefix] b Eでeqnarrayを表示

(setq yatex-mode-load-hook

'(lambda()

(YaTeX-define-begend-key "ba" "align")

)

)

;; 自動改行を無効

(add-hook 'yatex-mode-hook'(lambda ()(setq auto-fill-function nil)))

;; 開き括弧の入力で閉じ括弧を自動入力しない

(setq YaTeX-close-paren-always 'never)

;; テンプレート

(setq YaTeX-template-file "~/.emacs.d/template.tex")

;; dvioutとの連携

(setq tex-command "platex -src") ;source specialでdvioutと連携

;; dviout-jump-to-line (http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/18610.html)

(add-hook 'yatex-mode-hook

'(lambda ()
    
(define-key YaTeX-mode-map "\C-c\C-j" 'dviout-jump-to-line)))

;; http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/18610.html

;; must typeset tex-source file with -src (source specials) option

(defun dviout-jump-to-line ()

(interactive)

(save-excursion

(save-restriction

(widen)

(let ((word (thing-at-point 'word)))
    
(beginning-of-line 1)
    
(let* ((curr-line (+ 1 (count-lines (point-min) (point))))
            
(dvi-master-file (expand-file-name
                            
(cond
                            
((and (eq major-mode 'yatex-mode)
                                    
(fboundp 'YaTeX-get-preview-file-name))
                                
(YaTeX-get-preview-file-name))
                            
((and (boundp 'TeX-master)
                                    
(stringp TeX-master))
                                
TeX-master)
                            
(t
                                
(buffer-file-name)))))
            
(dvi-file (concat
                    
(file-name-sans-extension dvi-master-file) ".dvi"))
            
(master-file (expand-file-name (buffer-file-name))))
    
(let ((args (list "-1" dvi-file
                        
(concat "# " (int-to-string curr-line) "/" word
                                
" '" master-file "'"))))
    
(process-query-on-exit-flag
        
;(process-kill-without-query ;obsolete function
        
(apply 'start-process " _preview-jump_" nil "dviout" args)
        
)
        
(message (apply 'concat "dviout" args))
        
))))))

;;; latex-math-preview.el (http://transitive.info/software/latex-math-preview/)

;; autoload

(autoload 'latex-math-preview-expression "latex-math-preview" nil t)

(autoload 'latex-math-preview-insert-symbol "latex-math-preview" nil t)

(autoload 'latex-math-preview-save-image-file "latex-math-preview" nil t)

(autoload 'latex-math-preview-beamer-frame "latex-math-preview" nil t)

;; キーバインド(yatex-modeの場合)

(add-hook 'yatex-mode-hook
    
'(lambda ()
    
(YaTeX-define-key "p" 'latex-math-preview-expression)
    
(YaTeX-define-key "\C-p" 'latex-math-preview-save-image-file)
    
(YaTeX-define-key "j" 'latex-math-preview-insert-symbol)
    
(YaTeX-define-key "\C-j" 'latex-math-preview-last-symbol-again)
    
(YaTeX-define-key "\C-b" 'latex-math-preview-beamer-frame)
    
(YaTeX-define-key "o" (concat YaTeX-prefix "p\C-xo")))) ;追加

(setq latex-math-preview-in-math-mode-p-func 'YaTeX-in-math-mode-p)

(custom-set-variables

;; custom-set-variables was added by Custom.

;; If you edit it by hand, you could mess it up, so be careful.

;; Your init file should contain only one such instance.

;; If there is more than one, they won't work right.

'(column-number-mode t))

(custom-set-faces

;; custom-set-faces was added by Custom.

;; If you edit it by hand, you could mess it up, so be careful.

;; Your init file should contain only one such instance.

;; If there is more than one, they won't work right.

)
  1. [1] Windows95/98/Me/NT/2000/XP におけるdviout のインストール