TeXラベルを自動的に付けたいNo.22271
Knotopologynn さん 06/12/02 18:09
 
秀丸エディタでTeXソースファイルを作成するとき,
ラベル(\label{abcd})を大量に使います.
このラベルは絶対に同じものがあってはならないため,
\label{abcd}の文字列`abcd'を選ぶのに神経を使います.
この文字列`abcd'を秀丸エディタ上で自動的に付けられないものでしょうか?
現在,私が実行している方法は,例えば,

            \label{e1740fkb}   や   \label{d1742flc}

のようなものです.文字列`e1740fkb'や`d1742flc'の e は数式,
d は定義で,1740 と 1742 はラベルを付けるときの時刻です.
fkb と flc はラベルを付けるときの日付です.日付と時刻を
用いる事により絶対に同じ文字列は出来ません.fkb の f は
2006年を,k は11月を,b は2日を表します.
1月,2月,...12月を a b...l で,1日,2日,3日,...30日,
31日を a, b, c ... zb, ze にしています.
これを秀丸エディタ上で自動的に付けることは出来ないもので
しょうか?
数式や定義や定理などを多用する理工系の論文などを書いている
人ならば,このことを痛感すると思います.
この場には秀丸エディタの名人が大勢いることですし,何か良い方法
を考え出していただけると助かります.
秀丸エディタ名人の方々,どうぞ,宜しくお願いします.
                                     Knotopologynn

[ ]
RE:22271 TeXラベルを自動的に付けたいNo.22272
あべのり さん 06/12/02 18:39
 
あべのり@ユーザです.

以下に示すマクロでどうでしょう?
・その行がコントロールシークエンスから始まっていたら,そのコントロールシーク
エンスを参考にラベル付けを決める.
・そうでなければ今いる環境に応じてラベルを決める.
環境はネストには対応していません.(一番近くのbeginを見てるだけです.)
どの環境にどの文字を当てるかなどは三行目以降で設定してください.

ところで,秀丸の話から外れますが,このようなラベル付けをしていると引用する時
に困りません?
# 自分は定理自体の名前や「これこれのための定理」とかいうようにつけています.

--------------------------
call Init;

