テフ(TeX)のラベルのダブリを自動的に検No.23500
Knotopologynn さん 07/09/06 15:39
 
何時も,お世話になります.
Windows XP で秀丸エディタV6.03 を順調に使わせて頂いております.
テフ(TeX)のファイルでラベル(\label{abcd})を大量に使います.
このラベル \label{abcd} のダブリ(重複)を下記のような方法で検出したいのです
が,可能でしょうか?

(1):ファイルの一番はじめにあるラベルを \label{01} として,\label{01} の次に
あるラベルが \label{01} でない場合は,その次の
ラベルを自動的に調べる.

(2):一番はじめにあるラベル \label{01} 以外に,ファイルのどこかに同じラベル
\label{01} が重複しているときは,それを検知した時点で警報を出し,重複してい
るラベルの場所へカーソルを移す.

(3):一番はじめにあるラベル \label{01} が重複していない場合は,二番目のラベ
ル \label{02} を自動的に取得し,ラベル \label{02} の重複を(1),(2)と同様の手
順で自動的に検索する.

(4):ファイル内のすべてのラベルが重複していないことを確認したら,停止する.

以上の様なことは可能でしょうか? 教えて下さい.宜しくお願い致します.

[ ]
RE:23500 テフ(TeX)のラベルのダブリをNo.23501
秀丸担当 さん 07/09/06 17:12
 

>このラベル \label{abcd} のダブリ(重複)を下記のような方法で検出したいのです
>が,可能でしょうか?

マクロを作れば可能だと思います。
以下のような感じでしょうか。TeXの文法がよくわからないのでこれでいいのか
わかりません。
既に誰か作っていそうな気もしますが…

$a1 = "";
while(1){
  searchdown "\\\\label{.+?}", regular, hilight;
  if(result==false) {
    gofileend;
    break;
  }
  $a2 = gettext(foundtopx,foundtopy,foundendx,foundendy);
  if( $a1 == $a2 ) break;
  $a1 = $a2;
}

[ ]
RE:23501 テフ(TeX)のラベルのダブリをNo.23502
秀丸担当 さん 07/09/06 17:27
 

すみません。(2)の条件が入ってなかったです。
(2)もやると少し変えないといけないかも。

[ ]
RE:23501 テフ(TeX)のラベルのダブリをNo.23503
Knotopologynn さん 07/09/06 17:35
 
秀丸担当さま
ご指導,ありがとうございました.お教えの通り,下記のマクロでテストしましたと
ころ,見事に成功しました.

>$a1 = "";
>while(1){
>  searchdown "\\\\label{.+?}", regular, hilight;
>  if(result==false) {
>    gofileend;
>    break;
>  }
>  $a2 = gettext(foundtopx,foundtopy,foundendx,foundendy);
>  if( $a1 == $a2 ) break;
>  $a1 = $a2;
>}

[ ]
RE:23501 テフ(TeX)のラベルのダブリをNo.23504
アルビレオ さん 07/09/06 18:52
 
ユーザ−のアルビレオです。
わたしもTeXについてはあまり知らないんですが…

>$a1 = "";
>while(1){
>  searchdown "\\\\label{.+?}", regular, hilight;
>  if(result==false) {
>    gofileend;
>    break;
>  }
>  $a2 = gettext(foundtopx,foundtopy,foundendx,foundendy);
>  if( $a1 == $a2 ) break;
>  $a1 = $a2;
>}

これだと同じラベルが連続して出てきたときしか検出できませんね。
ダメなパターン
 \label{01}
 \label{02}
 \label{01}
 \label{02}

テストしていませんが、こんな感じにすれば大丈夫じゃないかと思います。

disabledraw;
gofiletop;
while(1){
  searchdown2 "\\\\label{.+?}", regular;
  if(result==false) {
    gofileend;
    break;
  }
  $a1 = gettext(foundtopx,foundtopy,foundendx,foundendy);
  moveto foundendx, foundendy;
  searchdown $a1, hilight;
  if(result==true) break;
}
enabledraw;

[ ]
RE:23504 テフ(TeX)のラベルのダブリを自No.23506
Iranoan さん 07/09/06 19:48
 
 Knotopologynn さん今日は、Iranoan です。
> これだと同じラベルが連続して出てきたときしか検出できませんね。
 これに加えて、\input, \include を使ってファイルが分割している場合、
単純な検索では上手くいきません。

 秀丸のマクロでできないことは無いですが、素直にタイプセットして、log
ファイルに
> LaTeX Warning: Label `label-string' multiply defined.

> LaTeX Warning: Citation `label-string' multiply defined.
といった記述が無いが確認したほうが早い気がします。

[ ]
RE:23506 テフ(TeX)のラベルのダブリを自No.23508
Knotopologynn さん 07/09/07 10:17
 
Iranoanさん ご指摘ありがとうございます.Knotopologynn です。

>> LaTeX Warning: Label `label-string' multiply defined.
>や
>> LaTeX Warning: Citation `label-string' multiply defined.
>といった記述が無いが確認したほうが早い気がします。

