同じ文字列を自動的に検出したい!No.27746
Knotopologynn さん 10/03/03 17:15
 
Windows XP で秀丸エディタV7.07 を使わせて頂いております.

秀丸エディタで作成した「ファイルA」の記述中に同じ文字列として,\label{ABC12
3} が
2つ以上あった場合に,\label{・・・} などと指定して,2つ以上ある \label{A
BC123}
を検出する方法はあるでしょうか? 欲をいいますと,2つ以上ある場合は,

\label{ABC123}
\label{ABC234}
\label{ABC345}
・・・・・・・・・・
\label{ABC456}
\label{ABC567}

などと,列挙されると,有り難いのですが.いかがでしょう.出来るでしょうか?
ご指導下さい.おねがいいたします.

なお,\label{ABC123} と \label{ABC123}%%% のようになっていても
\label{ABC123} として,検出したいのですが,よろしくおねがいします.

[ ]
RE:27746 同じ文字列を自動的に検出したいNo.27747
Iranoan さん 10/03/03 18:14
 
 Knotopologynn さん今日は、一ユーザの Iranoan です。
> \label{・・・} などと指定して,2つ以上ある \label{A
> BC123}
> を検出する方法はあるでしょうか? 欲をいいますと,2つ以上ある場合は,
>
> \label{ABC123}
> \label{ABC234}
<snip>
> などと,列挙されると,有り難いのですが.いかがでしょう.出来るでしょうか?
 マクロを書けば、いろいろと細かい事まで出来ますが、「単語補完」を使う
