2011-01-12 3 views
9

私はほとんどの私の文章を書くのにEmacsを使います。私はreStructuredTextを使って書き込みを行い、いくつかの前処理の後、それらをLaTeXに変換します。なぜなら私はLaTeXの引用を書くからです。このテキストは\cite一部にその仕事をすることができますので、rst2latexを扱ういくつかのカスタムスクリプトによって処理されflyspellを文脈によっていくつかの言葉をバイパスする方法は?

En \cite[pp.~XXVIII--XXIX]{Crnkovic2002} se brindan algunos riesgos 
que se pueden asumir con el desarrollo basado en componentes, los 

:これは(スペイン語で)私の文章の一つの抜粋です。

flyspell-modeを有効にすると、ほとんどの引用キーはスペルミスとして通知されます。

\citeコマンド内でflyspellにスペルチェックを行わないようにするにはどうすればよいですか。

さらに、最初のモードでflyspellが次のスペルチェックを続けるように、最初のモードとflyspellを組み合わせるにはどうすればよいですか?

  • 残りはリテラル
  • のreSTディレクティブのパラメータと引数
  • のreST生ディレクティブの内容

任意のアイデア

  • のreSTコードをコメント?

  • 答えて

    11

    変数ispell-parserを値'texに設定して、flyspellが(la)texシーケンスを無視するようにすることができます。これを行うには、

    M-: (setq 'ispell-parser 'tex) 
    

    のように手動で設定するか、それを行うための少しの機能を記述します。あなたの.emacsファイルに次のように置く:

    (defun flyspell-ignore-tex() 
        (interactive) 
        (set (make-variable-buffer-local 'ispell-parser) 'tex)) 
    

    次に、あなたはまだ

    M-x flyspell-ignore-tex 
    

    を使用して、手動で呼び出すことができるか、あなたがのファイルを編集するたびに自動的にその関数を呼び出すフックを追加することができます特定のタイプ。後者は、新しく定義した関数をauto-mode-alistに追加することで行います。あなたのファイル名は、一般的に、あなたの.emacsファイルに次の行を追加し、「.rst」で終わると言う:あなたの質問の後半部分については

    (add-to-list 'auto-mode-alist '("\\.rst$" . flyspell-ignore-tex)) 
    

    :フライスペル(flyspell)モードを作り、例えば、などのより大きな領域を無視し、 reSTコメントは、容易に達成できません。あなたがフライスペルの仕方について考えるときにはっきりしています。それは単語ごとにテキストをチェックします。そのために、flyspell-wordは一度に1単語だけを調べ、バックグラウンドで実行されているispellプロセスに送信します。 ispellプロセスは辞書検索を行い、現在の単語が正しいかどうかを返します。 flyspell-wordは、現在の単語がコメントやチェックしてはならない他の領域の一部であるかどうかを毎回チェックしなければならない場合は、バッファを介した検索がかなり含まれているため、やや遅くなります。

    もちろんこれは少し賢明にアプローチし、最初に非コメント領域などを見つけて、それらの領域外の部分でのみ単語単位のチェックを行いますが、残念ながら、それは飛行儀式が実装されている方法ではありません。

    しかし、「フライ」部分がない場合、ispell-modeには、バッファのどの領域をスキップできるかをカスタマイズする仕組みがあります。これは変数ispell-skip-region-alistによって行われます。しかし、flyspell-modeはispell-modeで動作しますが、上で概説した理由から、flyspell-modeではその変数は使用されません。

    +0

    トマス、ありがとうございました!私は過去にispell-modeを使用していましたが、flyspellは今のところ私をより良く適合させます。それにもかかわらず、 'ispell-skip-region-alist'ドキュメントを読んだら、コメントの終わりを検出する関数をプログラムしなければならないと思います。私はまだEmacs Lispに精通していません。 とにかく 'ispell-parser'のやり方は依然として役立ちます。たぶん私はそれがどのように使用されているかを確認し、できる限り私自身のispell-parser tweekを作成することができます。 – manu

    +0

    Manu、あなたはおそらく、コメントの始めと終わりを検出するためのlisp関数をプログラムする必要はありません。通常は正規表現で十分でなければなりません。最初は正規表現で、正規表現と一致する正規表現です。あなたはそれらの両方を括弧で入れ、 'ispell-skip-region-alist'に追加します(私は昨日試しました、実際はそれほど難しくありません)、' rst-mode'にはすでに正規表現が含まれていますどこかを探しています。 – Thomas

    +0

    reStructuredTextでは、インデントレベルを下げるとコードセクションの終わりが検出されます。だから正規表現は助けにならないでしょう。最高の、マヌー。 – manu

    4

    スーパーユーザーでin this questionを説明したとおり、flyspell-generic-check-word-predicateを使用することもできます。

    1

    (のaspellのTEXフィルタが正確に何をしたい行うことができます - しかし、あなたは、より一般的な解決策が必要な場合は)

    私は、あなたは 、彼らの中の数字とフラグない特定の単語にフライスペル(flyspell)説得するために、次のコードを使用していますが、この種のフックを使用して特定のコンテキストに一致させることができます。

    あなたが望む位置から探し始めるので、あなたが気にしている文脈の開始/終了を後方に検索したいことがあります。

    (when "another attempt to accept certain words flyspell/ispell/aspell flags as incorrect" 
        (defun flyspell-ignore-WordNumber99-stuff/ag (beg end info) 
        (save-excursion 
         (goto-char beg) 
         (cond 
        ((or 
         (looking-at "\\bWord1\\b") 
         (looking-at "\\bWord99Foo\\b") 
         ) 
         t) 
        (t nil) 
        ) 
        ) 
        ) 
    ) 
    
    (add-hook 'flyspell-incorrect-hook 'flyspell-ignore-WordNumber99-stuff/ag) 
    
    関連する問題