emacsでLatexの英文法チェック

以下の英文法チェッカをemacsから使えるように設定する

- textlint
- redpen
- langtool
- textgears
- AfterTheDeadline
- link-grammar

#textlint

textlintと英文法チェックルールをインストール

``` textlint-install.sh
# npm update -g npm
# npm install -g textlint
# npm install -g textlint-rule-unexpanded-acronym textlint-rule-rousseau  textlint-rule-alex textlint-rule-common-misspellings textlint-rule-ginger textlint-rule-spellchecker textlint-rule-write-good textlint-rule-en-max-word-count
```


textlintでmarkdownのチェックができるようにする（textlintはLatexに対応していない）

``` textlint-conf.el
(require 'flycheck)

(flycheck-define-checker textlint
  "A linter for prose."
  :command ("textlint" "--format" "unix" "--rule" "unexpanded-acronym" "--rule" "rousseau" "--rule" "alex" "--rule" "common-misspellings" "--rule" "ginger"  "--rule"  "spellchecker" "--rule" "write-good" source-inplace)
 :error-patterns
  ((warning line-start (file-name) ":" line ":" column ": "
            (id (one-or-more (not (any " "))))
            (message (one-or-more not-newline)
                     (zero-or-more "\n" (any " ") (one-or-more not-newline)))
            line-end))
  :modes (text-mode markdown-mode))

(add-to-list 'flycheck-checkers 'textlint)
(add-hook 'markdown-mode-hook 'flycheck-mode)
````



# redpen & langtool
redpenとlangtoolを以下のように設定する

[redpenをインストールしてemacsをここに書いた設定をする](http://qiita.com/niitsuma/items/2cad67c936d200f54ddb)


app-text/languagetoolをインストールして以下のemacs設定

```langtool-conf.el
(require 'langtool)
(setq langtool-language-tool-jar "/usr/share/languagetool/lib/languagetool-commandline.jar")
(setq langtool-default-language "en-US")
;;(setq langtool-mother-tongue "en")
(defun langtool-autoshow-detail-popup (overlays)
  (when (require 'popup nil t)
    ;; Do not interrupt current popup
    (unless (or popup-instances
                ;; suppress popup after type `C-g' .
                (memq last-command '(keyboard-quit)))
      (let ((msg (langtool-details-error-message overlays)))
        (popup-tip msg)))))

(setq langtool-autoshow-message-function
      'langtool-autoshow-detail-popup)
```


# edit-indirect-region-latex

Latex内の領域選択した部分だけを文法チェッカーが誤認識しない形式に変換してから英文法チェックできるように
[edit-indirect-region-latex](http://qiita.com/niitsuma/items/1696ce3ce5cdd3f3dbf6) のスクリプトを

M-x package-install edit-indirect-region-latex

してから

(require 'edit-indirect-region-latex)
(setq edit-indirect-region-latex-after-creation-functions 
  (list
    (lambda ( ) (write-file "/tmp/indirect.md" nil) )
    ;; #'langtool-check-buffer ;;gentooのlangtoolが動かなくなったので念のため除外
    #'redpen-paragraph 
    )  )

を .emacs.el  に加える


# textgears & AfterTheDeadLine & link-grammar

さらにtextlintと同じように
- [textgears](https://textgears.com/) 
- [link-grammar](http://qiita.com/niitsuma/items/80543890ce268109ffb4)
- [AfterTheDeadLine](http://qiita.com/niitsuma/items/371f03c90311f1bbf14f)
も[flycheckから使えるようにした](https://github.com/niitsuma/engchecker2flycheck)

``` install-engchecker2flycheck.sh
# pip install engchecker2flycheck
```
でコマンドラインから英文チェッカーを使えるようになるので，これをflycheckから使う設定をする．

``` use-engchecker2flycheck.el
(require 'flycheck)

(setq textgears-key "your textgeras key")

(flycheck-define-checker textgears
    "textgears check"
    :command  ("textgearschkfile"  source  (eval textgears-key )   )
  :error-patterns
  ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
  :modes (text-mode markdown-mode))

(add-to-list 'flycheck-checkers 'textgears)

(flycheck-define-checker link-grammar
  "link-grammar check"
  :command ("linkgrammarengchkfile" source)
  :error-patterns
  ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
  :modes (text-mode markdown-mode))

(add-to-list 'flycheck-checkers 'link-grammar)


(flycheck-define-checker afterthedeadline
  "afterthedeadline check"
  :command ("afterthedeadlinechkfile" source)
  :error-patterns
  ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
  :modes (text-mode markdown-mode))

(add-to-list 'flycheck-checkers 'afterthedeadline)


(add-hook 'markdown-mode-hook 'flycheck-mode)
```

textgearsは
(setq textgears-key "your textgeras key")
しないと使えない．
AfterTheDeadLineはサーバーをローカルで動かさないと使えないので注意．

# 組合せ方

C-c ! s チェックツール名
で英文チェッカーツールを切り替えできる

- 間違い検出能力が一番高いのはlink-grammar．ただし修正候補は示さない
- textgearsは修正も示すが有料.しかもオンライン．
- afterthedeadlineは無料で修正も示すが見逃しが多い
- textlintのgengerはtextgearsには劣る
- redpenは誤検出が沢山出る

なので無料で修正候補も示してくれる
afterthedeadline,textlint,redpen,langtool
を最初にかけて
次に
link-grammar
でエラーがないかチェックして，
最後にエラーがなくなってからtextgearsをかける
のが理想的な順番ではないかと思う