tex用マクロNo.08905
kh さん 19/02/07 11:55
 
最近、新しいPC(Win10,64bit)を購入し、これまで使っていたPC(Win7,64bit)からt
ex用のマクロファイルを一式コピーしました。
新しいPCの秀丸のverは8.87(32bit)、古いPCのverは8.32です。texのコンパイル自体
はできるのですが、入力支援用のマクロが機能しなくなりました。

ここで聞くのは不適切かもしれませんが、どこに問題がありそうか教えていただけま
すでしょうか。いかがそのマクロです。
よろしくお願いいたします。
---------------------------------------------------------------------------

openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
$MacroDir = getregstr( "MacroPath" ) + "\\";
closereg;
if( $MacroDir == "\\" ) $MacroDir = hidemarudir + "\\";
$DicFile = $MacroDir + "rtex.dic";
$SEC = "C3-Sup";

#smode = false;
#selmode = false;

InsertRoutine:
    call GetMenu;
    call PopMenu;
    if( ##return == 0 ) endmacro;
    call GetCommand $a[##return-1];
    disabledraw;
    $$comstr = $$return;
    if( #smode == true )
    {
        if( rightstr( $$comstr, 1 ) == "*" )
        {
            ##l = strlen( $$comstr );
            $$comout = leftstr( $$comstr, ##l - 1 );
        }
        else
        {
            $$comout = $$comstr + "*";
        }
    }
    else
    {
        $$comout = $$comstr;
    }
    if( #Type == 1 )
    {
        insert "\\" + $$comout + " ";
        if( code == 0x20 )
        {
            delete;
        }
    }
    else if( #Type == 0 )
    {
        insert "\\" + $$comout;
    }
    else if( #Type == 2 )
    {
        if( selecting )
        {
            cut;
            call InsertCS $$comout, 1;
            paste;
        }
        else
        {
            call InsertCS $$comout, 1;
        }
    }
    else if( #Type == 3 )
    {
       
        call InsertCS $$comout, 2;
    }
    else if( #Type == 4 ){ insert "\\" + $$comout + "[]{}{}"; left 5; }
    else if( #Type == 5 ){ insert $$comout; }
    else if( #Type == 6 )
    {
        if( selecting )
        {
            cut;
            insert "{\\" + $$comout + " }"; left;
            paste;
        }
        else{ insert "{\\" + $$comout + " }"; left; }
    }
    else if( #Type == 7 )
    {
        if( selecting )
        {
            cut;
            insert "{\\" + $$comout + " \\/}"; left 3;
            paste;
        }
        else{ insert "{\\" + $$comout + " \\/}"; left 3; }
    }
    else if( #Type == 8 )
    {
        if( selecting )
        {
            #selmode = true;
            cut;
            call InsertEnv $$comout, 0;
            paste;
            down;
        }
        else
        {
            #selmode = false;
            call InsertEnv $$comout, 0;
        }
    }
    else if( #Type == 22 )
    {
        if( selecting )
        {
            #selmode = true;
            cut;
            ##ysv = lineno;
            call InsertEnv $$comout, #argc;
            paste;
            if( #argc == 0 ) down;
            else
            {
                movetolineno 0, ##ysv;
                call GoFirstArg #argc;
            }
        }
        else
        {
            call InsertEnv $$comout, #argc;
        }
    }
    else if( #Type == 23 )
    {
        if( selecting )
        {
            cut;
            call InsertCS $$comout, #argc;
            paste;
        }
        else
        {
            call InsertCS $$comout, #argc;
        }
    }
    else if( $$comstr == "$" ){ insert "$$";left; }
 else if( $$comstr == "[" ){ insert "\\[  \\]\n"; up; right 3;}
    else if( $$comstr == "i" || $$comstr == "M" )
    {
        $$c = input( "環境名を入力してください。" );
        if( selecting )
        {
            #selmode = true;
            cut;
            call InsertEnv $$c, 0;
            paste;
        }
        else
        {
            call InsertEnv $$c, 0;
        }
    }
    else if( $$comstr == "matrix" )
    {
        insert "\\left";
        ##xsv = x + 1;
        ##ysv = lineno;
        insertreturn;
        insertreturn;
        insert "\\right";
        insertreturn;
        up 2;
        tab;
        call InsertCS $$comout, 1;
        insertreturn;
        insertreturn;
        movetolineno ##xsv, ##ysv;
    }
    else if( $$comstr == "ecs" )
    {
        if( selecting )
        {
            #selmode = true;
            cut;
   insert "\\begin{eqnarray}\\begin{cases}\\begin{split}";
   insertreturn;
   insert "\\end{split}\\end{cases}\\end{eqnarray}";
   insertreturn;
   up;
            paste;
        }
        else
        {
   insert "\\begin{eqnarray}\\begin{cases}\\begin{split}";
   insertreturn;
   insertreturn;
   insert "\\end{split}\\end{cases}\\end{eqnarray}";
   insertreturn;
   up 2;
        }
    }
    else if( $$comstr == "COMMENTOUT" )
    {
        if( selecting )
        {
            ##sels = seltopy;
            ##self = selendy;
            escape;
            if( !#smode )
            {
                while( ##sels < ##self )
                {
                    moveto 0, ##sels;
                    insert "%";
                    if( code != 0x20 && code != 0x25 ) insert " ";
                    golineend2;
                    right;
                    ##sels = y;
                }
            }
            else
            {
                while( ##sels < ##self )
                {
                    moveto 0, ##sels;
                    while( code == 0x25 ) delete;
                    while( code == 0x20 ) delete;
                    golineend2;
                    right;
                    ##sels = y;
                }
            }
        }
    }
    enabledraw;
    endmacro;


InsertEnv:
    insert "\\begin{" + $$1 + "}";
    if( ##2 > 0 )
    {
        ##i = ##2;
        while( ##i > 0 )
        {
            insert "{}";
            ##i = ##i - 1;
        }
    }
    insertreturn;
    if( !#selmode ) insertreturn;
    insert "\\end{" + $$1 + "}";
    insertreturn;
    if( code == 0x0D ) deleteline;
    if( #selmode )
    {
        up;
    }
    else
    {
        if( ##2 == 0 )
        {
            up 2;
        }
        else
        {
            up 3;
            golineend;
            ##i = ##2 - 1;
            left;
            while( ##i > 0 )
            {
                left 2;
                ##i = ##i - 1;
            }
        }
    }
    #selmode = false;
    return;

InsertCS:
    insert "\\" + $$1;
    ##i = ##2;
    while( ##i > 0 )
    {
        insert "{}";
        ##i = ##i - 1;
    }
    ##i = ##2 - 1;
    left;
    while( ##i > 0 )
    {
        left 2;
        ##i = ##i - 1;
    }
    return;

GoFirstArg:
    golineend;
    ##i = ##1 - 1;
    left;
    while( ##i > 0 )
    {
        left 2;
        ##i = ##i - 1;
    }
    return;

GetCommand:
    ##a = strlen( $$1 );
    ##b = strstr( $$1, ":" );
    if( ##b == -1 ) goto Error;
    $$c = rightstr( $$1, ##a - ##b - 2 );
    ##d = strlen( $$c );
    ##e = strstr( $$c, ":" );
    if( ##e == -1 ) goto Error;
    else
    {
        $$t = rightstr( $$c, 1 );
        if( $$t == "*" )
        {
            $$c = leftstr( $$c, ##d - 1 );
            $$t = rightstr( $$c, ##d - ##e - 3 );
        }
        else
        {
            $$t = rightstr( $$c, ##d - ##e - 2 );
            if( #smode == true ) #smode = false;
        }
        #Type = val( $$t );
    }
    if( #Type == 0 && $$t != "0" )
    {
        #Type = ascii($$t) - ascii("A") + 10;
        if( #Type == 22 || #Type == 23 )
        {
            #argc = val( rightstr($$t,1) );
        }
    }
    $$f = leftstr( $$c, ##e );
    if( ascii( $$f ) == 38 ) $$f = rightstr( $$f, strlen($$f) - 1 );
    return $$f;


GetMenu:
    #MenuNum = getininum( $DicFile, $SEC, "num" );
    ##i = 0;
    while( ##i <= #MenuNum )
    {
        $a[##i] = getinistr( $DicFile, $SEC, str(##i) );
        ##i = ##i + 1;
    }
    return;

PopMenu:
    menuarray $a, (#MenuNum + 1);
    if( iskeydown(0x10) )
    {
        #smode = true;
    }
    else
    {
        #smode = false;
    }
    return result;

Error:
    message "マクロのバグと思われます。m(__)m\n作者に連絡してください。";
    endmacro;

[ ]
RE:08905 tex用マクロNo.08906
Iranoan さん 19/02/07 12:04
 

khさん今日は、Iranoan です
> 最近、新しいPC(Win10,64bit)を購入し、これまで使っていたPC(Win7,64bit)か
>らtex用のマクロファイルを一式コピーしました。
> 新しいPCの秀丸のverは8.87(32bit)、古いPCのverは8.32です。texのコンパイル自
>体はできるのですが、入力支援用のマクロが機能しなくなりました。
>
> ここで聞くのは不適切かもしれませんが、どこに問題がありそうか教えていただけ
>ますでしょうか。いかがそのマクロです。
> よろしくお願いいたします。
何かエラーは出ますか?
もし出ているなら、その情報が必要でしょうね

出ていないなら、マクロがおかしいのではなく、それ以外の設定がおかしいのだと思
います
他のマクロは動いているのでしょうか?
もし動いているなら、何かファイルのコピー漏れ等他の問題だと思います

[ ]
RE:08906 tex用マクロNo.08907
kh さん 19/02/07 13:07
 
>
> ......
>もし動いているなら、何かファイルのコピー漏れ等他の問題だと思います


ありがとうございます。古いPCでは、マクロを実行するといくつかのコマンドのリス
トが表示されますが、新しいPCでは、コマンドが表示されず、中身のないボックスの
ようなものだけが表示されます。
一緒にコピーしたマクロの中には、問題なくコマンドのリストが表示されるものもあ
ります。ファイルはすべてコピーしていますので、設定の問題の可能性がありますが、
どのあたりをいじればいいのか、見当がつきません。

[ ]
RE:08907 tex用マクロNo.08908
Iranoan さん 19/02/07 15:48
 
khさん今日は、Iranoan です
> 古いPCでは、マクロを実行するといくつかのコマンドのリストが表示されますが、
>新しいPCでは、コマンドが表示されず、中身のないボックスのようなものだけが表
>示されます。
古い PC ではメニューが表示された
しかし、新しい PC ではメニューらしきものは出てくるが、そのメニューが表示され
るべきところに何の文字も出ていない
ということですよね

だとすると
> $DicFile = $MacroDir + "rtex.dic";
にある rtex.dic の内容が読み込めていないだと思います

取り敢えず、この直ぐ下の行に
message $DicFile;
を追加してマクロを実行し、
・表示されるファイルが存在するか?
・内容は問題ないか? ←補完マクロで表示されるメニューなどの情報が書かれている
を確認してはどうでしょう?
後者は、
> [C1-Sup]
> num=13
> 0=(&A)★行列環境:array:9
> 1=(&C)中央揃え:center:8
> 2=(&D)見出付き箇条書き:description:9
> 3=(&E)番号付き箇条書き:enumerate:9
> 4=(&F)図の配置:figure:9
> 5=(&I)記号付き箇条書き:itemize:9
> 6=(&L)一般リスト環境:list:9
> 7=(&M)ミニページ:minipage:8
> 8=(&O)選択範囲コメント:COMMENTOUT:9*
> 8=(&P)図の描画:picture:8
> 9=(&Q)短い引用:quote:8
> 10=(&S)スクリーン環境:screen:8
> 11=(&T)表組み&配置:table:9
> 12=(&V)無変更出力:verbatim:8
> 13=ピクチャ:&picture:8
といった内容で始まります
ひょっとして私が自分用に編集してオリジナルから変化が有るかも知れませんが

[ ]
RE:08908 tex用マクロNo.08909
kh さん 19/02/07 16:52
 
>khさん今日は、Iranoan です
> ......
>ひょっとして私が自分用に編集してオリジナルから変化が有るかも知れませんが

ありがとうございます。試してみましたが、
%USERPROFILE%\AppData\Roaming\Hidemaruo\Hidemaru\Macro\RTEX.DIC
というエラーメッセージが出て、そこで止まってしまい、そのあとで前と同じように、
何の文字も表示されないメニューのようなものが出てきます。古いPCと新しいPCでは、
ユーザー名が違うのですが、それが原因ということは考えられるでしょうか?

[ ]
RE:08909 tex用マクロNo.08910
秀丸担当 さん 19/02/07 17:29
 

[その他]→[動作環境]→[環境]のマクロファイル用のフォルダが、「%USERPROFILE%\
AppData\Roaming\Hidemaruo\Hidemaru\Macro」というような、環境変数で書かれた場
所になっているのではないかと思います。

マクロを拝見させていただいたところによると、以下のようになっていて、マクロフ
ァイル用のフォルダの取得にレジストリの生の情報を使っているようでした。
(あと、「\」だとインストール先にするという本体とはちょっと違う動作もあるよ
うです)

>openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
>$MacroDir = getregstr( "MacroPath" ) + "\\";
>closereg;
>if( $MacroDir == "\\" ) $MacroDir = hidemarudir + "\\";

ここで食い違いがあるようです。

マクロファイル用のフォルダを、明示的にフルパスで指定した場所にするか、マクロ
を書き換えるかのどちらかにするといいと思います。

マクロファイル用のフォルダを変えるとしたら、%から始まるものではなく、「C:\Us
ers\(ユーザー名)AppData\Roaming\Hidemaruo\Hidemaru\Macro」というような、C:\
から始まるような場所にするといいです。

マクロを書き換えるとしたら、上記マクロの4行分を、以下の1行にするといいと思
います。
message $MacroDir+"\\";

[ ]
RE:08910 tex用マクロNo.08911
秀丸担当 さん 19/02/07 17:32
 

>message $MacroDir+"\\";
すみません。コピペして間違えました。

$MacroDir = macrodir+"\\";

が正しいです。

[ ]
RE:08911 tex用マクロNo.08912
kh さん 19/02/07 17:50
 
>
> ......
>が正しいです。

マクロファイルのフォルダをC:\で始めるように書き直したところ、うまくいきまし
た。ありがとうございました!

[ ]