銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

AsciiDocのテーブルで行のヘッダを指定する

f:id:takamints:20190518074249j:plain
photo credit: Pittypomm 27.1.15 - Bicycle via photopin (license)

仕様書書いててAsciiDocのテーブルで行ヘッダ(=特定列をまるごとヘッダ)はどうするの?と疑問に思って調べました。小ネタです。 以下、AsciiDoc の文書と @asciidoctor/core を使って書き殴ったプレビューツールでお送りしてます。

列ヘッダ(ヘッダ行)を表現するのは2行目を空行にするか[options="header"]でOKですね。

目次

AsciiDocのテーブルで行ヘッダを指定する

テーブルのcols属性で行ヘッダを指定します。該当する列に h を指定すれば、その列すべてがヘッダになります。普通のセルなら d とします。 cols属性は幅指定するためのものと思ってましたが、こういう事もできるのですね。ナルホドね。

[cols="h,d"]
|===
|行のヘッダ |データセル
|行のヘッダ |データセル
|===

列幅も同時に指定する

列幅も同時に指定する場合、hd の前に数値(幅の相対値)を書きます。後ろだと幅指定と解釈されずにテーブルが崩れていました。

[cols="1h,4d"]
|===
|行のヘッダ |データセル
|行のヘッダ |データセル
|===

列幅を指定するなら d は省略できるみたいです。あえて省略する必要もなさそうですが。

[cols="1h,4"]
|===
|行のヘッダ |データセル
|行のヘッダ |データセル
|===

列ヘッダも同時に指定

列のヘッダの指定は、行ヘッダの指定とは独立しているので、通常の書き方と組み合わせるだけです。

つまり、2行目を空行にする。ただそれだけ。

[cols="h,d"]
|===
|行列のヘッダ|列のヘッダ

|行のヘッダ |データセル
|行のヘッダ |データセル
|===

またはoptions属性でheaderを指定する。これも通常のやり方ですね。

[cols="h,d", options="header"]
|===
|行列のヘッダ|列のヘッダ
|行のヘッダ |データセル
|行のヘッダ |データセル
|===

あとがき

AsciiDocは表現の幅が広くてMarkdownよりは複雑ですね。 最近仕様書などをAsciiDocで書くことが多かったのですが、たまにしか書かないので書き方をかなり忘れていて「思い出しフェーズ」が必要でした。 なるべく日常的に書くようにすればよいでしょうけど、そうもいかない。

ググれば出てくるAsciiDocの説明サイトはありがたいのですが、逆に情報量が多くて知りたいところがササッと出てこないのがもどかしかった。 個人的に忘れがちな書式に絞ってチートシートみたいなものを作っておくのも手かもしれない。 もしくはパッと見、どこに行けばよいかがすぐに分かるインデックスとか。

あと使い方に関してだけど、書くことや考えることに集中したい段階ではMarkdownでざっと書き、清書するときにAsciiDocに変換して整えるというのがシームレスにストレスなく実現できれば良いと思います。

いやしかし、シンプルなテーブルに限っては Markdown よりも AsciiDoc のほうがさっと書きやすいですね。