# \[ANN\] Typst back end for PrettyTables.jl

**URL:** <https://discourse.julialang.org/t/ann-typst-back-end-for-prettytables-jl/135639>\
**Category:** Package Announcements\
**Created:** [February 14, 2026, 1:33am UTC](https://discourse.julialang.org/t/ann-typst-back-end-for-prettytables-jl/135639 "2026-02-14T01:33:12Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [February 14, 2026, 1:33am UTC](https://discourse.julialang.org/t/ann-typst-back-end-for-prettytables-jl/135639/1 "2026-02-14T01:33:13Z")

</div>

Hi everyone!

After an **amazing** work of @gustavohtc23, PrettyTables.jl now has a Typst back end!

If you load it together with Typstry.jl, you can have a very nice experience in VS Code where all tables shown to `stdout` using the new back end are rendered in the screen.

For example, if you run the following code in Julia REPL inside VS Code:

```julia
using PrettyTables, Typstry

# == Creating the Table ====================================================================

v1_t = 0:5:20

v1_a = ones(length(v1_t)) * 1.0

v1_v = @. 0 + v1_a * v1_t

v1_d = @. 0 + v1_a * v1_t^2 / 2

v2_t = 0:5:20

v2_a = ones(length(v2_t)) * 0.75

v2_v = @. 0 + v2_a * v2_t

v2_d = @. 0 + v2_a * v2_t^2 / 2

table = [
  v1_t v1_a v1_v v1_d
  v2_t v2_a v2_v v2_d
]

# == Configuring the Table =================================================================

title = "Table 1. Data obtained from the test procedure."

subtitle = "Comparison between two vehicles"

column_labels = [
    [EmptyCells(2), MultiColumn(2, "Estimated Data")],
    ["Time (s)", "Acceleration", "Velocity", "Position"],
]

units = [
  typst"#text(fill: gray)[\[s\]]",
  typst"#text(fill: gray)[\[m / s²\]]",
  typst"#text(fill: gray)[\[m / s\]]",
  typst"#text(fill: gray)[\[m\]]",
]

push!(column_labels, units)

merge_column_label_cells = :auto

row_group_labels = [
    1 => "Vehicle #1",
    6 => "Vehicle #2"
]

summary_rows = [
    (data, j) -> maximum(@views data[1:5, j]),
    (data, j) -> maximum(@views data[6:10, j]),
]

summary_row_labels = [
    "Max. for Vehicle #1",
    "Max. for Vehicle #2",
]

footnotes = [
    (:column_label, 1, 3) => "Estimated data based on the acceleration measurement."
]

highlighters = [
    TypstHighlighter((data, i, j) -> (j == 3) && (data[i, j] > 10), ["text-fill" => "red", "text-weight" => "bold"])
    TypstHighlighter((data, i, j) -> (j == 4) && (data[i, j] > 10), ["text-fill" => "blue", "text-weight" => "bold"])
]

# == Printing the Table ====================================================================

pretty_table(
    table;
    backend = :typst,
    column_labels,
    footnotes,
    highlighters,
    merge_column_label_cells,
    row_group_labels,
    subtitle,
    summary_row_labels,
    summary_rows,
    title,
)

```

You get:

 ![Captura de Tela 2026-02-13 às 22.29.20](https://global.discourse-cdn.com/julialang/original/3X/5/2/52e92f923fbafdd1b8ac6cdd416c74b356f3133a.png)

Currently, we do not have a table format option where you can configure the vertical and horizontal lines. However, I am planning to add this new feature next week.

---

<div class="post-metadata">

**Author:** ![dmolina](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dmolina/32/5246_2.png) [@dmolina](https://discourse.julialang.org/u/dmolina)\
**Post date:** [February 14, 2026, 3:37pm UTC](https://discourse.julialang.org/t/ann-typst-back-end-for-prettytables-jl/135639/2 "2026-02-14T15:37:15Z")

</div>

Thank you. Writing typst tables is not easy, you can use packages in typst but they are more limitated. Adding it make for me typst more an alternative to latex (although I use mainly latex). Having both backends is great!
