less than 1 minute read

以前にaspellを利用したTeX文書のスペルチェックの方法についての記事を書いたが,今回はそのスペルチェックをemacs上から実行する方法についてまとめる.方法はいくつかあるが,基本的な精神はemacsから外部のaspellなどのスペルチェックプログラムを参照してくれるというもので,emacs自体になにかスペルチェックをする機能があるわけではない.今回紹介する方法はスペルチェックプログラムとしてaspellを使う方法である.スペルチェックというと通常のコードにおける構文チェックのことも考えるが,今回の記事はあくまでTeX文書の英語スペルの間違いチェックのみに注力する.

Macでのaspellのインストール

macでのaspellはhomebrewないしmacportsで簡単にインストールできる.

# homebrewの場合
brew install aspell 

# macportsの場合
sudo port install aspell 

Emacsからaspellによるスペルチェックを可能にするispellパッケージ

名前がややこしいが,Emacs上からaspellを起動するパッケージはispellである.これは古くはispellというスペルチェッカがよく用いられていたことに起因する.use-packageを使う場合のinit.elの設定の例は以下のようなものである.

(use-package ispell
  :ensure t ; 入っていない場合にインストールする
  :init
  (setq-default ispell-program-name "aspell") ; スペルチェッカーとしてaspellを利用
  :config
  (setq ispell-check-comments nil) ; コメント行はチェックしない
  (setq ispell-extra-args '("-t")) ; tex文書
  (setq ispell-local-dictionary "en_US") ; 辞書の指定
  (add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")) ;日本語の部分を飛ばす
)

最初のispell-program-nameでスペルチェッカーとして使うプログラムを指定する.自分の場合,環境によってaspellをフルパスで指定しないとemacsが見つけてくれないことがあった.この例では,ispell-local-dictionaryで辞書としてデフォルトのアメリカ英語辞書を指定している.また,日英混在文書を処理するときのために最終行で日本語の部分を飛ばす設定にしてある.TeX文書用のaspellのオプション-tispell-extra-argsで指定するとTeX構文がエラーで引っかかるのを防げる(完璧ではないが).

この状態でemacs上でM-x ispellとして対話的なスペルチェックを実行できる.とはいえ,正直これをやるんだったら一旦emacsから出てシェルでaspellを直接実行したほうが便利かな,と個人的には思う.

Flyspellによるオンザフライのスペルチェック

Emacs上でスペルチェックするメリットを実感するには,やはりオンザフライで誤りを検出できる方がよいだろう.それを実現してくれるパッケージの一つがFlyspellである.Flyspellは編集中に誤り候補の単語の色を変えて強調してくれる.

(use-package flyspell
    :ensure t
    :hook (yatex-mode . flyspell-mode)
    :init
    (setq-default ispell-program-name "/usr/local/bin/aspell") ; スペルチェッカーとしてaspellを利用
    :config
    (setq ispell-check-comments nil)
    (setq ispell-extra-args '("-t")) ; tex文書
    (set-face-attribute 'flyspell-duplicate nil
                       :foreground "white"
                       :background "orange" :box t :underline nil) ; 1行に2回以上出た単語をオレンジで強調
    (set-face-attribute 'flyspell-incorrect nil
                       :foreground "white"
                       :background "red" :box t :underline nil) ; 間違っている単語を赤で強調
)

設定はほぼispellのときと同様だが,hookでyatexモードのときだけ(ようはTeX文書をいじるときだけ)有効にしている.set-face-attributeは色の変更なので,なくても良い.

flyspellの注意点として,現在表示されている領域で単語チェックを毎回かけ直すという仕様になっており,スクロールしたときに少し反応が遅いという点が挙げられる.なので書いている時にはミスがあったらすぐわかるので便利なのだが,書き終わったあとにスクロールしてミスを調べるというような使い方には向かない.

まとめ

emacsにおけるスペルチェックとして,ispellとflyspellの使い方を紹介した.ispellは正直あまり有り難みがないが,flyspellはオンザフライで誤字のハイライトができるので便利に使える.設定も大変ではないのでとりあえず入れておきたいパッケージだ.

参考

Ispell: 対話的スペルチェック|GNU EmacsでLaTeX文書を書く話 [備忘録]Emacsでスペルチェック #Emacs - Qiita [Home] Interactive Spell How to ignore comments in the LaTeX file with ispell (within Emacs if possible) - Stack Overflow