2020年04月23日

Windows上の「GNU Emacs」でスペルチェックを利用する

1. 前提となる環境
Windows上で仕事をするときは、「TeX Live」「GNU Emacs」など日常的に使う基本的な道具は、ホームディレクトリ直下に「tools」フォルダを作ってそこにまとめて置いています。
Windowsでは基本的に「C:\Users\username」がホームディレクトリになっているので、道具置き場は「C:\Users\username\tools」で、たとえば「GNU Emacs」であれば「C:\Users\username\tools\emacs」に格納していくイメージです。
できるだけ管理者権限でログインしてない場合でもおなじ環境を構築できるように、理想的には道具置き場フォルダ「C:\Users\username\tools」をそのままUSBメモリにコピーして持ち出し、外出先のWindowsマシンに挿入していつもの環境で仕事ができるようにしたい、という方向で考えています(が、現状はあまりその部分はこだわって解決はしていません・・・)。

C:
+ Users
| + username
| | + tools
| | | + texlive
| | | + emacs
| | | + hunspell
| | | + SumatraPDF
| | | + ...

上記環境を前提として、「GNU Emacs」から利用できるスペルチェッカーを導入する方法を、以下に記述していきます。

2. インストールの準備とファイルの取得
利用できるスペルチェッカーはいろいろありますが、やはり「Aspell」や「Hunspell」が有力な選択肢になります。
ユーザ権限でインストールできるバイナリファイルをさがしてみたところ、「hunspell windows」Git-Hubレポジトリで公開されているものがありましたので、これを使います。
Releases」ページへすすみ、「hunspell-windows-h-1.6.2-1-d-9ec31e4-v2.zip」ファイルをダウンロードします。

3. インストール作業
ダウンロードしたファイルを解凍すると「hunspell-windows-h-1.6.2-1-d-9ec31e4-v2」フォルダができるので、フォルダ名を「hunspell」に変更して、まるごと「C:\Users\username\tools」ヘ移動します。
最終的に、「GNU Emacs」から呼び出すスペルチェックプログラム「hunspell.exe」は、「C:\Users\username\tools\hunspell\bin」フォルダに格納されていることになります。

4. インストール後の設定
「GNU Emacs」ホームフォルダ(「C-x C-f」として開いた小窓に「~/」と入力したときに開くのがホームフォルダ)には隠しフォルダ「.emacs.d」が設置されており、そのなかに「GNU Emacs」の挙動を制御する設定ファイル「init.el」が置かれています。
この設定ファイル「init.el」に、スペルチェッカーを呼び出す設定を記述します。
入力中にリアルタイムでスペルチェックをかけていく「Flyspell」という便利な機能もあるので、それを呼び出す設定も追加してあります。

・「init.el」設定例

;;
;; 1. Hunspellを使う場合
;;
;; Windowsでは、「https://github.com/gromnitsky/hunspell-windows/releases/」から
;; 「hunspell-windows-h-1.6.2-1-d-9ec31e4-v2.zip」をダウンロードする。
;; 「https://sourceforge.net/projects/ezwinports/files/」からも、
;; Windows用バイナリ「hunspell-1.3.2-3-w32-bin.zip」をダウンロードできる。
;; 以下の行をコメントアウトして、上記ファイルを解凍した場所を指定する。
(add-to-list 'exec-path "C:/Users/username/tools/hunspell/bin")
;;
;; Linuxなら、「$ sudo apt install hunspell hunspell-en-us」コマンドでインストールし、
;; 以下の二行をコメントアウトして、環境変数を設定する。「~/.bashrc」に記述でも可。
;; (setenv "DICTIONARY" "en_US")
;; (setenv "WORDLIST" "$HOME/.hunspell_personal_dictionary")
;;
;; 以下の行をコメントアウトして、スペルチェックプログラムにHunspellを指定する。
(setq-default ispell-program-name "hunspell")
;;
;; Hunspellの拡張機能を使う場合は、以下の行をコメントアウトする。
;; (setq ispell-really-hunspell t)
;;
;; Aspellを使う場合
;;
;; Windowsでは、「http://aspell.net/win32/」からWindows用インストーラ
;; 「Aspell-0-50-3-3-Setup.exe」をダウンロードして実行する。
;; 以下の行をコメントアウトして、Aspell のインストールパスを指定する。
;; (add-to-list 'exec-path "C:/Users/username/tools/aspell/bin")
;;
;; Linuxなら、「$ sudo apt-get install aspell aspell-en」コマンドでインストールする。
;;
;; あらかじめホームフォルダに「.aspell.conf」ファイルを作成し、対象言語「lang en_US」を記述しておく。
;; Linuxなら「$ echo "lang en_US" > ~/.aspell.conf」コマンドを実行する。
;; 上記の代わりに、以下の行をコメントアウトしてもO.K.かも。
;; (setenv "LANG" "en_US")
;;
;; 以下の行をコメントアウトして、スペルチェックプログラムにAspellを指定する。
;; (setq-default ispell-program-name "aspell")
;;
;; 以下の行をコメントアウトして、「ispell」を要求する。
(require 'ispell)
;;
;; ほかの辞書を使う場合は、その場所を指定する。
;; (setq ispell-personal-dictionary "C:/Users/username/tools/hunspell/xxxxx")
;; (setq ispell-alternative-dictionary "C:/Users/username/tools/hunspell/xxxxx")
;;
;; 日本語と英語が混ざった文章でスペルチェックを可能にする設定
(eval-after-load "ispell"
'(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")))
;;
;; 「C-M-$」で単語補完する設定
(global-set-key (kbd "C-M-$") 'ispell-complete-word)
;;
;; Flyspellで自動スペルチェックを実行する設定
;; 基本的には「M-x flyspell-mode」で自動スペルチェックを有効にできるが、
;; ファイル形式によって自動で有効化する設定を追加する。
;;
(mapc
(lambda (hook)
(add-hook hook 'flyspell-prog-mode))
'(
;; コメントのみスペルチェック対象とするFlyspellを自動起動するモードを指定
c-mode-common-hook
emacs-lisp-mode-hook
prog-mode-hook
))
(mapc
(lambda (hook)
(add-hook hook
'(lambda () (flyspell-mode 1))))
'(
;; Flyspellを自動起動するモードを指定
yatex-mode-hook
org-mode-hook
text-mode-hook
))


5. スペルチェッカーの利用方法
「GNU Emacs」での文書編集中に、スペルチェックをかけるによく使うキー操作は、以下のとおりです。





























入力 動作
M-x ispell スペルチェック呼び出し(対象範囲は選択状況に依存)
M-x ispell-buffer バッファ全体をスペルチェック
M-x ispell-region 選択範囲をスペルチェック
M-$ (M-x ispell-word) 選択した単語のスペル確認
C-M-$ (M-x ispell-word-complete) 選択した単語の補完
M-x flyspell-mode 自動スペルチェック(Flyspell)モード起動



参考ウェブページ一覧表(順不同)

http://gromnitsky.blogspot.com/2016/09/emacs-251-hunspell.html
https://texwiki.texjp.org/?Hunspell


posted by hatakazu at 18:42| Comment(0) | TeXとかEmacsとか | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。