環境
- Python 3.12.1
- sphinx 7.4.7
- pydata-sphinx-theme 0.15.4
はじめに
MarkDownでは、ネストされた箇条書きは以下のように書けます。
* A
* B
* C
* X
* Y
* D
下図は、Visual Studio CodeのMarkdown拡張で表示した結果です。
reStructuredTextの場合
MarkDownと同じ内容の場合
上記のテキストをreStructuredTextとしてsphinxでビルドしたら、以下のHTMLが出力されました。
ネストされていますが、HTMLのdt
タグによってC
だけ太字になっていました。
<ul class="simple">
<li><p>A</p></li>
<li><p>B</p></li>
<li><dl class="simple">
<dt>C</dt><dd><ul>
<li><p>X</p></li>
<li><p>Y</p></li>
</ul>
</dd>
</dl>
</li>
<li><p>D</p></li>
</ul>
reStructuredTextのDefinition listとしてみなされているようです。
ネストされている部分に空行を入れる
公式ドキュメントには、
ネストされたリストも使用できますが、親のリストとは空白行で区切る必要があります:
とあるので、空行を入れてみました。
* A
* B
* C
* X
* Y
* D
X
,Y
はネストされずに、引用された形式になりました。
<ul>
<li><p>A</p></li>
<li><p>B</p></li>
<li><p>C</p>
<blockquote>
<div><ul class="simple">
<li><p>X</p></li>
<li><p>Y</p></li>
</ul>
</div></blockquote>
</li>
<li><p>D</p></li>
</ul>
Sphinxのドキュメントには、
前の段落より1段インデントが深い段落は引用になります。:
と書いてあったので、インデントが「引用」とみなされたようです。
インデントを空白4文字から空白2文字にする
空白を入れずに、インデントを空白4文字から空白2文字にしました。
* A
* B
* C
* X
* Y
* D
X
とY
は箇条書きとみなされませんでした。
<ul class="simple">
<li><p>A</p></li>
<li><p>B</p></li>
<li><p>C
* X
* Y</p></li>
<li><p>D</p></li>
</ul>
空行を入れて、インデントを空白4文字から空白2文字にする
* A
* B
* C
* X
* Y
* D
期待通り、X
とY
はネストされました。
<ul class="simple">
<li><p>A</p></li>
<li><p>B</p></li>
<li><p>C</p>
<ul>
<li><p>X</p></li>
<li><p>Y</p></li>
</ul>
</li>
<li><p>D</p></li>
</ul>
まとめ
reStructuredTextでネストされた箇条書きを書く場合は、ネストされている箇条書きの上下に空行を入れて、インデントは空白2文字にします。