emath saloon (Read Only)

新規発言一覧最新記事過去一覧検索HOME

No.639  Re[5]:底が数のときの指数の位置
発言者: tommy_minor
発言日: 2008 03/18 21:23
奥村先生のところで皆さんに不愉快な思いをさせた張本人です.
.さんのアドバイスを受け,tfmファイルにも手を入れましたが,
やはり指数を動かしたいこともあるので,以下のようなマクロを使っています.
カテゴリーコードを変更しているので,併用するスタイルによっては
予期せぬ不具合が生じる恐れがあります.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ^<#1>[#2,#3]#4
%    #1:指数の縦方向圧縮率,デフォルトは0.85
%    #2:右方向位置補正(単位pt(正確には0.1em),単位無しで指定)
%    #3:上方向位置補正(単位pt(正確には0.2ex),単位無しで指定)
%    #4:指数
%----------------------------------------------------------
\catcode`\^=13% ^をアクティブ文字に変更
\def^{\protect\uesoeji}%
\def\uesoeji{\@ifnextchar<{\ue@soeji}{\ue@soeji<.85>}}%
\def\ue@soeji<#1>{\@ifnextchar[{\UEs@eji<#1>}{\UEs@eji<#1>[0,0]}}%
\def\UEs@eji<#1>[#2,#3]#4{%
  \dimen0=\z@\relax%
  \advance\dimen0 #2em% 横位置補正
  \divide\dimen0 10% 1em=10pt(normalsize)なので10で割ってある.
  \dimen1=\z@\relax%
  \advance\dimen1 #3ex% 縦位置補正
  \divide\dimen1 5% 1ex=5pt(normalsize)なので5で割ってある.
  \@ifundefined{hakobanpush}% hako.styを読み込まないとき
  {\sp{
       \mathchoice%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#4$}}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#4$}}%
        {\kern\dimen0\raise\dimen1\hbox{\scalebox{1}[#1]{$\m@th\scriptstyle#4$}}}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#4$}}%
      }
  }
  %以下,hako.styを読み込むときの定義
  {\sp{
       \hakobanpush\mathchoice%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#4$}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#4$}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{\scalebox{1}[#1]{$\m@th\scriptstyle#4$}}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#4$}\hakobanpop}%
       \setbox0=\hbox{$\scriptstyle{#4}$}
       }
  }
}%
%\catcode`\^=7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% _<#1>[#2,#3]#4
%    #1:下添え字の縦方向圧縮率,デフォルトは0.85
%    #2:右方向位置補正(単位pt(正確には0.1em),単位無しで指定)
%    #3:上方向位置補正(単位pt(正確には0.2ex),単位無しで指定)
%    #4:下添え字
%----------------------------------------------------------
\catcode`\_=13% _をアクティブ文字に変更
\def_{\protect\sitasoeji}
\def\sitasoeji{\@ifnextchar<{\sita@soeji}{\sita@soeji<.85>}}%
\def\sita@soeji<#1>{\@ifnextchar[{\SITAs@eji<#1>}{\SITAs@eji<#1>[0,0]}}%
\def\SITAs@eji<#1>[#2,#3]#4{%
  \dimen0=\z@\relax%
  \advance\dimen0 #2em% 横位置補正
  \divide\dimen0 10% 1em=10pt(normalsize)なので10で割ってある.
  \dimen1=\z@\relax%
  \advance\dimen1 #3ex% 縦位置補正
  \divide\dimen1 5% 1ex=5pt(normalsize)なので5で割ってある.
  \@ifundefined{hakobanpush}% hako.styを読み込まないとき
  {\sb{
       \mathchoice%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#4$}}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#4$}}%
        {\kern\dimen0\raise\dimen1\hbox{\scalebox{1}[#1]{$\m@th\scriptstyle#4$}}}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#4$}}%
      }
  }
  %以下,hako.styを読み込むときの定義
  {\sb{
       \hakobanpush\mathchoice%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#4$}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#4$}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{\scalebox{1}[#1]{$\m@th\scriptstyle#4$}}\hakobanpop}%
        {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#4$}\hakobanpop}%
       \setbox0=\hbox{$\scriptstyle{#4}$}
       }
  }
}%
%\catcode`\_=8
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ついでに,三角関数も少し変更しています.
デフォルトだと,sin と cos で指数の位置が微妙に異なります.
sin に合わせるのは簡単ですが,それだと指数が高すぎるように思います.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\sin{\qopname\relax o{\smash[t]{\mathrm{sin}}}}
\def\tan{\qopname\relax o{\smash[t]{\mathrm{tan}}}}




▼関連発言

605:底が数のときの指数の位置 [田中徹] 03/10 00:28
 └606:Re:底が数のときの指数の位置 [石原 守] 03/10 05:51
  └607:Re[2]:底が数のときの指数の位置 [田中徹] 03/10 09:48
   └608:Re[3]:底が数のときの指数の位置 [石原 守] 03/10 10:02
    └609:Re[4]:底が数のときの指数の位置 [田中徹] 03/10 11:36
     └639:Re[5]:底が数のときの指数の位置 [tommy_minor] 03/18 21:23<-last

Pass 保存


CGIROOM