自動スペルチェックのTeX対応No.08410
SouthDesk さん 14/09/30 09:37
 
自動スペルチェックを早速使ってみました。AspellにはtexモードというのがあってT
eX関係のコマンドをスキップしてくれるのですが,それを今のところ効かせることが
出来ません。私がまだ使い方を分かっていないのかもしれませんが……。Aspellだと
--mode=texというスイッチ(あるいは単に-t)だと思います。それを選べる選択肢を
付けていただけると非常に嬉しいです。せっかくAspellに備わっている機能ですので。

今のところaspellを単独で走らせた場合と秀丸内の波線の量は全然違います。秀丸内
では波線だらけです。\cite{hidemaru2013}なんていうのがあるとhidemaruの部分に
波線が入ってしまいます。\usepackage{titlesec}とかでもtitlesecに波線が入りま
す。aspellだけだとスルーしてくれるんですけど。

TeXのためだけに選択肢を設けるのがイマイチであれば,Aspellのコンフィグ (aspel
l.conf) を通じで対応するという手もあるかと思います。いまのところaspell.conf
を作成しても秀丸内での波線には影響していないように思います。mode tex と書い
ても何の反応も示しませんし。aspell.confはちゃんと読まれているようで,間違っ
たコマンドを書き込むとエラーの無限ループに陥るのですが……。

というわけで,とにかくaspellを通じてtexに対応できる道を作っていただけるとす
ごく嬉しいです。よろしくお願いします。

[ ]
RE:08410 自動スペルチェックのTeX対応No.08411
秀まるお さん 14/09/30 11:13
 
 TeX対応ですが、やろうと思うと、単純にaspell呼び出し時にオプション追加
するだけではダメで、アドイン側でもっとややこしい処理を追加しないとダメだ
と思います。

 なぜかというと、実は高速化のために秀丸スペルチェックアドイン側で、スペ
ルチェックした単語とその結果(ミスかどうか)をキャッシュしてまして、それ
のロジックに変更が必要だと思うからです。

 例えば今ちょっとチェックしたら、

    \cite{hidemaru}

 の中の"hidemaru"はスペルミスじゃない扱いのようですが、

    \xxx{hidemaru}

 みたいに書くと、その中の"hidemaru"はスペルミス扱いになります。同じ単語
でも、その前にある文字列の内容によってスペルミスかどうかが変わってしまう
ようで、だとすると、単純に単語単位でキャッシュすることが出来ないです。

 これはちょっと対応が大変そうな気がします。

 「\xxx」の部分がもし間違ってれば、そこがスペルミス扱いになってくれれば
いいんですけど、そうじゃないのですね。

 texモードの場合は全面的にキャッシュしないでおく作戦にしてしまう手はあ
りますけど…。キャッシュ無しでどのくらい遅くなるかはテストしてみないと分
からないです。

 あと、秀丸スペルチェックアドインがaspellを呼び出す場合、単語単位に区切
って呼び出すことが多いんですが、TeXモードの場合は「\xxx{yyy}」の全体単位
で区切って渡す形でいいかと思います。もしかしてファイルの先頭から末尾まで
まとめて渡さないとダメってことになると、それは対応不可になりますけども。
それは大丈夫でしょうか。その点教えて欲しいです。

[ ]
RE:08410 自動スペルチェックのTeX対応No.08412
Iranoan さん 14/09/30 14:27
 
 SouthDesk さん今日は、Iranoan です。
> 自動スペルチェックを早速使ってみました。AspellにはtexモードというのがあってT
> eX関係のコマンドをスキップしてくれるのです
 私も TeX モードがあれば、便利だと思うのですが、(マクロの時から) 次の
方法で対処しています。
・TeX のキーワードを「強調表示」に登録
  (強調定義ファイルがいくつかネットにあるので、気に入ったものを使えば OK)
・スペルチェックで強調表示を対象外にする。

[ ]
RE:08412 自動スペルチェックのTeX対応No.08413
秀まるお さん 14/09/30 14:53
 
 今ちょっと、TeXの文法を見て思ったのですが、

 \xxxx{xxxxx}

 のような文字列を見つけたらそれ全体を(分解せずに)aspellに渡せばいいの
かなぁと思いました。

 もしかして、

 \xxxx
     {xxxxx}

 みたいに改行で整形されてたらうまくaspellに(全体を)渡すことが出来なく
なりますけど、そういうのは無いですよね。

 とりあえずそのつもりでぼちぼちトライしてみます。

[ ]
RE:08413 自動スペルチェックのTeX対応No.08416
SouthDesk さん 14/09/30 16:10
 
早速のお返事ありがとうございます。

\cite{hidemaru}だとhidemaruはスルーするけど\xxxx{hidemaru}だとhidemaruがスペ
ルミスになる理由ですが,texモードのデフォルトで

cite p

