Skip to content

Multiple Bodies

When multibody is enabled (the default), a blank line between data rows starts a new <tbody> section. This is useful for visually and semantically grouping rows.

Basic example

| Category  | Item    | Price  |
| :-------- | :------ | -----: |
| Fruit     | Apple   | $0.50  |
| Fruit     | Banana  | $0.30  |

| Vegetable | Carrot  | $0.80  |
| Vegetable | Onion   | $0.60  |
Category Item Price
Fruit Apple $0.50
Fruit Banana $0.30

| Vegetable | Carrot | $0.80 | | Vegetable | Onion | $0.60 |

<table>
<thead>
<tr>
<th style="text-align:left">Category</th>
<th style="text-align:left">Item</th>
<th style="text-align:right">Price</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Fruit</td>
<td style="text-align:left">Apple</td>
<td style="text-align:right">$0.50</td>
</tr>
<tr>
<td style="text-align:left">Fruit</td>
<td style="text-align:left">Banana</td>
<td style="text-align:right">$0.30</td>
</tr>
</tbody>
<tbody>
<tr>
<td style="text-align:left">Vegetable</td>
<td style="text-align:left">Carrot</td>
<td style="text-align:right">$0.80</td>
</tr>
<tr>
<td style="text-align:left">Vegetable</td>
<td style="text-align:left">Onion</td>
<td style="text-align:right">$0.60</td>
</tr>
</tbody>
</table>

Three sections

| H |
| - |
| Section 1 row A |
| Section 1 row B |

| Section 2 row A |

| Section 3 row A |
| Section 3 row B |
| Section 3 row C |
H
Section 1 row A
Section 1 row B

| Section 2 row A |

| Section 3 row A | | Section 3 row B | | Section 3 row C |

<table>
<thead>
<tr>
<th>H</th>
</tr>
</thead>
<tbody>
<tr>
<td>Section 1 row A</td>
</tr>
<tr>
<td>Section 1 row B</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Section 2 row A</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Section 3 row A</td>
</tr>
<tr>
<td>Section 3 row B</td>
</tr>
<tr>
<td>Section 3 row C</td>
</tr>
</tbody>
</table>

Disabling multibody

With multibody: false, a blank line ends the table. Any subsequent rows are parsed as a new paragraph.

markdown_extensions:
  - pymdown_multimd_table:
      multibody: false

Note

A blank line followed by a new table (with its own separator row) always starts a new <table> element, regardless of the multibody setting.