「リスト系」の環境の設定と定義をします.
list環境
LaTeX内で定義されているlist環境は,箇条書きをはじめとした様々な書式の出力を行うための汎用的な環境です.enumerate環境などは通常これを使い定義されます.list環境は
\list{<デフォルトラベル>}{<初期化命令群>}%
\item ....
\item ...
...
\endlist
の形で使われます.もちろん\begin{list}...\end{list}
の形でもよいのですが,内部で使う際には\list...\endlist
の方が多いようです.list環境の出力はenumerate環境のようなものを想像してもらえればよいです.つまり,enumerate環境の場合の番号(list環境下では「ラベル」と呼びます)とそれに続く本文,という塊が連なっているようなものが出力されます.
<初期化命令群>
にこの環境の振る舞いを定義します.殆どが空きの調整になります.
- 縦方向
\topsep
- 最初の項目と前の段落との間の空き.
\partopsep
\par
直後(TeXの意味での垂直モード)でlist環境が開始された時に,追加で\topsep
に加えられる空白の長さ.\itemsep
- 項目間の縦方向空き.
\parsep
- 一つの項目における段落間の距離(
\parskip
.)
- 横方向
\leftmargin
- 全体の字下げ.この環境自身が字下げされている場合は,そこからさらにこの値だけ字下げされる.0以上でなければならない.
\rightmargin
- 字上げ.
\listparindent
- 各項目内での段落の字下げ量.負でもよい.ただし
\item
に続く段落では,この値ではなく以下の\itemindent
が参照される. \itemindent
- 各項目の一行目の字下げ量.ラベルの前の空き.
\labelwidth
- ラベルの最低長さ.デフォルトでは,ラベル自身の長さが
\labelwidth
以下ならば,長さ\labelwidth
の範囲に右寄せでラベルが配置される.もし\labelwidth
以上の長さをラベル自身が持つならば,その分続く本文が右寄せされる.ただしこれらの挙動は以下に出てくる\makelabel
の定義による. \labelsep
- ラベルとそれに続く項目の空き.
場合によっては,以下のような処理も必要になります.
\makelabel
の再定義.\item
によりラベルが出力される際に,ラベル自身を引数として\makelabel
が呼び出される.デフォルトは\def\makelabel#1{\hfil #1}
.渡される引数はデフォルトでは\list
の第一引数に渡した<デフォルトラベル>
.ただし\item
が\item[<オプション>]
のようにオプション付きで使われた場合は<オプション>
になる.\usecounter
により使用するカウンタを宣言する.使い方は\usecounter{<LaTeXの意味でのカウンタ名>}
で,ここで指定されたカウンタは\item
のたびに増加される.
\usecounter
と\makelabel
の再定義の一例をあげます.
\newcounter{mycounter}% カウンタを宣言
\renewcommand{\themycounter}{[\arabic{mycounter}]}% mycounteroカウンタを出力する\themycounterをちょっと再定義
\list
{\themycounter}% デフォルトラベルとしてはmycounterの値を使う.
{%
\usecounter{mycounter}%
\def\makelabel#1{#1\hfil}% 左寄せにする
}%
... % 実際の中身
\endlist
これで,ラベルは[1],[2]となります.
trivlist環境
簡略化されたlist環境です.以下のように値が固定されています.
\parsep = \parskip
\leftmargin = 0pt
\rightmargin = 0pt
\listparindent = 0pt
\itemindent = \parindent
\labelwidth = 0pt
\@listi
等
list環境は上記の<初期化命令群>
が実行される前に\@listi
を実行します.list環境下のlist環境では\@listii
が実行されます.以下ネストされていくに連れ,\@listiii
,\@listiv
,\@listv
,\@listvi
となります.(これ以上はlist環境がネストできない.)この中では各種パラメータの変更のみができ,例えば\makelabel
を定義するということはできません.
このデフォルト値を定義します.enumerate環境やitemize環境を意識します.\leftmargin
に関してはLaTeXの用意しているレジスタ\leftmargini
等を参照することにします.これでこのレジスタの値を変更することでenumerate環境などの設定を行うことができるようになります.
\def\@listi{%
\setlength{\leftmargin}{\leftmargini}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0.5\baselineskip}%
\setlength{\itemsep}{0pt}%
}
\def\@listii{%
\setlength{\leftmargin}{\leftmarginii}%
\setlength{\labelwidth}{\dimexpr\leftmarginii - \labelsep\relax}%
\setlength{\topsep}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{\parsep}%
}
\def\@listiii{%
\setlength{\leftmargin}{\leftmarginiii}%
\setlength{\labelwidth}{\dimexpr\leftmarginiii - \labelsep\relax}%
\setlength{\topsep}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{\parsep}%
}
\def\@listiv{%
\setlength{\leftmargin}{\leftmarginiv}%
\setlength{\labelwidth}{\dimexpr\leftmarginiv - \labelsep\relax}%
}
\def\@listv{%
\setlength{\leftmargin}{\leftmarginv}%
\setlength{\labelwidth}{\dimexpr\leftmarginv - \labelsep}%
}
\def\@listvi{%
\setlength{\leftmargin}{\leftmarginvi}%
\setlength{\labelwidth}{\dimexpr\leftmarginvi - \labelsep}%
}
% デフォルトの\@listiを保存
\let\@listI\@listi
いくつかのフォントサイズ変更命令では,トップレベルの\@listi
に\@listI
を代入するようにしていました.そこで参照されているのがここで保存されたものです.
\leftmargini
等のデフォルト値も設定しておきます.
\setlength\leftmargini{3zw}
\setlength\leftmarginii{2zw}
\setlength\leftmarginiii{2zw}
\setlength\leftmarginiv{2zw}
\setlength\leftmarginv{1zw}
\setlength\leftmarginvi{1zw}
なお,現在の環境名は\@currenvir
に格納されているため,環境ごとに値を変更したい場合は次のようにすることができます.
\def\@listi{%
\setlength{\leftmargin}{\leftmargini}%
\setlength{\parsep}{0pt}%
\setlength{\topsep}{0.5\baselineskip}%
\ifthenelse{\equal{\@currenvir}{enumerate}}{%
\setlength{\itemsep}{10pt}% enumerate環境でのみ\itemsepを10ptとする.
}{%
\setlength{\itemsep}{0pt}%
}%
}
description環境
description環境を定義します.
\newenvironment{description}{%
\list{}{%
\setlength{\labelsep}{1zw}%
\setlength{\labelwidth}{\dimexpr\leftmargin - \labelsep\relax}%
% ラベルの出力は\descriptionlabelに追い出しておく.
\let\makelabel=\descriptionlabel
}%
}{\endlist}
% \descriptionlabelの定義.左寄せ.
\newcommand*{\descriptionlabel}[1]{\normalfont\bfseries\gtfamily #1\hfil}
引用系環境
引用をする際に使う環境であるquote,quotation,verse環境を定義します.これは\item
の現れないlist環境として定義します.
\newenvironment{quote}{%
\list{}{\setlength{\rightmargin}{0pt}}%
% この\itemがこの環境内唯一の\itemとなる.\begin{quote}[...]という場合でも問題無く動くように\relaxを入れておく.これがないと\itemのオプションとして誤認されてしまう.
\item\relax
}{\endlist}
\newenvironment{quotation}{%
\list{}{%
% 段落頭を一文字インデント
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\listparindent}%
\setlength{\rightmargin}{0pt}%
}%
\item\relax
}{\endlist}
\newenvironment{verse}{%
\let\\=\@centercr % \\で改段落できるようにする.
\list{}{%
% \leftmarginに2zwを加え,\itemindentと\listparindentを-2zwに設定することで,段落頭を除き二文字分インデントされる.
\setlength{\itemsep}{0pt}%
\setlength{\itemindent}{-2zw}%
\setlength{\listparindent}{\itemindent}%
\setlength{\rightmargin}{0pt}%
\addtolength{\leftmargin}{2zw}%
}%
\item\relax
}{\endlist}
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です