Re: jsarticle.cls では \abovedisplayskip が変更できない?

名前: しっぽ愛好家
日時: 2003-06-30 14:10:30
IPアドレス: 210.234.40.*

>>19827 jsarticle.cls の場合, \everydisplay に含まれている \narrowbaselines の中で \@currsize (現在適用されている文字サイズ設定マクロ (\normalsize など)のコピー)が実行され, その際 \abovedisplayskip も再設定されます. そのため,\abovedisplayskip などの一時的な変更は 利かないようになっています. とりあえず,\narrowbaselines の定義を次のように変更すれば, \abovedisplayskip などの変更が利くようになります. %%% 必要があれば,\makeatletter と \makeatother で %%% 挟んでください(以下同様). \def\narrowbaselines{% \narrowbaselinestrue \skip0=\abovedisplayskip \skip2=\abovedisplayshortskip \skip4=\belowdisplayskip \skip6=\belowdisplayshortskip \@currsize \selectfont \abovedisplayskip=\skip0\relax \abovedisplayshortskip=\skip2\relax \belowdisplayskip=\skip4\relax \belowdisplayshortskip=\skip6\relax} ただし,list 系の環境の \item の直後のディスプレイ数式について, 箇条書きのラベルを数式の左側に置きたいだけであれば, \aboevdisplayskip を変更するのではなく, \box\@labels の中身を横取りし,それを数式の左側に置きなおす という処理を行う方が適切です. %%% \box\@labels というのは,\item によるラベル部分を一時的に %%% 保存するために用いられているボックスです. 例えば,eqnarray などの環境を次のように再定義することができます. %%% fleqn の場合には,fleqn.clo などでの定義に対して下記の定義に %%% 施されている変更と同様の変更を施してください. %%% leqno の場合には,\item の直後のディスプレイ数式を ``改行ののちに'' %%% 始める,というのはむしろ妥当でしょう. %%% %%% なお,amsmath パッケージが提供するディスプレイ数式環境については %%% %%% ここでは扱っていません.必要があれば,amsmath.sty などでの定義に %%% %%% 必要な変更を施してください. \newbox\@saved@label \def\@displaymath@setlabel{% \if@inlabel \global\setbox\@saved@label\box\@labels \global\@newlistfalse \global\@inlabelfalse \everypar{\everyparhook}% \else \global\setbox\@saved@label\box\voidb@x \fi} %%% フラグ \if@nobreak などの処理に甘いところがありますが… \def\eqnarray{% \@displaymath@setlabel \stepcounter{equation}% \def\@currentlabel{\p@equation\theequation}% \global\@eqnswtrue \m@th \global\@eqcnt\z@ \tabskip\@centering \let\\\@eqncr $$\everycr{}\halign to\displaywidth\bgroup \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil\tabskip\@centering &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup \tabskip\z@skip \cr} \def\@@eqncr{% \let\reserved@a\relax \ifcase\@eqcnt \def\reserved@a{& & &}% \or \def\reserved@a{& &}% \or \def\reserved@a{&}% \else \let\reserved@a\@empty \@latex@error{Too many columns in eqnarray environment}\@ehc \fi \reserved@a \if@eqnsw \@eqnnum \stepcounter{equation}% \fi \hbox to\z@{% \kern-\displaywidth \box\@saved@label \hss}% \global\@eqnswtrue \global\@eqcnt\z@ \cr} \def\equation{% \@displaymath@setlabel $$\refstepcounter{equation}} \def\endequation{% \eqno \hbox{% \@eqnnum \hbox to\z@{% \kern-\displaywidth \box\@saved@label \hss}}% $$\@ignoretrue} \def\[{% \relax\ifmmode \@badmath \else \@displaymath@setlabel \ifvmode \nointerlineskip \makebox[.6\linewidth]% \fi $$% \fi} \def\]{% \relax\ifmmode \ifinner \@badmath \else \ifvoid\@saved@label\else \eqno \hbox to1sp{% \kern-\displaywidth \box\@saved@label \hss}% \fi $$% \fi \else \@badmath \fi \ignorespaces}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)