easylist

easylist は、深い入れ子のリストを「行頭のマーカー文字の個数」で表すパッケージです(作者は Paul Isambert)。itemizeenumerate を入れ子にすると標準では 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 行に書いても結果は同じです。

document.tex
\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(同じ段の項目の頭をそろえる)、MarginIndent(左マージンと段落字下げ)、FinalSpace(番号と本文の間隔、既定 .3em)、CtrCom(番号全体を \fbox などの命令で包む)といったキーがあり、細かな調整ができます。

深い入れ子の実例

段数の上限がないので、契約条項のような 5 段以上の構造もそのまま書けます。次の例では、第 1 段を太字に、第 2 段をローマ数字に、第 3 段を英小文字にし、深さに比例して字下げしています。マーカーの個数を 1 つ増やすだけで段が一段深くなる点に注目してください。

document.tex
\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 段制限にぶつかったときの心強い代替です。深い階層を持つ法律文書・規約・仕様書・アウトラインのように、「番号付きで、しかも深い」箇条書きを手早く書きたい場面で力を発揮します。逆に、ふつうの浅い箇条書きや、段ごとに凝った書式・行内リストが必要なら、itemizeenumerateenumitem のほうが素直です。# をマーカーにするとマクロや表との相性に注意が要るので、本文中心の独立したリストで使うのが無難です。