のが最も手っ取り早いと思います。
(1) 「ファイルタイプ別の設定」→「その他」→「単語補完」
(2) 「単語補完の検索対象」の「現在編集中のテキスト」を ON
(3)  [詳細] の各種設定はお好みで設定
(4)  [さらに...] から
      o 単語の先頭文字 :\{
      o 単語の途中の文字 :{
      o 単語の終了文字 :}
      をそれぞれ追加し、「手動でのさらなる補完」の「記号」を ON
にすると、かなりご希望に近いものになると思います。

[ ]
RE:27747 同じ文字列を自動的に検出したいNo.27748
Knotopologynn さん 10/03/03 19:26
 
 Iranoan さん

ご指導,ありがとうございます. 早速,やってみます.

> マクロを書けば、いろいろと細かい事まで出来ますが、「単語補完」を使う
>のが最も手っ取り早いと思います。
>(1) 「ファイルタイプ別の設定」→「その他」→「単語補完」
>(2) 「単語補完の検索対象」の「現在編集中のテキスト」を ON
>(3)  [詳細] の各種設定はお好みで設定
>(4)  [さらに...] から
>      o 単語の先頭文字 :\{
>      o 単語の途中の文字 :{
>      o 単語の終了文字 :}
>      をそれぞれ追加し、「手動でのさらなる補完」の「記号」を ON
>にすると、かなりご希望に近いものになると思います。

[ ]
RE:27747 同じ文字列を自動的に検出したいNo.27754
Knotopologynn さん 10/03/04 15:36
 
> マクロを書けば、いろいろと細かい事まで出来ますが、「単語補完」を使う
>のが最も手っ取り早いと思います。
>(1) 「ファイルタイプ別の設定」→「その他」→「単語補完」
>(2) 「単語補完の検索対象」の「現在編集中のテキスト」を ON
>(3)  [詳細] の各種設定はお好みで設定
>(4)  [さらに...] から
>      o 単語の先頭文字 :\{
>      o 単語の途中の文字 :{
>      o 単語の終了文字 :}
>      をそれぞれ追加し、「手動でのさらなる補完」の「記号」を ON
>にすると、かなりご希望に近いものになると思います。


「単語補完」の設定として,(1),(2),(3),(4)を設定して,
[Alt]+[Enter]で「単語補完」の操作しましたが,同じ \label{ABC123} が
2つあっても,何も反応しませんでした.なにか設定・操作方法が悪いのでしょうか?
また,別の方法として,
秀丸エディタの「ファイルA」に記述されている全ての \label{・・・} を自動的に
リストアップすることは,簡単でしょうか?

[ ]
RE:27754 同じ文字列を自動的に検出したいNo.27755
ぱと さん 10/03/04 16:11
 
Knotopologynn さん

秀丸メールユーザーのぱとと申します。

>[Alt]+[Enter]で「単語補完」の操作しましたが,同じ \label{ABC123} が
>2つあっても,何も反応しませんでした.なにか設定・操作方法が悪いのでしょう
>か?

Knotopologynn さん が希望していることと、 Iranoan さんが、アドバイスしたこ
との内容に食い違いがあるのではないかと思います。

Knotopologynn さんがやりたいのは、

\label{ABC123}

というような形式の文字列をテキストファイルの中から抽出して、しかも同じもの
があったらそれを数えるとかってことですよね?

そうだとしたら、そういう作業は、エディタそのもの+マクロなどでもできるかも
しれませんが、どちらかというと、AWK とか、GREP とかのいわゆるテキスト処理
ツールの役割だと思います。

秀丸単品でやるとしたら、まず、秀丸の Grep 機能で該当する文字列を別ファイル
に書き出して、そちらの結果のファイルに対してマクロで数えるって感じでしょう
か。

いずれにせよエディタの「操作」だけでできることではないと思います。

----
ぱと

[ ]
RE:27755 同じ文字列を自動的に検出したいNo.27756
Knotopologynn さん 10/03/04 16:30
 
ぱとさん コメントをありがとうございます.
以下を参考にして,やってみます.

>Knotopologynn さんがやりたいのは、
>
>\label{ABC123}
>
>というような形式の文字列をテキストファイルの中から抽出して、しかも同じもの
>があったらそれを数えるとかってことですよね?
>
>そうだとしたら、そういう作業は、エディタそのもの+マクロなどでもできるかも
>しれませんが、どちらかというと、AWK とか、GREP とかのいわゆるテキスト処理
>ツールの役割だと思います。
>
>秀丸単品でやるとしたら、まず、秀丸の Grep 機能で該当する文字列を別ファイル
>に書き出して、そちらの結果のファイルに対してマクロで数えるって感じでしょう
>か。
>
>いずれにせよエディタの「操作」だけでできることではないと思います。
>

[ ]
RE:27754 同じ文字列を自動的に検出したいNo.27758
秀丸担当 さん 10/03/04 17:45
 

>「単語補完」の設定として,(1),(2),(3),(4)を設定して,
>[Alt]+[Enter]で「単語補完」の操作しましたが,同じ \label{ABC123} が
>2つあっても,何も反応しませんでした.なにか設定・操作方法が悪いのでしょう
>か?

この方法は不要だったかもしれませんが、ここについてだけコメントさせていた
だくと、[その他]→[ファイルタイプ別の設定]→[その他]→[単語補完]の「詳細
(X)...」を押して出てくるダイアログで、「単語の種類」を「カスタム」にする
と、Iranoanさんの言われている通りの設定が有効になると思います。

これで、「\label{ABC123}」を範囲選択してAlt+Enterで候補が出ました。
「\label」を範囲選択してAlt+Enterで全てが候補に挙がりました。

[ ]
RE:27758 同じ文字列を自動的に検出したいNo.27761
Knotopologynn さん 10/03/04 19:29
 
>
>この方法は不要だったかもしれませんが、ここについてだけコメントさせていた
>だくと、[その他]→[ファイルタイプ別の設定]→[その他]→[単語補完]の「詳細
>(X)...」を押して出てくるダイアログで、「単語の種類」を「カスタム」にする
>と、Iranoanさんの言われている通りの設定が有効になると思います。
>
>これで、「\label{ABC123}」を範囲選択してAlt+Enterで候補が出ました。
>「\label」を範囲選択してAlt+Enterで全てが候補に挙がりました。

秀丸担当さん コメント ありがとうございます.
早速,実行してみます.

[ ]
RE:27758 同じ文字列を自動的に検出したいNo.27762
Knotopologynn さん 10/03/04 20:12
 
>
>この方法は不要だったかもしれませんが、ここについてだけコメントさせていた
>だくと、[その他]→[ファイルタイプ別の設定]→[その他]→[単語補完]の「詳細
>(X)...」を押して出てくるダイアログで、「単語の種類」を「カスタム」にする
>と、Iranoanさんの言われている通りの設定が有効になると思います。
>
>これで、「\label{ABC123}」を範囲選択してAlt+Enterで候補が出ました。
>「\label」を範囲選択してAlt+Enterで全てが候補に挙がりました。


\label を範囲選択して Alt+Enter とすると,候補は挙がりますが,
例えば,

 \label{ABC123}
 \label{ABC123}
 \label{ABC123}

 \label{ABC234}
 \label{ABC234}
 \label{ABC234}

であっても, \label{ABC123} と \label{ABC234} が表示されるだけで
ダブっていることが検出されません.上記のように,\label{ABC123} と \label{A
BC234} が
3つづつあっても,候補が1つ挙がるのみですが・・・.
目的は,重複している \label{ABC123} らを検出したいのです.
重複していない \label{ABC333} などがあっても,これは検出する必要はないので
すが.

言葉足らずで,すみませんでした.

今,検索(S)→ grep の実行(G)で,\label を入力し,\label{・・・}の一
覧表を
作ろうとしています.うまくゆかなければ,また,ご相談しますので,よろしくおね
がいします.

[ ]
RE:27762 同じ文字列を自動的に検出したいNo.27764
山紫水明 さん 10/03/04 22:09
 
 Knotopologynnさん,

>目的は,重複している \label{ABC123} らを検出したいのです.
>重複していない \label{ABC333} などがあっても,これは検出する必要はな
>いのですが.

 ライブラリにある拙作マクロ「重複行を削除する簡易マクロ」は重複行を削除
するマクロですが,その最新版には,削除した行を表示するオプションがありま
す。
 行ごとの処理ですので,目的とされることとずれるかもしれませんが,よろし
ければお試しください。最新版は,
  http://homepage2.nifty.com/12sun/sansui.html
に置いています。
     では, (^^)/~
                                    山紫水明(ユーザー)
                                    SANSHISUIMEI

[ ]
RE:27762 同じ文字列を自動的に検出したいNo.27765
Iranoan さん 10/03/04 22:17
 
 Knotopologynn さん今日は、一ユーザの Iranoan です。
> 目的は,重複している \label{ABC123} らを検出したいのです.
 完全に読み間違えていました。m(_|_)m。

 実際に要望の処理をするなら、マクロでやるしかないでしょう。
 ただ実際にマクロを作るなら、これは LaTeX でしょうから、\input,
\include されている場合も考えなければいけないので、一度はタイプセット
され *.aux が存在する事を前提にした方が効率が良い気がします。

 ##ちょっと書いてみようかな。

[ ]
RE:27764 同じ文字列を自動的に検出したいNo.27768
Knotopologynn さん 10/03/05 10:30
 
> ライブラリにある拙作マクロ「重複行を削除する簡易マクロ」は重複行を削除
>するマクロですが,その最新版には,削除した行を表示するオプションがありま
>す。
> 行ごとの処理ですので,目的とされることとずれるかもしれませんが,よろし
>ければお試しください。最新版は,
>  http://homepage2.nifty.com/12sun/sansui.html
>に置いています。

山紫水明さん
コメントをありがとうございます.上記の最新版をゆっくり,見させていただきます.

[ ]
RE:27765 同じ文字列を自動的に検出したいNo.27770
Knotopologynn さん 10/03/05 11:17
 
Iranoan さん,今日は,仰せの通り, LaTeX です.実を言いますと,
\input で使用する2ファイル:aaa.tex と bbb.tex があり,
aaa.tex で使用したラベル \label{aaa456} と bbb.tex の中で使用したラベルも \l
abel{aaa456}
であるような場合を検出したいのです.つまり,

   ファイル aaa.tex      ファイル bbb.tex
        ↓             ↓
  ラベル \label{aaa123}   ラベル \label{bbb123}
      \label{aaa456}       \label{aaa456} 重複
      \label{aaa234}       \label{bbb234}
      \label{aaa345}       \label{bbb345}
      \label{aaa222}       \label{aaa222} 重複
      \label{aaa333}       \label{bbb333}

のように,ファイル aaa.tex の \label{aaa456} と\label{aaa222}がファイル bbb.
tex にもあります.
このような場合の重複ラベルを検出したいのが主目的なのですが,混乱させるような
事を申し上げて済みません.
つまり,二つの場合を考えています.

(1): 1つのファイルの中の重複しているラベルを検出.
(2): 2つのファイルの中で互いに重複しているラベルの検出.

\include は,\input の場合と同様です.

いつも,お手数をお掛けして,ご指導に感謝いたしております.
以前,教えていただいた事柄は,今も役にたっております.



> Knotopologynn さん今日は、一ユーザの Iranoan です。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> ##ちょっと書いてみようかな。

[ ]
RE:27770 同じ文字列を自動的に検出したいNo.27771
ぱと さん 10/03/05 11:32
 
Knotopologynn さん

秀丸メールユーザーのぱとと申します。

>のように,ファイル aaa.tex の \label{aaa456} と\label{aaa222}がファイル bbb.
>tex にもあります.
>このような場合の重複ラベルを検出したいのが主目的なのですが,混乱させるような
>事を申し上げて済みません.

TeX を使われているのなら、テキスト処理ツールの利用も抵抗がないかもしれませ
んね。

秀丸マクロ、テキスト処理ツールのいずれでもお考えのようなことはできるかもし
れませんが、Tex のソースの中で使っている label の管理ということまで考えると、
私だったら、ソースを Grep した結果を エクセルに取り込んで一覧で管理しますね。
これだと数えるのも楽ですし重複チェックなども簡単にできます。

----
ぱと

[ ]
RE:27770 同じ文字列を自動的に検出したいNo.27772
Iranoan さん 10/03/05 12:03
 
 Knotopologynn さん今日は、一ユーザの Iranoan です。
> \input で使用する2ファイル:aaa.tex と bbb.tex があり,
> aaa.tex で使用したラベル \label{aaa456} と bbb.tex の中で使用したラベルも \l
> abel{aaa456}
 全ての処理をマクロにする事も可能ですが、私の使い方だと、入力時はレイ
アウトも含めそれ程気にしないで、後から確認するので、*.log が既にある事
が多いので、それを前提としたマクロを書いてみました。取り敢えず、
http://homepage3.nifty.com/iranoan/hidemaru/macro/tex/multilabel.zip
に置いておきます。チェックは完全ではありませんが、私が使う分にはこれで
十分かなと(^^;。
> (1): 1つのファイルの中の重複しているラベルを検出.
> (2): 2つのファイルの中で互いに重複しているラベルの検出.
の区別はありません。サブフォルダを含め、全ての *.tex に跨って処理して
います。

[ ]
RE:27762 同じ文字列を自動的に検出したいNo.27773
あべのり さん 10/03/05 12:44
 
あべのり@秀丸ユーザです.

すでにIranoanさんが書かれているので,そちらでもよいと思いますが…….

>今,検索(S)→ grep の実行(G)で,\label を入力し,\label{・・・}の一
>覧表を
>作ろうとしています.うまくゆかなければ,また,ご相談しますので,よろしくお
>ねがいします.

あくまでgrep的な考えにこだわってみました.秀丸のgrepを使ってもよいのですが,
自作のDLLにgrep的な機能を入れていたので,そちらでやってみました.
http://www.ms.u-tokyo.ac.jp/~abenori/mycreate/hidemaru.html#MACRODLL
からmacrodll.dllを落としてマクロと同じフォルダに入れておいてください.

-------------
loaddll currentmacrodirectory + "\\macrodll.dll";
##_ = dllfunc("SETHMJREDLL",hidemarudir + "\\HMJRE" + ".DLL");


$file[0] = "C:\\a.tex";$file[1] = "C:\\b.tex";
##i = 0;##n = 0;
while($file[##i] != ""){
 ##_ = + dllfunc("COLLECTSTR_COLLECT",$file[##i],"\\\\label\\{(.*)\\}","\\1");
 ##i = ##i + 1;
}
##k = 0;
##i = 0;
##n = dllfunc("COLLECTSTR_GETDATASIZE");
while(##i < ##n){
 $$l = dllfuncstr("COLLECTSTR_GETSTR",##i);
 $$n = dllfuncstr("HASHSTRSTR_GET",$$l);
 if($$n == "h"){
  ##_ = dllfunc("HASHSTRSTR_SET",$$l,"t");
  $$out[##k] = $$l;
  ##k = ##k + 1;
 }else if($$n == "")##_ = dllfunc("HASHSTRSTR_SET",$$l,"h");
 ##i = ##i + 1;
}

freedll;
newfile;
disabledraw;
##i = 0;
while(##i < ##k){
 insert $$out[##i] + "\n";
 ##i = ##i + 1;
}
enabledraw;
endmacro;
-------------

$fileに調べたいファイルを入れておけば調べてくれるはずです.

ところで実際にやりたいことは,一つのファイルから\input/\includeされているフ
ァイルすべてでこれをすることだったりしないんでしょうか?

[ ]
RE:27771 同じ文字列を自動的に検出したいNo.27775
Knotopologynn さん 10/03/05 13:04
 
ぱとさん Knotopologynnです.

エクセルは,ほとんど使ったことがないので,試すことが出来ません.
悪しからず,ご了承のほど・・・.

>TeX を使われているのなら、テキスト処理ツールの利用も抵抗がないかもしれませ
>んね。
>
>秀丸マクロ、テキスト処理ツールのいずれでもお考えのようなことはできるかもし
>れませんが、Tex のソースの中で使っている label の管理ということまで考えると、
>私だったら、ソースを Grep した結果を エクセルに取り込んで一覧で管理しますね。
>これだと数えるのも楽ですし重複チェックなども簡単にできます。

[ ]
RE:27772 同じ文字列を自動的に検出したいNo.27777
Knotopologynn さん 10/03/05 13:13
 
 Iranoan さん Knotopologynn です.

大変,ありがとうございます.早速,ZIP ファイルを保存しました.
これから,使わせていただきます.


> 全ての処理をマクロにする事も可能ですが、私の使い方だと、入力時はレイ
>アウトも含めそれ程気にしないで、後から確認するので、*.log が既にある事
>が多いので、それを前提としたマクロを書いてみました。取り敢えず、
>http://homepage3.nifty.com/iranoan/hidemaru/macro/tex/multilabel.zip
>に置いておきます。チェックは完全ではありませんが、私が使う分にはこれで
>十分かなと(^^;。
>> (1): 1つのファイルの中の重複しているラベルを検出.
>> (2): 2つのファイルの中で互いに重複しているラベルの検出.
>の区別はありません。サブフォルダを含め、全ての *.tex に跨って処理して
>います。

[ ]
RE:27773 同じ文字列を自動的に検出したいNo.27780
Knotopologynn さん 10/03/05 14:04
 
あべのりさん,コメントをありがとうございます.Knotopologynnです.
仰せの通りです.
一つのファイル(主ファイル)から\input/\includeされているファイル(サブファイ
ル)のすべてでこれをすることが最終的な目的です.
「主ファイル」に新しく,\label{***} を付けることもありますし,
1つの「サブファイル」を何度も使い回すことがあります.
新しく \label{***} を付ける時は,重複しないように年月日を記号化して使います
から,他との重複はありませんが,「サブファイル」を使い回すときに重複が発生す
る事があります.「主ファイル」を作成するとき,同時に「サブファイル」も決まっ
て来ますから,その時,このチェックをします.重複が分かったら,そこで,\label
{***},\eqref{***},\ref{***} などを同時に直します.

ご指導いただきました,マクロは,早速,使わせていただきます.
助かります,ありがとうございます.ご協力に感謝いたします.


>あくまでgrep的な考えにこだわってみました.秀丸のgrepを使ってもよいのですが,
>自作のDLLにgrep的な機能を入れていたので,そちらでやってみました.
>http://www.ms.u-tokyo.ac.jp/~abenori/mycreate/hidemaru.html#MACRODLL
>からmacrodll.dllを落としてマクロと同じフォルダに入れておいてください.
>-------------
>ところで実際にやりたいことは,一つのファイルから\input/\includeされているフ
>ァイルすべてでこれをすることだったりしないんでしょうか?

[ ]
RE:27780 同じ文字列を自動的に検出したいNo.27781
あべのり さん 10/03/05 14:54
 
>一つのファイル(主ファイル)から\input/\includeされているファイル(サブファイ
>ル)のすべてでこれをすることが最終的な目的です.

それでしたら,\input/\includeを列挙することも自動化すればよいのではないかと
思いました.
# Iranoanさんの方法ならばそちらも達成できていますが.

さっきのを使うと次のようにできます.

loaddll macrodir + "\\fortex\\sub\\macrodll.dll";

##_ = dllfunc("SETHMJREDLL",hidemarudir + "\\HMJRE" + ".DLL");
$file = "C:\main.tex";
##_ = dllfunc("TEXPROJECT_CREATEFILELIST",$file);
##n = dllfunc("TEXPROJECT_COLLECT","","\\\\label\\{(.*)\\}","\\1");
##k = 0;
##i = 0;
while(##i < ##n){
 $$l = dllfuncstr("TEXPROJECT_COLLECTGETSTR",##i);
 $$n = dllfuncstr("HASHSTRSTR_GET",$$l);
 if($$n == "h"){
  $$out[##k] = $$l;
  ##_ = dllfunc("HASHSTRSTR_SET",$$l,"t");
  ##k = ##k + 1;
 }else if($$n == "")##_ = dllfunc("HASHSTRSTR_SET",$$l,"h");
 ##i = ##i + 1;
}

freedll;
newfile;
disabledraw;
##i = 0;
while(##i < ##k){
 insert $$out[##i] + "\n";
 ##i = ##i + 1;
}
enabledraw;
endmacro;

$fileに親ファイルをいれてください.
単に一覧だけ出すようにしていますが,もう少しいじるとどのファイルの何行目にラ
ベルがあるかも出力するようにできます.

[ ]
RE:27781 同じ文字列を自動的に検出したいNo.27782
Knotopologynn さん 10/03/05 16:07
 
>単に一覧だけ出すようにしていますが,もう少しいじるとどのファイルの何行目に
>ラベルがあるかも出力するようにできます.


あべのりさん,たびたび,ありがとうございます. Knotopologynnです.
お教えいただいているマクロのプログラム内容は,よく理解はできていませんが,何
とか使ってみます.

[ ]