TypstDocumentation

tableElement
Question mark

A table of items.

Tables are used to arrange content in cells. Cells can contain arbitrary content, including multiple paragraphs and are specified in row-major order. Because tables are just grids with configurable cell properties, refer to the grid documentation for more information on how to size the table tracks.

To give a table a caption and make it referenceable, put it into a figure.

Example

#table(
  columns: (1fr, auto, auto),
  inset: 10pt,
  align: horizon,
  [], [*Area*], [*Parameters*],
  image("cylinder.svg"),
  $ pi h (D^2 - d^2) / 4 $,
  [
    $h$: height \
    $D$: outer radius \
    $d$: inner radius
  ],
  image("tetrahedron.svg"),
  $ sqrt(2) / 12 a^3 $,
  [$a$: edge length]
)
Preview

Parameters
Question mark

columns
auto or int or relative or fraction or array
Settable
Question mark

The column sizes. See the grid documentation for more information on track sizing.

Default: ()

rows
auto or int or relative or fraction or array
Settable
Question mark

The row sizes. See the grid documentation for more information on track sizing.

Default: ()

gutter
auto or int or relative or fraction or array
Settable
Question mark

The gaps between rows & columns. See the grid documentation for more information on gutters.

Default: ()

column-gutter
auto or int or relative or fraction or array
Settable
Question mark

The gaps between columns. Takes precedence over gutter. See the grid documentation for more information on gutters.

Default: ()

row-gutter
auto or int or relative or fraction or array
Settable
Question mark

The gaps between rows. Takes precedence over gutter. See the grid documentation for more information on gutters.

Default: ()

fill
none or color or array or function
Settable
Question mark

How to fill the cells.

This can be a color or a function that returns a color. The function is passed the cells' column and row index, starting at zero. This can be used to implement striped tables.

Default: none

View example
#table(
  fill: (col, _) => if calc.odd(col) { luma(240) } else { white },
  align: (col, row) =>
    if row == 0 { center }
    else if col == 0 { left }
    else { right },
  columns: 4,
  [], [*Q1*], [*Q2*], [*Q3*],
  [Revenue:], [1000 €], [2000 €], [3000 €],
  [Expenses:], [500 €], [1000 €], [1500 €],
  [Profit:], [500 €], [1000 €], [1500 €],
)
Preview

align
auto or array or alignment or function
Settable
Question mark

How to align the cells' content.

This can either be a single alignment, an array of alignments (corresponding to each column) or a function that returns an alignment. The function is passed the cells' column and row index, starting at zero. If set to auto, the outer alignment is used.

Default: auto

View example
#table(
  columns: 3,
  align: (x, y) => (left, center, right).at(x),
  [Hello], [Hello], [Hello],
  [A], [B], [C],
)
Preview

stroke
none or length or color or stroke or dictionary
Settable
Question mark

How to stroke the cells.

Strokes can be disabled by setting this to none.

Note: Richer stroke customization for individual cells is not yet implemented, but will be in the future. In the meantime, you can use the third-party tablex library.

Default: 1pt + black

inset
relative
Settable
Question mark

How much to pad the cells' content.

Default: 5pt

children
content
RequiredPositional
Question mark
Variadic
Question mark

The contents of the table cells.