TeXの記憶(37) — 目次のsubsection項目を2段組みにする

目次でsubsectionの項目だけを2段組みで表示させてみました。

0908

目次を作るときにchapterとsectionが含まれるのは当然としても、subsectionも表示させるか迷うところです。

どのレベルまで目次に表示させるかは

\setcounter{tocdepth}{2}

で値を指定します。jbook.clsはこの価が2でsubsectionまで表示、jsbook.clsは値が1なのでsectionまでの表示です。

\tableofcontentsを使って生成される*.tocファイルに

\contentsline {subsection}{\numberline {1.1.1}サブセクション}{3}

の行があったとすると、これを実現するために呼ばれるマクロは\l@subsectionです。chapterなら\l@chapterです。

2段組みの実現はjbook.clsに手を加えて2段組みになるようにしてみました。スイッチで左と右を判断しているだけの単純な仕組みです。

\rlapを使って左のsubsectionを出力しても描画ポイントが移動しないようにしました。

\newif\ifTocSubsecLeft % subsectionが左側にくるかどうか
\TocSubsecLefttrue
\newcommand*{\l@chapter}[2]{%
  \TocSubsecLefttrue % subsectionの連続が終わったのでリセットしてる
  \ifnum \c@tocdepth >\m@ne
...
\newcommand*{\l@section}{\TocSubsecLefttrue % ここでもリセット
        \@dottedtocline{1}{1.5em}{2.3em}}
\newcommand*{\l@subsection}[2]   {%
  \def\numberline##1{##1\hskip1zw}%
  % 左と右を交互に繰り返すように
  \ifTocSubsecLeft
    \noindent\hskip3.8em\rlap{#1\hskip1em #2}%
    \TocSubsecLeftfalse
  \else
    \TocSubsecLefttrue
    \noindent\hskip50mm #1\hskip1em #2\par
  \fi}

コメント