YaTeXモードで句読点と全角英数字を変換して保存するEmacsLisp
いろいろググったけど丁度良いEmacs Lispが落ちてなかったので自分で作った。実はちゃんとした方法があるんじゃないかと思ってる。
主な機能
このEmacsLispがやりたい事は
- "、"と"。" を ","と"." に変換
- 全角英数字を半角英数字に変換
- YaTeXが起動しているバッファでのみ有効化
- 保存と同時に自動で変換
の4つです。TeXで論文やレポートを書いている時に、うっかり『、。』や全角英数字を残したままコンパイルしちゃって、「んぐー!めんどくさい!」ってなる現象を根絶する事ができます。
ソースコード
※このコードを参考・使用して発生したいかなる損害にも、筆者は一切の責任を持ちません。自己責任でご使用ください。まぁ、「論文データぶっとんだぞ!!卒業できん!!」とか言われても、知ったこっちゃないので自己責任で使ってね。
gistはこちらhttps://gist.github.com/4518441
;;バッファ全体の句読点と読点をコンマとピリオドに変換 (defun replace-commaperiod-buffer () (interactive "r") (save-excursion (replace-string "、" "," nil (point-min) (point-max)) (replace-string "。" "." nil (point-min) (point-max)))) ;;選択範囲内の全角英数字を半角英数字に変換 (defun hankaku-eisuu-region (start end) (interactive "r") (while (string-match "[0-9A-Za-z]+" (buffer-substring start end)) (save-excursion (japanese-hankaku-region (+ start (match-beginning 0)) (+ start (match-end 0)) )))) ;;バッファ全体の全角英数字を半角英数字に変換 (defun hankaku-eisuu-buffer () (interactive) (hankaku-eisuu-region (point-min) (point-max))) ;;YaTeXモードの時にのみ動作させる用に条件分岐 (defun replace-commaperiod-before-save-if-needed () (when (memq major-mode '(yatex-mode)) (replace-commaperiod-buffer)(hankaku-eisuu-buffer))) ;;保存前フックに追加 (add-hook 'before-save-hook 'replace-commaperiod-before-save-if-needed)
コードを読むとわかりますが、YaTeXモードを使ってTeXを書いてること前提です。ほかのモードを使っている方は、
;;YaTeXモードの時にのみ動作させる用に条件分岐 (defun replace-commaperiod-before-save-if-needed () (when (memq major-mode '(yatex-mode)) (replace-commaperiod-buffer)(hankaku-eisuu-buffer)))
この部分に対応するモードを追加して下さい。
参考にさせて頂いたもの
句読点変換:https://gist.github.com/3100452
全角英数字変換:https://github.com/tomoyamachi/dotfiles/blob/master/.emacs#L876