いものやま。

雑多な知識の寄せ集め

TeXで同人誌を作ってみた。(索引)

f:id:yamaimo0625:20190918075457j:plain

昨日に引き続き、同人誌制作の振り返り。
今日は索引の作り方について。

なお、 \TeX \LaTeXは区別せずに扱っている。
参考にしたのは以下:

LaTeX2ε辞典 増補改訂版 (DESKTOP REFERENCE)

LaTeX2ε辞典 増補改訂版 (DESKTOP REFERENCE)

あと、索引から参照されるべき単語については以下を参照:

索引の作り方

索引を作るにはmendexなどを使う。
自分はupmendexを使用した。

そして以下のようにする:

  1. 索引のスタイルファイルを用意する
  2. makeidxパッケージを追加して\makeindexを呼び出す
  3. \indexで参照されるべき単語にインデックスを追加する
  4. \printindexで索引を出力する

索引のスタイルファイル

索引をどう出力するか指定するためのスタイルファイル(拡張子は.ist)を用意してupmendexなどに引数で渡す。
(latexmkを使っている場合、.latexmkrcにオプションを書いておく)

スタイルファイルに何を書けるのかは以下のようにオンラインマニュアルを見れば分かる:

$ man upmendex

自分は以下のようなスタイルファイルをindex.istという名前で用意した:

% 頭文字の出力
lethead_flag 1      % 頭文字の出力フラグ (0: 出力しない, -1: 小文字出力, 1: 大文字出力)
letter_head  1      % 日本語の頭文字の出力フラグ (0: 出力しない, 1: カタカナ, 2: ひらがな)
lethead_prefix "\\idxgrphead{"   % 頭文字の前につける文字列
lethead_suffix "}"   % 頭文字の後につける文字列

% エントリと最初のページ番号との間の区切り文字列 (0: 主, 1: サブ, 2: サブサブ)
delim_0 "\\quad "
delim_1 "\\quad "
delim_2 "\\quad "

頭文字というのは「A」とか「あ」とかの見出し。
lethead_prefixlethead_suffixを指定しているけど、これで\idxgrphead{あ}のように呼び出されることになるので、\idxgrpheadを定義することで頭文字のスタイルを変えることが出来るようにしている。

「主」「サブ」「サブサブ」というのは、索引を入れ子にすると関係してくる。
(例えば「オイラーの公式」「オイラー数」を入れ子にすると、主:「オイラー」、サブ:「ーーの公式」「ーー数」みたいになる)

他にもページ番号間の区切り文字を指定したりなども出来る。

インデックスを追加するマクロ

インデックスの追加は以下のように\index命令を使う:

...ショーダウン\index{ショーダウン}というのは...

漢字の読みも指定する場合は以下のようにする:

...期待値\index{きたいち@期待値}とは...

ただ、見ての通り基本的には同じ単語をその場で使ってるので、\indexで索引を追加するのは二度手間・・・
そこで\addindex\addindexyomiというマクロを用意した:

% インデックスの追加
\newcommand{\addindex}[1]{#1\index{#1}}
\newcommand{\addindexyomi}[2]{#1\index{#2@#1}}

これを使えば次のように書ける:

...\addindex{ショーダウン}というのは...
...\addindexyomi{期待値}{きたいち}とは...

索引のデザインのカスタマイズ

あとは索引のデザインのカスタマイズ。

まずはスタイルファイルに書いていた\idxgrpheadを定義しておく:

% 索引のグループの見出し
\newcommand{\idxgrphead}[1]{% #1: 頭文字
    \par%
    \vspace{\baselineskip}%
    \hfil{\bfseries #1}\hfil%
    \vspace{\baselineskip}\par}

上下に一行分の空きを入れて中央寄せした感じ。

あと参考文献と同じように目次に追加されるときに\protect\numberline{\null}が入るようにした:

\makeatletter

%%% 索引のスタイルをカスタマイズ

% 目次でのインデントを合わせる
\renewenvironment{theindex}{% 索引を3段組で出力する環境
    \if@twocolumn
      \onecolumn\@restonecolfalse
    \else
      \clearpage\@restonecoltrue
    \fi
    \columnseprule.4pt \columnsep 2\jsZw
    \ifx\multicols\@undefined
      \twocolumn[\@makeschapterhead{\indexname}%
      \addcontentsline{toc}{chapter}{\protect\numberline{\null}\indexname}]%ここを修正
    \else
      \ifdim\textwidth<\fullwidth
        \setlength{\evensidemargin}{\oddsidemargin}
        \setlength{\textwidth}{\fullwidth}
        \setlength{\linewidth}{\fullwidth}
        \begin{multicols}{3}[\chapter*{\indexname}%
        \addcontentsline{toc}{chapter}{\protect\numberline{\null}\indexname}]%ここを修正
      \else
        \begin{multicols}{2}[\chapter*{\indexname}%
        \addcontentsline{toc}{chapter}{\protect\numberline{\null}\indexname}]%ここを修正
      \fi
    \fi
    \@mkboth{\indexname}{}%
    \plainifnotempty% \thispagestyle{plain}
    \parindent\z@
    \parskip\z@ \@plus .3\p@\relax
    \let\item\@idxitem
    \raggedright
    \footnotesize\narrowbaselines
  }{
    \ifx\multicols\@undefined
      \if@restonecol\onecolumn\fi
    \else
      \end{multicols}
    \fi
    \clearpage
  }

\makeatother

章まで出すとかいう余計なことをしなければこんな修正は不要なんだけどねぇ(^^;


索引の作り方については以上。

ちなみに『Math Poker Girl』はBOOTHで販売しているのでよろしくお願いします!

今日はここまで!