§31 に戻る / コラム No.2 に戻る / トップページに戻る

数式番号の書式を変更する方法

equation 環境,eqnarray 環境での数式番号は, デフォルトでは,(1),(2) のように単に番号のみが出力されます. これを,例えば,§3 の数式には先頭から順に (3.1),(3.2) などとなるように \section の番号を添えて番号をつける場合には

  \def\theequation{\thesection.\arabic{equation}}
  \makeatletter
  \@addtoreset{equation}{section}
  \makeatother

という記述をプリアンブルに入れます.(なお,\thesection\section の番号を出力するコマンドです.) 数式番号の書式は,\theequation というコマンドで指定されるので, 上記の \def\theequation{ \dots の部分のように \theequation を再定義すると,数式番号の書式が変更されます. ただ,それだけでは,\section が変わっても数式番号はリセットされない (つまり,§ 1 に 10 個の(番号つきの)数式があったとすると, 数式番号が (1.1),...(1.10),(2.11),(2.12),... のようについてしまう)ので, \@addtoreset を用いて, \section が変わると数式番号をリセットするようにしています. なお,amsmath パッケージを用いた場合には今の一連の定義を

  \numberwithin{equation}{section}

のようにして行えます.

また,数式番号を囲む括弧を変更するには \@eqnnum の定義を変更します. この \@eqnnum

  \def\@eqnnum{{\normalfont \normalcolor (\theequation)}}

のように定義されていますが, この定義中の括弧 () が (equation 環境と eqnarray 環境での)数式番号を囲む括弧です. したがって,数式番号を囲む括弧を [ と ] に変更する場合には, 上記の定義の括弧を変更した

  \makeatletter
  \def\@eqnnum{{\normalfont \normalcolor [\theequation]}}
  \makeatother

という記述をプリアンブルに入れるとよいでしょう. ただし,この変更は amsmath パッケージで提供される数式環境には影響しません. gather 環境などでの数式番号を囲む括弧も変更する場合には, \tagform@ の定義の中の括弧を変更した

  \makeatletter
  \def\tagform@#1{%
     \maketag@@@{[\ignorespaces#1\unskip\@@italiccorr]}}
  \makeatother

のような記述も(amsmath パッケージを読み込んだ後で)用います.

一方,数式番号に一時的に“補助番号”をつけて, (1a),(1b) などのようにする場合には, amsmath パッケージで用意されている subequations 環境を用いるとよいでしょう. この環境は,

  \begin{subequations}
  ((補助番号をつけたい数式))
  \end{subequations}

のように用います.例えば,

  \begin{subequations}
    \begin{eqnarray}
       x +  y = 10 \\
      2x + 4y = 26
    \end{eqnarray}
  \end{subequations}

のように入力すると,

example of subeqnations environment

のように出力されます. なお,amsmath パッケージを用いずにこの subequations 環境を用いたい場合には, とりあえず,

  \makeatletter
  \newcounter{subeqncnt}
  \def\thesubeqncnt{\alph{subeqncnt}}%%% 「補助番号」の形式
  \def\subequations{\begingroup%
     \stepcounter{equation}\edef\@tempa{\theequation}%
     \let\c@equation\c@subeqncnt\c@subeqncnt\z@
     \edef\theequation{\@tempa\noexpand\thesubeqncnt}}
  \let\endsubequations\endgroup
  \makeatother

のような定義をプリアンブルに入れるとよいでしょう.


§31 に戻る / コラム No.2 に戻る / トップページに戻る