https://github.com/OrangeX4/typst-tablem
Write markdown-like tables easily.
https://github.com/OrangeX4/typst-tablem
Last synced: 4 months ago
JSON representation
Write markdown-like tables easily.
- Host: GitHub
- URL: https://github.com/OrangeX4/typst-tablem
- Owner: OrangeX4
- License: mit
- Created: 2023-11-15T08:08:10.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-20T11:15:04.000Z (5 months ago)
- Last Synced: 2025-03-30T00:43:07.501Z (4 months ago)
- Language: Typst
- Size: 49.8 KB
- Stars: 53
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-typst - typst-tablem - Write markdown-like tables easily. (Templates & Libraries / Formatting)
README
# Tablem
Write markdown-like tables easily.
## Example
Have a look at the source [here](./examples/example.typ).

## Usage
You can simply copy the markdown table and paste it in `tablem` function.
```typ
#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.
```typ
#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:
```typ
#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 `<`:
```typ
| 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.
```typ
#tablem(ignore-second-row: false)[
| Soldier | Hero | < | Soldier |
| Guard | Horizontal | < | Guard |
| ^ | Soldier | Soldier | ^ |
| Soldier | Gate | < | Soldier |
]
```
## `tablem` function
```typ
#let tablem(
render: table,
ignore-second-row: true,
use-table-header: true,
..args,
body
) = { .. }
```**Arguments:**
- `render`: [`(columns: int, ..args) => { .. }`] — Custom render function, default to be `table`, receiving a integer-type columns, which is the count of first row. `..args` is the combination of `args` of `tablem` function and children genenerated from `body`.
- `ignore-second-row`: [`boolean`] — Whether to ignore the second row (something like `|---|`). Default to be `true`.
- `use-table-header`: [`boolean`] — Whether to use `table.header` wrapper for the first row. Default to be `true`.
- `args`: [`any`] — Some arguments you want to pass to `render` 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.