と設定されているからだと思います。これは\cite{xxx}のxxxの部分はスルーせよと
いう設定です。Aspellのソースファイルのtex-filter.infoというファイルでデフォ
ルトの設定が書かれているようです。類似の設定はユーザーがaspell.confで追加で
きるようになっています。なので,その設定に秀丸も従うようにするのが1つの手か
なと思います。


> TeXモードの場合は「\xxx{yyy}」の全体単位で区切って渡す形でいいかと思います。

そんな感じでいいのかなとは思いますが,例えば章のタイトルなんかだと

\section{Secrets of Hidemaru}

なんて書くのですが,これを全部aspellに渡してどうなるのかは私には分からないの
ですが,波線はHidemaruだけになるようにしていただけると嬉しいです。全部に波線
が引かれると困るかなと。

脚注の場合は

\footnote{In fact, Hidemaru has a lot of secrets. First, ...}

という感じなので,長々と続く場合があります。これに全部波線が引かれると困りま
すね。

この\footnoteとか\sectionとかはtex-filter.infoには登場してきません。なので,
逆に言えば,tex-filter.infoに出てくるようなコマンドについてだけ一塊で拾って
くるという手があるのかなと思います。素人意見ですけど……

あと,texでは%がコメント印なので,コマンドの途中で%が挟まる場合が結構ありま
す。たとえば,\cite%
   {hidemaru}
なんてことがあります。

ご面倒をおかけしますが,喜ぶ人がたくさんいると思いますので,よろしくお願いい
たします。

[ ]
RE:08416 自動スペルチェックのTeX対応No.08417
秀まるお さん 14/09/30 18:08
 
 なんだかかなりややこしそうですが、とりあえず、「aspell --mode=tex
check XXX.txt」のようなコマンドラインでテストするのとは別に、秀丸スペル
チェックアドインが呼び出す方式でテストしてみました。

 実は秀丸スペルチェックアドインは、「check」じゃなくて、「list」または
「pipe」の指示でaspellを呼び出してまして、例えば、

    aspell --mode=tex list

 ってコマンドラインで起動して、標準入力に対して

    \cite{hidemaru} \hidemaru{hidemaru}

 のような文字列を渡すと、標準出力の方には

    hidemaru

 って単語だけが返ってきます。こうなると、この"hidemaru"が、どこの
hidemaruか判断が出来ません。

 どこだか分かるようにあえてなんとかするとしたら、「\xxx{xxxx}」のような
単位1つ1つずつ分けてaspellを呼び出してやらないといけなくなって、そうす
ると、「\xxx{xxx}」の数だけaspell.exe呼び出し&終了を繰り返す動作になっ
て、大変な労力になりそうです。

 なので、やはりこの、\xxx{xxxxx} のような部分のどこがスペルチェック対象
なのかって判断は、スペルチェックアドインの方で独自にやるしか無い気がしま
す。つまり、「--mode=tex」のオプションを使わずに、それ相当の構文解析を自
前でやることが必要だと思います。

 そうすると先の長い話になりそうな…。

 誰か、この辺の、スペルチェックする対象がどこになるのかのルールを教えて
くれないでしょうか。

 もしかしてそのルールにカスタマイズが必要だとすると、もっとややこしい話
になりますけど…。例えば「cite」とか「citep」とか「citet」とか、いろいろ
指定したりしなかったりカスタマイズできないとダメって話になると、それこそ
.aspell.confファイルみたいなので指定してもらわないといけなくなりそうでは
あります。

 あと、

   \cite%
      {hidemaru}

 のように改行が混じるケースとか途中にコメントが混じるケースがあったりす
ると、ほぼ対応不可な気がします。

[ ]
RE:08417 自動スペルチェックのTeX対応No.08418
秀まるお さん 14/09/30 18:59
 
 とりあえず単純に、

 \xxxxx

 のような「\」付き単語と、

 {....}

 の中、および

 [....]

 の中はスペルチェック対象から外すとかってことじゃダメですかね。

 あるいは、それを基本にした上で、例外ケースがあるだけとかなら対応出来そ
うな気がします。

[ ]
RE:08418 自動スペルチェックのTeX対応No.08419
Iranoan さん 14/09/30 19:09
 
 秀まるおさん今日は、Iranoan です。
>  {....}
>
>  の中、および
>
>  [....]
>
>  の中はスペルチェック対象から外すとかってことじゃダメですかね。
 これは駄目です。
 先の投稿にある \section{.....} は章や節の題名、\footnote{....} は脚
注の内容等、本文同様にスペルチェックの対象とすべき部分は多いです。他に
も文字サイズの変更等々。

[ ]
RE:08419 自動スペルチェックのTeX対応No.08421
秀まるお さん 14/10/01 11:11
 
 一応、対応しようかと思ったんですが、うちのライブラリにアップロードされ
