text.multicolumn - 複数列フォーマット ¶このモジュールは、単語のリストを複数カラム形式に揃えてフォーマットする手段を提供します。
lsコマンドの出力のようなものを想像してください。
(display-multicolumn
(string-tokenize "The quick brown fox \
jumps over the lazy dog"))
⇒ prints
The fox the
quick jumps lazy
brown over dog
出力をカスタマイズできる様々なオプションが提供されます。
{text.multicolumn}
文字列のリストstrsの要素を、現在の出力ポートに複数カラム形式に揃えて表示します。
要素中にタブや改行文字があってはなりません。手続きはタブや改行文字を特別扱いしないので、
もし含まれていた場合は出力が乱れます。
カラムの幅は、strs中の文字列のうち最も長いものか、minimum-widthの どちらか大きい方で決まります。minimum-widthのデフォルトは8です。
カラムの幅が決まったら、width文字の幅にいくつのカラムが収まるかが計算されます。
widthのデフォルトは80です。但しmax-columnsが与えられて#fでなければ、
カラム数はmax-columnを越えません。
order引数はシンボルcolumnかrowのどちらかです。
columnの場合(デフォルト)、要素はカラムファースト、つまり最初のカラムを
上から下へ、それから第二カラムを上から下へ、という順に並べられます。
rowの場合はロウファースト、つまり最初の行の左から右、次の行の左から右、
という順に並べられます。
indent引数は、与えられたなら非負の正確な整数でなければなりません。 これが1以上の場合、その数の空白文字が各行の先頭に追加されます。 widthで指定される幅はこのインデントを含んだものとなります。つまり テキストの表示領域の幅はこの引数の分だけ狭くなります。
style引数はシンボルevenかpackedのどちらかです。
evenの場合(デフォルト)、全てのカラムは等幅で、最も長い項目が
収まるように配置されます。packedの場合は、各カラムの幅は
そのカラムの項目だけを収めるのに必要な分が取られます。
これにより、より多くのカラムを幅に収めて表示できるかもしれません。
packedスタイルは、ほとんどの項目が短い中にごく少数の長い項目が含まれている
ような場合にとりわけ有効です。evenスタイルだとそういう場合、
短い項目だけが含まれるカラムにも同じ幅が割当てられるため、空白が多い、
スカスカな表示になってしまいます。packedスタイルでは
長い項目を含んでいるカラムだけに広い幅を与えるので、より少ない行、
より多くのカラムを使って、見た目のテキストの密度がより一様な表示になります。
{text.multicolumn}
この手続きはdisplay-multicolumnの下請けにあるもので、
テキストツリーのリストを返します (テキストツリーについては
text.tree - 怠惰なテキスト構築参照)。
各テキストツリーが一行に相当します。改行文字は含まれません。
レイアウトを後から加工したい場合に便利です。
(layout-multicolumn
(string-tokenize "The quick brown fox \
jumps over the lazy dog"))
⇒
(("The " "fox " "the")
("quick " "jumps " "lazy")
("brown " "over " "dog"))
註: テキストツリーの中身はバージョンによって異なるかもしれませんが、
tree->stringやwrite-treeに渡した結果は同じになります。