if(##return == 0)endmacro;
else if(##return == 2){
 if($cmd == "section")$label = "s";
}else{//環境内
 if($env == "equation")$label = "e";
 else if($env == "definition")$label = "d";
 else if($env == "theorem")$label = "t";
}



$label = $label + hour + minute + char(val(month) - 1 + 'a');
if(val(day) <= 26)$label = $label + char(val(day) - 1 + 'a');
else $label = "z" + char(val(day) - 27 + 'a');
insert "\\label{" + $label + "}";
endmacro;



Init:
 $buf = searchbuffer;
 #opt = searchoption;

 ##x = x;##y = y;
 disabledraw;
 searchup "\\\\begin\\{(.*?)\\}",regular;
 if(result){
  #envl = ytolineno(foundtopx,foundtopy);
  #envc = xtocolumn(foundtopx,foundtopy);
  $env = gettext(foundtopx,foundtopy,foundendx,foundendy);
  ##r = strstr($env,"{");
  $env = midstr($env,##r + 1,strlen($env) - ##r - 2);
 }
 moveto ##x,##y;
 golinetop2;
 if(code == '\\'){
  right;
  ##nx = x;##ny = y;
  #cmdl = lineno;
  while(code != '{' && lineno == #cmdl)right;
  $cmd = gettext(##nx,##ny,x,y);
 }
 moveto ##x,##y;
 enabledraw;
 if(#envl == 0 && #cmdl == 0)return 0;
 else if(#envl > #cmdl || (#envl == #cmdl && #envc >= #cmdc))return 1;
 else return 2;
---------------------------




>秀丸エディタでTeXソースファイルを作成するとき,
>ラベル(\label{abcd})を大量に使います.
>このラベルは絶対に同じものがあってはならないため,
>\label{abcd}の文字列`abcd'を選ぶのに神経を使います.
>この文字列`abcd'を秀丸エディタ上で自動的に付けられないものでしょうか?
>現在,私が実行している方法は,例えば,
>
>            \label{e1740fkb}   や   \label{d1742flc}
>
>のようなものです.文字列`e1740fkb'や`d1742flc'の e は数式,
>d は定義で,1740 と 1742 はラベルを付けるときの時刻です.
>fkb と flc はラベルを付けるときの日付です.日付と時刻を
>用いる事により絶対に同じ文字列は出来ません.fkb の f は
>2006年を,k は11月を,b は2日を表します.
>1月,2月,...12月を a b...l で,1日,2日,3日,...30日,
>31日を a, b, c ... zb, ze にしています.
>これを秀丸エディタ上で自動的に付けることは出来ないもので
>しょうか?
>数式や定義や定理などを多用する理工系の論文などを書いている
>人ならば,このことを痛感すると思います.
>この場には秀丸エディタの名人が大勢いることですし,何か良い方法
>を考え出していただけると助かります.
>秀丸エディタ名人の方々,どうぞ,宜しくお願いします.
>                                     Knotopologynn

[ ]
RE:22272 TeXラベルを自動的に付けたいNo.22273
Knotopologynn さん 06/12/02 19:56
 
Knotopologynnです.
早速のご指導ありがとうございました.
「あべのり」さんの内容を検討したいのですが,

call Init;
if(##return == 0)endmacro;
else if(##return == 2){

のような文字列が不勉強なため,今の私には理解できません.
これから勉強しなければならないようです.このような記号列は
全て約束ごとですから,本を読めば理解できるでしょう.
少しずつ勉強して行きます.ありがとうございました.

># 自分は定理自体の名前や「これこれのための定理」とかいうようにつけています.

始めは,私も「定理自体の名前」や「人名」をラベルに用いていましたが,やがて,
その必要はなく,むしろ,ラベルの数が多くなると,
ダブらなければ何でも良いという習慣が自然と身につきました.
参照するときは,「定理自体の名前」や「人名」は,一切気にせず
コピーと貼り付けを機械的に行うだけです.したがって,適当な文字列でOKです.

>以下に示すマクロでどうでしょう?
>・その行がコントロールシークエンスから始まっていたら,そのコントロールシー
>クエンスを参考にラベル付けを決める.
>・そうでなければ今いる環境に応じてラベルを決める.
>環境はネストには対応していません.(一番近くのbeginを見てるだけです.)
>どの環境にどの文字を当てるかなどは三行目以降で設定してください.
>
>ところで,秀丸の話から外れますが,このようなラベル付けをしていると引用する
>時に困りません?
># 自分は定理自体の名前や「これこれのための定理」とかいうようにつけています.
>
>--------------------------
>call Init;
>
>if(##return == 0)endmacro;
>else if(##return == 2){
> if($cmd == "section")$label = "s";
>}else{//環境内
> if($env == "equation")$label = "e";
> else if($env == "definition")$label = "d";
> else if($env == "theorem")$label = "t";
>}
>
>$label = $label + hour + minute + char(val(month) - 1 + 'a');
>if(val(day) <= 26)$label = $label + char(val(day) - 1 + 'a');
>else $label = "z" + char(val(day) - 27 + 'a');
>insert "\\label{" + $label + "}";
>endmacro;
>
>Init:
> $buf = searchbuffer;
> #opt = searchoption;
>
> ##x = x;##y = y;
> disabledraw;
> searchup "\\\\begin\\{(.*?)\\}",regular;
> if(result){
>  #envl = ytolineno(foundtopx,foundtopy);
>  #envc = xtocolumn(foundtopx,foundtopy);
>  $env = gettext(foundtopx,foundtopy,foundendx,foundendy);
>  ##r = strstr($env,"{");
>  $env = midstr($env,##r + 1,strlen($env) - ##r - 2);
> }
> moveto ##x,##y;
> golinetop2;
> if(code == '\\'){
>  right;
>  ##nx = x;##ny = y;
>  #cmdl = lineno;
>  while(code != '{' && lineno == #cmdl)right;
>  $cmd = gettext(##nx,##ny,x,y);
> }
> moveto ##x,##y;
> enabledraw;
> if(#envl == 0 && #cmdl == 0)return 0;
> else if(#envl > #cmdl || (#envl == #cmdl && #envc >= #cmdc))return 1;
> else return 2;
>---------------------------

[ ]