TeX の log ファイルを見ましたところ,上記の

  LaTeX Warning: Label `label-string' multiply defined.

が記録されていました.

[ ]
RE:23504 テフ(TeX)のラベルのダブリをNo.23509
Knotopologynn さん 07/09/07 10:40
 
アルビレオさん,初めまして,Knotopologynn です.
ご指導をありがとうございます.ご指摘の通りでした.

>これだと同じラベルが連続して出てきたときしか検出できませんね。
>ダメなパターン
> \label{01}
> \label{02}
> \label{01}
> \label{02}
>
>テストしていませんが、こんな感じにすれば大丈夫じゃないかと思います。
>
>disabledraw;
>gofiletop;
>while(1){
>  searchdown2 "\\\\label{.+?}", regular;
>  if(result==false) {
>    gofileend;
>    break;
>  }
>  $a1 = gettext(foundtopx,foundtopy,foundendx,foundendy);
>  moveto foundendx, foundendy;
>  searchdown $a1, hilight;
>  if(result==true) break;
>}
>enabledraw;

をテストしましたところ,
 \label{01}
 \label{02}
 \label{01}
 \label{02}
の場合でも検出が出来ました.使わせて頂きます.助かりました.

[ ]
RE:23508 テフ(TeX)のラベルのダブリを自No.23510
Iranoan さん 07/09/07 14:49
 
 Knotopologynn さん今日は、Iranoan です。
> TeX の log ファイルを見ましたところ,上記の
>
>   LaTeX Warning: Label `label-string' multiply defined.
>
> が記録されていました.
 それでは、この label-string が重複しているので、それについてチェック
すればよいです。秀丸でやるなら、末尾の様なマクロです。
//------------------------------------------------------------
if( filetype != ".log" ){
  message "Open log file!";
  endmacro;
}
$s = searchbuffer;
#s = searchoption;
searchdown2
  "(?<=LaTeX Warning: (Label|Citation) `).+?(?=' multiply defined\\.)",
  regular;
if( !result ){
  message "Not find `multiply defined'.";
  setsearch $s, #s;
  endmacro;
}
$label = gettext( foundtopx, foundtopy, foundendx, foundendy );
saveupdatedall;//強制的に、更新ファイルは全保存
grep "\\\\\\w\\{" + $label + "\\}", "*.tex", ".", regular, hilight;
//↑参照元も確認したほうが良いので、\label{} に限定しない
title "`" + $label + "' multiply defined.";
title "`" + $label + "' multiply defined.", 3;
title -1;
title -1,3;

[ ]
RE:23510 テフ(TeX)のラベルのダブリを自No.23513
Knotopologynn さん 07/09/07 16:33
 
Iranoan さん. Knotopologynn です.
教えていただいた下記のマクロを使わせていただきます.
重複ラベルの検索に便利です.log ファイルでこのマクロを実際に実行
してみましたところ,見事に成功しました.素晴らしいです.

ファイル名  (行番号)  数式環境  重複ラベル

のように「重複ラベル」が表示されるので「重複ラベル」の修正に
威力を発揮して,非常に能率が上がり,とても助かります.
ご協力,感謝します.ありがとうございました.

>if( filetype != ".log" ){
>  message "Open log file!";
>  endmacro;
>}
>$s = searchbuffer;
>#s = searchoption;
>searchdown2
>  "(?<=LaTeX Warning: (Label|Citation) `).+?(?=' multiply defined\\.)",
>  regular;
>if( !result ){
>  message "Not find `multiply defined'.";
>  setsearch $s, #s;
>  endmacro;
>}
>$label = gettext( foundtopx, foundtopy, foundendx, foundendy );
>saveupdatedall;//強制的に、更新ファイルは全保存
>grep "\\\\\\w\\{" + $label + "\\}", "*.tex", ".", regular, hilight;
>//↑参照元も確認したほうが良いので、\label{} に限定しない
>title "`" + $label + "' multiply defined.";
>title "`" + $label + "' multiply defined.", 3;
>title -1;
>title -1,3;

[ ]
RE:23513 テフ(TeX)のラベルのダブリを自No.23515
Iranoan さん 07/09/08 13:10
 
 Knotopologynn さん今日は、Iranoan です。
> ファイル名  (行番号)  数式環境  重複ラベル
>
> のように「重複ラベル」が表示されるので「重複ラベル」の修正に
> 威力を発揮して,非常に能率が上がり,とても助かります.
 ただ一つ注意が必要です。参考文献に利用する \cite はラベルを「,」で区
切って複数指定できるのですが、これには対応していない点です。

[ ]
RE:23515 テフ(TeX)のラベルのダブリを自No.23516
Knotopologynn さん 07/09/08 16:15
 
Iranoan さん,Knotopologynn です.
了解いたしました.わざわざ,ご指摘,ありがとうございました.

> ただ一つ注意が必要です。参考文献に利用する \cite はラベルを「,」で区
>切って複数指定できるのですが、これには対応していない点です。

[ ]