LaTeX入門中? (3)section関係の空白調整

 今日は一日ひたすらてふてふ。まずは、前から引きずっていたsectionまわりの空白調整。最初はこんなのを作ってみました。

[sectionやsubsectionの空白・フォント調整]
\makeatletter
\renewcommand{\section}{\@startsection{section}{1}{\z@}
  {2.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}
  {.5\Cvs \@plus.3\Cdp}
  {\normalfont\large\headfont\raggedright}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
  {1.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
  {.5\Cvs \@plus.3\Cdp}%
  {\normalfont\normalsize\headfont}}
\makeatother
 jsclassesアーカイブ内にあるjsclasses.dtxが参考になります。
 \sectionなどが含まれる@startsectionマクロは、6個の必須引数を取ります(他にも取れる引数はあるが割愛。dtxに解説があります)。1番目がsectionなどの「定義名」、2番目が「見出しの深さ」で例えばsectionなら2、subsectionなら3、3番目が「見出しの字下げ量」、4番目が「見出し上部の空白の大きさ」、5番目が「見出しの下の空白の大きさ」、6番目が「見出しのフォントスタイル」。
 で、Cvs、Cdpはそれぞれ\normalsizeでの行送り、和文の深さのこと。\z@はどうも0を意味しているようなのですが、何でこう書くのかなど詳細は不明です。こう記号だらけだと上手く検索もできない……。
 長さの設定でひっかかったのがplusやminusという表記。例えば、\setlength{\hogehoge}{2.5em plus .5em minus .2em}があったとすると、\hogehogeの基本の長さは2.5emです。ところが行送りとかページ送り時にそれでは上手くいかなかった場合、最小で(2.5-0.2)=2.3em、最大で(2.5+0.5)=3.0emの長さに変更して調整を計る、という意味のようでした。正確に説明してるところが見つからなかったので推測ですけれど、多分正しいはず。
 あ、ちなみに.5っていうのは0.5のこと。それと、\makeatletterと\makeatotherというのはコンパイルエラーが出たので書き加えたおまじないです。@などの記号を含む設定関連でエラーが出たら、この2つで囲むと良いみたいでした。具体的な効果は調査中。

 と、苦労してsectionの空白調整に成功したのはいいんですが。\twocolumnの環境下でsection間の空白を上記のように調整したとすると、多分見た目のバランスが悪くなります。ページ最上部に\sectionが来た場合でも空白をあけてしまうため、右の段と左の段を見比べると違和感があるんです。jsarticleではonecolumnだとマージンがちゃんと設定されているのに、twocolumnだと全部0にされているのはこの辺に理由があったんでしょうか。
 結局素直に、\smallskip、\medskip、\bigskipの三つを適宜つかって空白を挿入する形にしました。
[skip関係の調整(section間調整用)]
\setlength{\smallskipamount}{0.8em plus 0.2em}
\setlength{\medskipamount}{1.6em plus 0.4em minus 0.4em}
\setlength{\bigskipamount}{2.4em plus 0.6em minus 0.6em}