発言者: 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