easylist は、深い入れ子のリストを「行頭のマーカー文字の個数」で表すパッケージです(作者は Paul Isambert)。itemize や enumerate を入れ子にすると標準では 4 段までしか掘れませんが、easylist には段数の上限がありません。法律文書や細かく構造化したアウトラインのように、5 段・6 段と深くなる箇条書きを簡潔に書けるのが持ち味です。
マーカーの個数が「段」になる
通常の入れ子リストは、段が深くなるごとに \begin{itemize} … \item … \end{itemize} を重ねていきます。easylist の発想はまったく違います。\begin{easylist} と \end{easylist} で囲んだ中では、行頭に置いたマーカー文字の個数が、そのまま項目の段(レベル)になります。マーカー 1 個なら第 1 段、2 個なら第 2 段、3 個なら第 3 段……という具合で、\item も入れ子の環境も書きません。
マーカーはひとつの アクティブ文字 で、easylist 環境の中だけで特別な意味を持ち、外では元の文字に戻ります。既定のマーカーは節記号 **§** ですが、これはキーボードから打ちにくいので、\usepackage のオプションで使いやすい文字に変えられます(後述)。このページでは、本タスクの想定どおりマーカーを **#** にして説明します。# にするにはパッケージを \usepackage[sharp]{easylist} と読み込みます。
次は、# をマーカーにした最小の例です。# が 1 個の行が第 1 段、## が第 2 段、### が第 3 段になります。マーカー列の 直後には必ずスペースを置く こと。スペースがないと番号が出力されません。また、マーカーは自動的に改行を作るので、項目を続けて 1 行に書いても結果は同じです。
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\begin{easylist}
# First proposition.
## Interesting comment.
### A note on the comment.
### Another note.
#### By the way...
# Let's start something new.
\end{easylist}
\end{document}これを処理すると、番号が 1 / 1.1 / 1.1.1 / 1.1.2 / 1.1.2.1 / 2 のように、段の深さに応じてピリオド区切りで自動的に振られます。途中の段を飛ばすと、飛ばした段は 0 として数えられます(たとえば第 1 段の直後に第 3 段を置くと 1.0.1 になります)。
マーカーを選ぶ — なぜ `[at]` があるのか
マーカーはパッケージオプションで切り替えます。何も指定しなければ §、[pilcrow] で ¶、[sharp] で #、[at] で @、[ampersand] で & になります。どれを選んでも使い方は同じで、選んだ文字が \begin{easylist} と \end{easylist} の間だけアクティブになります。
| オプション | マーカー | |
|---|---|---|
(none) | §(節記号・既定) | 既定 |
pilcrow | ¶(段落記号) | \usepackage[pilcrow]{easylist} |
sharp | #(番号記号) | \usepackage[sharp]{easylist} |
at | @(アット) | \usepackage[at]{easylist} |
ampersand | &(アンパサンド) | \usepackage[ampersand]{easylist} |
ここで注意したいのが、なぜわざわざ [at](@)が用意されているのか、という点です。# は LaTeX のマクロ定義における引数記号(#1, #2 …)であり、tabular などでも特別な意味を持つ文字です。そのため、# をマーカーにすると、マクロ定義の中や表組みの中で衝突 しやすくなります。アクティブ文字はもともと扱いが難しく、ボックスの中などでは思うように働きません。そうした場面では [at](@)や [ampersand](&)のように、競合しにくいマーカーへ切り替えるのが安全です。
どうしても易しいマーカーを環境の中で使った命令と併用したいときは、命令を easylist 環境の外で定義 しておくか、リスト内で \Activate と \Deactivate(マーカーを一時的にアクティブ/非アクティブにする命令)を使います。既定で作られるカウンタは 10 段ぶんで、それより深くしたいときは \usepackage[50]{easylist} のように数値オプションで段数を増やせます。
見た目を整える `\ListProperties`
番号や記号、字下げなどの体裁は \ListProperties(...) でまとめて制御します。括弧の中に キー=値 をカンマ区切りで並べる書き方で、\ListProperties は それ以降のすべての項目・リスト に効きます。多くのキーには段ごとに効く番号付きの版があり、たとえば Numbers は全段に、Numbers3 は第 3 段だけに適用されます(一般に キー名 + 段数)。元の既定へ戻すには \NewList を使います。
| キー | 働き | |
|---|---|---|
Numbers / Numbersn | 番号の種類。a=算用数字(既定), r/R=小/大ローマ数字, l/L=小/大英字, z=Zapf Dingbats | 段ごとに別の種類にできる |
Mark / FinalMark | カウンタ間の区切り文字(既定はピリオド)。FinalMark は番号末尾の記号 | \ListProperties(Mark=.,FinalMark=) など |
Style / Stylen | 番号と本文の書体。* 付きは番号だけ、** 付きは本文だけ | \bfseries や \color{blue} などを渡す |
Hide / Hiden | 先頭の n 個のカウンタを隠す。番号なしの箇条書きにできる | Hide=10000 で全段を非表示 |
Start / Startn* | カウンタの開始値。* 付きは外部カウンタ(\thesection など)に連動 | \ListProperties(Start1*=\thesection) |
Progressive / Progressive* | 段の深さに比例して左マージンを取る。* 付きは第 1 段を現在位置に置く | \ListProperties(Progressive*=.5cm) |
Space / Space* | 項目間の縦アキ。* 付きは同じ段どうしの間隔 | 負の値で詰められる |
たとえば \ListProperties(Numbers3=l, FinalMark=) とすれば、第 3 段だけを a, b, c… の英字番号にし、番号末尾のピリオドを消せます。値にカンマや閉じ括弧そのものを使いたいときは、\ListProperties(FinalMark={)}) のように波括弧で囲みます。このほか Hang(番号からテキストをぶら下げる)、Align(同じ段の項目の頭をそろえる)、Margin/Indent(左マージンと段落字下げ)、FinalSpace(番号と本文の間隔、既定 .3em)、CtrCom(番号全体を \fbox などの命令で包む)といったキーがあり、細かな調整ができます。
深い入れ子の実例
段数の上限がないので、契約条項のような 5 段以上の構造もそのまま書けます。次の例では、第 1 段を太字に、第 2 段をローマ数字に、第 3 段を英小文字にし、深さに比例して字下げしています。マーカーの個数を 1 つ増やすだけで段が一段深くなる点に注目してください。
\documentclass{article}
\usepackage[sharp]{easylist}
\begin{document}
\ListProperties(Style1*=\bfseries, Numbers2=R, Numbers3=l,
Progressive=1.5em, Space*=2pt)
\begin{easylist}
# Agreement.
## Definitions.
### Party means a signatory hereto.
### Effective Date means the date of last signature.
## Term and termination.
### This Agreement begins on the Effective Date.
#### Either party may terminate on 30 days notice.
##### Notice must be given in writing.
# Miscellaneous.
\end{easylist}
\end{document}この例の番号は、第 1 段が 1 2(太字・算用数字)、第 2 段が大文字ローマ数字、第 3 段が英小文字となり、1.I.a 1.II.a のように合成されます。第 4 段・第 5 段はさらに深く字下げされ、#### ##### と書くだけで自然に出力されます。同じ構造を enumerate の入れ子で書こうとすると 4 段で行き詰まり、enumitem などで段を増やす設定が必要になりますが、easylist ならマーカーを足すだけで済みます。
使いどころ
easylist はニッチですが、標準リストの 4 段制限にぶつかったときの心強い代替です。深い階層を持つ法律文書・規約・仕様書・アウトラインのように、「番号付きで、しかも深い」箇条書きを手早く書きたい場面で力を発揮します。逆に、ふつうの浅い箇条書きや、段ごとに凝った書式・行内リストが必要なら、itemize・enumerate や enumitem のほうが素直です。# をマーカーにするとマクロや表との相性に注意が要るので、本文中心の独立したリストで使うのが無難です。