マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

easylist を雪だるまに対応させてみた

最近、easylist という LaTeX パッケージが話題になっているようである。

easylist とは何か

簡単にいうと、このパッケージの機能は「リスト(箇条書き)のためのソース記述を簡潔にする」ことである。言葉で説明するより、実際の入力例を見た方が解りやすいであろう。

\documentclass[a4paper]{article}
\usepackage[at]{easylist} % '@' starts a list item
\begin{document}
\begin{easylist}
@ Blah.
@ Blahblah.
@@ Blah, blahblah blah blah.
@@@ Blah.
@@ Blahblah, `blah' blah?
@@@ Blahblahblah\ldots.
@ Blah, \emph{blahblah blah} blah blahblah.
\end{easylist}
\end{document}

つまり、リストの項目を \item ではなく @ 一文字で表す。また、リストがネスト(入れ子)されている場合に、各レベル毎に新たにリスト環境を書き始める必要はなく、@ を複数(n 個)連ねたものを書くと、(必要ならば新しいリストを開始して)n レベル目のリストの項目を開始するようになっていえる。(簡易マークアップ言語の中に似たような仕様をもつものがあり、例えば Textile がそうである。)

デフォルトではかなり独特な書式・レイアウトを持つリスト(ウィトゲンシュタインの『論理哲学論考』風の番号付きリスト、ということらしい*1)が出力されるが、easylist 環境のオプション引数に itemizeenumerate と指定する、すなわち

\begin{easylist}[enumerate]
@ Blah
\end{easylist}

のようにすることで LaTeX 標準の itemize 環境や enumerate 環境と同様の出力を行うことができる。*2さらに重要なことに、どのプリセットのスタイルを選んだ場合でも、\ListProperties という命令((この命令の書式は \ListProperties(キー=値,...) である。何故か { } でなく ( ) であることに注意。))を用いて、リストのレイアウトをかなり柔軟にユーザが設定することが可能になっている。例えば、以下のものは enumerate のレイアウトを「少し変えた」ものである。

\begin{easylist}[enumerate]
\ListProperties(Hang=false,Margin1=0em,Margin2=2em,Indent=1em)
@ Lorem ipsum {\TeX} dolor sit amet,
consectetuer adipiscing {\TeX} elit.
@ Ut purus elit, {\TeX} vestibulum ut, placerat ac,
adipiscing vitae, felis \verb|\expandafter|.
Curabitur {\TeX} dictum gravida \verb|\expandafter| mauris.
Nam arcu libero {\TeX}, nonummy eget,
\verb|\expandafter|  consectetuer id, vulputate a {\TeX},
\emph{magna}.
@@ Donec {\TeX} vehicula augue eu neque \verb|\def|.
@@ Pellentesque habitant morbi tristique {\TeX} senectus
\verb|\csname| et \verb|\endcsname| netus et malesuada
fames ac {\TeX} turpis egestas:
\verb|\expandafter\expandafter\expandafter|.
@ {\TeX} mauris ut \verb|\edef| leo.
Cras {\TeX} viverra metus rhoncus sem \verb|\def|.
@@ Nulla et lectus vestibulum urna \verb|\noexpand|
fringilla ultrices (\verb|\relax|).
\end{easylist}
項目開始の記号

先ほどの説明では、リスト項目を @ で開始すると述べたが、この記号はパッケージ読込時のオプション(「\usepackage[at]{easylist}」のように指定する)により次のものが選択できる。

  • at : 単価記号「@」(U+0040)
  • sharp : 番号記号「#」(U+0023)
  • ampersand : アンパサンド「&」(U+0026)
  • pilcrow : 段落記号「」(U+00B6)
  • 既定値 : 節記号「§」(U+00A7)

ただしこのうち〈¶〉と〈§〉は ASCII 外の文字なので以下の条件の下でしか使えない。

  • Unicode 対応の TeX エンジン(XeTeX、LuaTeX)を使っている。*3
  • 8 ビット欧文 TeX エンジンで、文書ファイルの文字コードが Latin-1 である。(inputenc パッケージはサポートされていない。)

なので、特に (u)pLaTeX ではこれらは使えない。残る 3 つの中で〈#〉と〈&〉は LaTeX特殊文字であり、easylist 環境の中ではこれらの特殊文字が正常に機能しなくなるという欠点がある。((つまり、easylist の中に tabular を入れてそこでセルの区切りのつもりで & を書くと「リスト項目開始」の意味になってしまう。easylist 環境の外であれば影響しない。))だから、先に紹介した記事でも言われているように、結局〈@〉(at オプション)が最も無難な選択になるだろう。

やっぱり雪だるまだね

さて、今までの説明を見ると、非常に残念なことに、リストの開始の記号を雪だるま〈☃〉にしようと思ったとしてもそれは無理だということになる。

……非常に嘆かわしい事態なので、作ってみた。

この tceasylist パッケージは内部で easylist パッケージを読み込んでいて、それと全く同じ機能を提供するが、パッケージオプションに “snowman” が追加されていて、これを指定すると、リスト項目開始の記号が雪だるま〈☃〉(U+2603)になる。

このパッケージを利用することで、雪だるまでリストを書くことが可能になる。素晴らしい。

% XeLaTeX文書, 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage[snowman]{tceasylist}% '☃'でリスト項目開始
\begin{document}
\begin{easylist}
 Blah.
 Blahblah.
 Blah, blahblah blah blah.
 Blah.
 Blahblah, `blah' blah?
 Blahblahblah\ldots.
 Blah, \emph{blahblah blah} blah blahblah.
\end{easylist}
\end{document}

(出力結果は最初の例のものと同じ。)

もしかしたら、「自分はむしろ黒い雪だるま〈⛇〉(U+26C7)の方を使いたい」という人もいるかも知れない。そういう場合も心配は要らない。パッケージオプションで “item=⛇” のように指定することで、Unicode にある任意の記号を指定することができる。

% XeLaTeX文書, 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage[item=⛇]{tceasylist}% '⛇'でリスト項目開始
\begin{document}
\begin{easylist}
 Blah.
 Blahblah.
 Blah, blahblah blah blah.
 Blah.
 Blahblah, `blah' blah?
 Blahblahblah\ldots.
 Blah, \emph{blahblah blah} blah blahblah.
\end{easylist}
\end{document}

(出力結果は最初の例のものと同じ。)

そういうわけで、これからは「LaTeX でリストを記述するときには、雪だるまを使う」というのが新しい常識になることは間違いないであろう。

*1:なお、この既定のレイアウトの場合、リスト部分に対して字下げ(インデント)は行われない。

*2:ただし、使用する文書クラスにおける itemize や enumerate のパラメタを引き継ぐわけではない。多分 article クラスのそれを規範としている。

*3:この場合、現状では UTF-8 で記述することになる(XeLaTeX と LuaLaTeX は事実上 UTF-8 のみをサポートしているので)。