Write markdown-like tables easily.
Example
Have a look at the source here.
Usage
You can simply copy the markdown table and paste it in tablem
function.
#import "@preview/tablem:0.2.0": tablem, three-line-table
#tablem[
| *Name* | *Location* | *Height* | *Score* |
| ------ | ---------- | -------- | ------- |
| John | Second St. | 180 cm | 5 |
| Wally | Third Av. | 160 cm | 10 |
]
And you can use custom render function.
#import "@preview/tablem:0.2.0": tablem, three-line-table
#let three-line-table = tablem.with(
render: (columns: auto, ..args) => {
table(
columns: columns,
stroke: none,
align: center + horizon,
table.hline(y: 0),
table.hline(y: 1, stroke: .5pt),
..args,
table.hline(),
)
}
)
#three-line-table[
| *Name* | *Location* | *Height* | *Score* |
| ------ | ---------- | -------- | ------- |
| John | Second St. | 180 cm | 5 |
| Wally | Third Av. | 160 cm | 10 |
]
Cell merging
Tablem supports both horizontal and vertical cell merging. You can merge cells using either <
(or empty cell) for horizontal merging, and ^
(or empty cell) for vertical merging.
Horizontal Cell Merging
Here’s an example of horizontal cell merging:
#three-line-table[
| Substance | Subcritical °C | Supercritical °C |
| --------------------- | -------------- | ---------------- |
| Hydrochloric Acid | 12.0 | 92.1 |
| Sodium Myreth Sulfate | 16.6 | 104 |
| Potassium Hydroxide | 24.7 | < |
]
You can also use empty cells instead of <
:
| Potassium Hydroxide | 24.7 | |
Both syntaxes will produce the same result where “24.7” spans across two columns.
Vertical and Combined Cell Merging
You can merge cells vertically using ^
or empty cells, and even combine horizontal and vertical merging.
#tablem(ignore-second-row: false)[
| Soldier | Hero | < | Soldier |
| Guard | Horizontal | < | Guard |
| ^ | Soldier | Soldier | ^ |
| Soldier | Gate | < | Soldier |
]
tablem
function
#let tablem(
render: table,
ignore-second-row: true,
use-table-header: true,
..args,
body
) = { .. }
Arguments:
render
: [(columns: int, ..args) => { .. }
] — Custom render function, default to betable
, receiving a integer-type columns, which is the count of first row...args
is the combination ofargs
oftablem
function and children genenerated frombody
.ignore-second-row
: [boolean
] — Whether to ignore the second row (something like|---|
). Default to betrue
.use-table-header
: [boolean
] — Whether to usetable.header
wrapper for the first row. Default to betrue
.args
: [any
] — Some arguments you want to pass torender
function.body
: [content
] — The markdown-like table. There should be no extra line breaks in it.
License
This project is licensed under the MIT License.