textlint
これらの記事を参考にtexlintの整備をする。
- https://mako-note.com/ja/textlint-emacs/
- https://blog.piyo.tech/posts/2018-10-10-textlint-on-emacs/
- https://zenn.dev/eggc/articles/1f8f1a095e87c3
それぞれ記述している内容はほとんど同じ内容だ。ここでやったことはそれらの記事の内容をほぼそのまま行っている。ファイル名やファイルパスなど微妙に変更したが、概ね同じ方法になっている。
まずはtextlintをインストールする。
npm install -g textlint
次に校正ルールをインストールする。ここでは技術文書向けの校正ルールを用いる。
npm install -g textlint-rule-preset-ja-technical-writing textlint-rule-preset-ja-spacing
npm install -g textlint-rule-unexpanded-acronym textlint-rule-write-good textlint-rule-ginger textlint-rule-alex textlint-rule-common-misspellings textlint-rule-en-max-word-count
Org-modeでtextlintを実行するためにパーサーをインストールする。
npm install -g textlint-plugin-org traverse
npm install -g @textlint/ast-node-types
textlintを実行するスクリプトを実装する。
#! /usr/bin/env bash
SCRIPT_DIR=$(cd $(dirname $0); pwd)
FILENAME=$1
if grep -q [ぁ-ん] $FILENAME; then
TEXTLINTRC="${SCRIPT_DIR}/../textlint/ja.json"
else
TEXTLINTRC="${SCRIPT_DIR}/../textlint/en.json"
fi
EXTENTION=${FILENAME##*.}
if [ $EXTENTION = "org" ]; then
PLUGIN="--plugin org"
else
PLUGIN=""
fi
exec textlint --format unix --config ${TEXTLINTRC} ${PLUGIN} ${FILENAME}
flycheckのチェッカーを定義する。
(flycheck-define-checker textlint
"A linter for text."
:command ("textlint-check" source)
: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 gfm-mode org-mode))
ただし、textlintの実行とflycheckの組み合わせには問題もある。例えば、textlintは文章が多い場合にはエラーを出力し異常終了する。またtextlintの環境を整備するのも若干面倒に感じる。それ用のDocker Imageを作成してしまってもよいかもしれない。あと、textlintの技術文書の校正ルールが結構厳しくて「〜だと思う」や「〜かもしれない」のような表現は校正によってエラーとなる。曖昧な表現は許されず、断定することを強制してくる。論文を記述するという意味では問題にならないが、テクニカルエッセイのような文章の場合は、これらの表現は頻繁に使いたくなる。そもそも断定できることなんてこの世にあるのだろうか。