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
に渡した結果は同じになります。