LaTeXのOTFパッケージ+新jsドキュメントクラスでredeffont

これまで

\usepackage[deluxe, expert]{otf}
\usepackage{redeffont}

を使っていて,見出しのフォントが太字にならないことに悩んでいた.今回,太字にならない原因と,その対策が分かったのでそれをまとめる.

そもそもredeffont.styが新ドキュメントクラスに対応していなかった

このことはredeffont.styのソースを読んでみれば当然な挙動であることが分かった.以下,redeffont.styの冒頭部分抜粋

\newif\if@asciiclasses \@asciiclassesfalse 
\newif\if@articleclass \@articleclassfalse
\newif\if@bookclass \@bookclassfalse
\@ifclassloaded{jarticle}{\@asciiclassestrue\@articleclasstrue}{}
\@ifclassloaded{jbook}{\@asciiclassestrue\@bookclasstrue}{}
\@ifclassloaded{jreport}{\@asciiclassestrue}{}
\@ifclassloaded{tarticle}{\@asciiclassestrue\@articleclasstrue}{}
\@ifclassloaded{tbook}{\@asciiclassestrue\@bookclasstrue}{}
\@ifclassloaded{treport}{\@asciiclassestrue}{}

\if@asciiclasses \else \endinput\fi

\endinputは,これ以上のファイルの読み込みを停止するという命令.すなわち,jarticleやjbookなどの,旧ドキュメントクラスの場合のみredeffontの定義が読み込まれることになる.見出しのフォントが置き換えられないのも当然だ.

redeffont.styが不要だった

redeffontが使えない,それでは自分で定義を書くしかない.そう思い,jsarticle.clsの\section定義部分を見てみたら以下のようになっていた.

\if@twocolumn
  \newcommand{\section}{%
    \@startsection{section}{1}{\z@}%
    {0.6\Cvs}{0.4\Cvs}%
    {\normalfont\large\headfont\raggedright}}
\else
  \newcommand{\section}{%
    \if@slide\clearpage\fi
    \@startsection{section}{1}{\z@}%
    {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ
    {.5\Cvs \@plus.3\Cdp}% 後アキ
    {\normalfont\Large\headfont\raggedright}}
\fi

なんと,\headfontというコマンドが定義されているではないか.定義は以下のようになっていた.

\newcommand{\headfont}{\gtfamily\sffamily}

なるほど.こいつを置き換えてやればよさそうだ."jsarticle redeffont"でググっても情報が出てこなかったわけだ.

結局どうしたか

今後はredeffontの代わりに,以下のように宣言してやることにする.

\usepackage[deluxe, expert]{otf}
\renewcommand{\headfont}{\gtfamily\sffamily\bfseries}

結論

ソースコード読んだら割となんとかなる.たとえTeXでも恐れずに読むとなんとかなるかも.