読者です 読者をやめる 読者になる 読者になる

豆腐メンタルは崩れない

小説家ワナビ視点で、主に執筆環境について書きます。

Markdownドキュメントを作成する際、隣接したリストブロック同士がくっついちゃう件について

Markdownドキュメントを作成する際、複数のリストブロックを連続して記述する際のルールがよくわからなかった。

たとえば、以下のように記述するとする。

* リストブロック1

独立したパラグラフ

* リストブロック2

これが、ふたつのリストブロックとひとつのパラグラフとして解釈されることは、直感的に理解できる。

<ul>
<li>リストブロック1</li>
</ul>

<p>独立したパラグラフ</p>

<ul>
<li>リストブロック2</li>
</ul>

では、以下のように記述した場合はどうなるのか?

*   リストブロック1

*   リストブロック2

作成者の都合としては別々のリストブロックであってほしいが、実際にはくっついてしまうようだ。

まずは教典

Markdownの提唱者、ジョン・グルーバーによる定義を参照する。

これによれば、以下のように空行を挟む場合は、<p>タグを含む単一のリストブロックとして解釈されるとある。

*   リストブロック1

*   リストブロック1

変換後のHTMLコード例は以下のとおり。

<ul>
<li><p>リストブロック1</p></li>
<li><p>リストブロック1</p></li>
</ul>

さらに、複数のリスト行の間に、空行を挟んでタブ記号または半角スペース4つで始まる行が記述される場合、リストブロックには複数のパラグラフが含まれるとされる。

* リストブロック1の項目1

    項目1に含まれる

* リストブロック1の項目2

変換後のHTMLコード例は以下のとおり。

<ul>
<li><p>リストブロック1の項目1</p>

<p>項目1に含まれる</p></li>

<li><p>リストブロック1の項目2</p></li>
</ul>

つまり、複数のリスト行の間に、空行を挟んで、インデントされない行が記述された場合、リストブロックは分離される。

逆に言えば、複数のリスト行の間に空行のみが記述される場合、単一のリストブロックとして解釈するのが正しいらしい。いくらなんでも、*行と1.行を並べたら分離してもらいたいのが人情というものだが。

では、単に複数のリストブロックを並べて記述したい場合はどうすればよいのだろうか?

複数のリストブロックを連続して記述する

HTMLで書くのは最後の手段として。

簡単なのは、---つまり水平線あたりで区切ることだ。日本語特有のバッドノウハウとして、全角スペース行で区切ることも考えられる。

* リストブロック1

---

* リストブロック2

 ←ここに全角スペース

* リストブロック3

変換後のHTMLコード例は以下のとおり。

<ul>
<li>リストブロック1</li>
</ul>

<hr>

<ul>
<li>リストブロック2</li>
</ul>

<p> ←ここに全角スペース</p>

<ul>
<li>リストブロック3</li>
</ul>

また、HTMLコードを利用する方法として、コメントアウトを挟むということが考えられる。

* リストブロック1

<!-- コメントアウト -->

* リストブロック2

変換後のHTMLコード例は以下のとおり。

<ul>
<li>リストブロック1</li>
</ul>

<!-- コメントアウト -->

<ul>
<li>リストブロック2</li>
</ul>

ただし、これは原文の見た目を損なうため、ライブプレビューを利用しない執筆スタイルの場合は好ましくない。

それ以外だと、エディタ特有の仕様に頼るしかなさそうに思われる。

typewrite.io の場合

例として、typewrite.ioの場合、ふたつのリストブロックに異なるシンタックスを用いることで、リストブロックを分離することができる。

 * これは
 * ひとつめの
 * リストブロック
 + これは
 + ふたつめの
 + リストブロック

変換後のHTMLコード例は以下のとおり。

<ul>
<li>これは</li>
<li>ひとつめの</li>
<li>リストブロック</li>
</ul>
<ul>
<li>これは</li>
<li>ふたつめの</li>
<li>リストブロック</li>
</ul>

余談めくが、ネストした場合、異なるシンタックスであってもひとつのリストブロックとみなされる。

* これは
    + ひとつめの
    + リストブロック
- これは
    + ふたつめの
    + リストブロック

変換後のHTMLコード例は以下のとおり。

<ul>
<li>これは<ul>
<li>ひとつめの</li>
<li>リストブロック</li>
</ul>
</li>
</ul>
<ul>
<li>これは<ul>
<li>ふたつめの</li>
<li>リストブロック</li>
</ul>
</li>
</ul>

このような特殊な仕様を持たないエディタの場合、大人しく何らかのブロック要素を挟むか、HTMLで書く以外に方法はなさそう。

シンプルゆえのこういう融通の利かなさが、Markdownの欠点ではある。