ているTeX用の強調表示ファイルを使った上で、強調表示の部分はスペルチェッ
ク対象外すれば、それで十分なんじゃないかという話です。

 そういうことでダメでしょうか。

[ ]
RE:08421 自動スペルチェックのTeX対応No.08422
Iranoan さん 14/10/01 12:32
 
 秀まるおさん今日は、Iranoan です。
>  一応、対応しようかと思ったんですが、うちのライブラリにアップロードされ
> ているTeX用の強調表示ファイルを使った上で、強調表示の部分はスペルチェッ
> ク対象外すれば、それで十分なんじゃないかという話です。
 強調表示をスペルチェックから外せる現在の仕様で十分です。逆に強調表示
になっていなければ、例え強調表示の直後であっても、{},[] の内部は、スペ
ルチェックされないと不都合なことが多いです。

[ ]
RE:08422 自動スペルチェックのTeX対応No.08423
SouthDesk さん 14/10/04 09:40
 
秀まるおさん,Iranoanさん

>  一応、対応しようかと思ったんですが、うちのライブラリにアップロードされ
> ているTeX用の強調表示ファイルを使った上で、強調表示の部分はスペルチェッ
> ク対象外すれば、それで十分なんじゃないかという話です。

確かに結構対応できます。ただ,強調表示の中に別の強調表示が入れ子になる場合が
ありますよね。で,片方はスペルチェック対象外で,もう片方は対象内,という場合
が出てきます。例えば脚注\footnote内に\cite{hidemaru}が出てくる場合です。この
場合にどちらが重視されるかは何らかの順位で決まっているようですが,そこをユー
ザーが決めれると嬉しいなと思います。具体的には,「スペルチェックの対象」をチ
ェックするところで,優先順位を付けれるように出来ると凄く嬉しいと思います。↑
↓で上下動できる感じですね。

面倒なことをお願いして申し訳ありませんが,texユーザーでなくても需要は結構大
きいと思います。難しいのかもしれませんが,検討していただけると嬉しいです。よ
ろしくお願いいたします。

[ ]
RE:08423 自動スペルチェックのTeX対応No.08424
秀まるお さん 14/10/04 10:02
 
 とりあえず強調表示でなんとかするとしたら、\footnoteの中に\citeがあるよ
うな入れ子ケースも考えて、非常に難しい正規表現を考えて強調表示を定義する
作戦が1つ考えられるかと思います。

 「ファイルタイプ別の設定 - デザイン - 複数行コメント」の所で定義すれば、
改行をまたがった命令(?)にもうまく対応できるかもしれません。

 あと、スペルチェック対象にする命令かどうかで強調表示の種類を分けて定義
すれば、それでうまく、目的の所だけスペルチェック出来そうな気がします。

 誰かそういう強調表示定義ファイルを作ってくれればの話になるし、そもそも
実際に実現可能かどうかも分からないですけども。

 入れ子も含めたややこしい事例の具体例とか、あと、サンプルとなるTeX
ファイルの掲載場所とか教えていただければ、僕の方でも考えてみられるかなぁ
とは思います。

 仮にスペルチェックアドイン側で独自に対応するにしても、その辺のルールが
分からないと対応出来ないので、どっちにしても一回その辺のややこしい具体例
だけでも教えて欲しいです。

[ ]
RE:08423 自動スペルチェックのTeX対応No.08426
Iranoan さん 14/10/04 14:35
 
 SouthDesk さん今日は、Iranoan です。
> 強調表示の中に別の強調表示が入れ子になる場合が
> ありますよね。で,片方はスペルチェック対象外で,もう片方は対象内,という場合
> が出てきます。例えば脚注\footnote内に\cite{hidemaru}が出てくる場合です。
 有りますね。
 ただここで {} の中に } 自身、TeX の表記で \} が有ると、完全に対応さ
せるのは難しいですが、ある程度対応可能です。
 例えば
(1) \section 等の章などの名称は「行の強調」「特に強調」に多重定義
(2) \footnote など {} の内部がスペルチェックの対象になるキーワードは、
    「特に強調」
(3) \begin{...} や \end{...} の {...} の部分は、「強調表示」
(4) \cite など {} 内部もスペルチェックの対象から外したいキーワードは、
    「\\cite\{([^\}]|\\})+\}」を正規表現で「特に強調」
    場合によっては、「特に強調 4」等もっとも優先順位の高い物に
とします。ここで「特に強調」を使っているのは、「行の強調」より優先させ
たいためです。
 後は、「強調表示」「特に強調」をスペル・チェックの対象から外します。

 要は
> 具体的には,「スペルチェックの対象」をチ
> ェックするところで,優先順位を付けれるように出来ると凄く嬉しいと思います。↑
> ↓で上下動できる感じですね。
を強調表示の優先順位で対処してやります。

[ ]