pub struct TableElem {
pub children: Vec<TableChild>,
/* private fields */
}
Expand description
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. For a hands-on explanation of all the ways you can use and customize tables in Typst, check out the table guide.
Because tables are just grids with different defaults for some cell
properties (notably stroke
and inset
), refer to the grid
documentation for more information on how to size the table tracks
and specify the cell appearance properties.
If you are unsure whether you should be using a table or a grid, consider
whether the content you are arranging semantically belongs together as a set
of related data points or similar or whether you are just want to enhance
your presentation by arranging unrelated content in a grid. In the former
case, a table is the right choice, while in the latter case, a grid is more
appropriate. Furthermore, Typst will annotate its output in the future such
that screenreaders will announce content in table
as tabular while a
grid’s content will be announced no different than multiple content blocks
in the document flow.
Note that, to override a particular cell’s properties or apply show rules on
table cells, you can use the table.cell
element. See its
documentation for more information.
Although the table
and the grid
share most properties, set and show
rules on one of them do not affect the other.
To give a table a caption and make it referenceable, put it into a [figure].
§Example
The example below demonstrates some of the most common table options.
#table(
columns: (1fr, auto, auto),
inset: 10pt,
align: horizon,
table.header(
[], [*Volume*], [*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]
)
Much like with grids, you can use table.cell
to customize
the appearance and the position of each cell.
>>> #set page(width: auto)
>>> #set text(font: "IBM Plex Sans")
>>> #let gray = rgb("#565565")
>>>
#set table(
stroke: none,
gutter: 0.2em,
fill: (x, y) =>
if x == 0 or y == 0 { gray },
inset: (right: 1.5em),
)
#show table.cell: it => {
if it.x == 0 or it.y == 0 {
set text(white)
strong(it)
} else if it.body == [] {
// Replace empty cells with 'N/A'
pad(..it.inset)[_N/A_]
} else {
it
}
}
#let a = table.cell(
fill: green.lighten(60%),
)[A]
#let b = table.cell(
fill: aqua.lighten(60%),
)[B]
#table(
columns: 4,
[], [Exam 1], [Exam 2], [Exam 3],
[John], [], a, [],
[Mary], [], a, a,
[Robert], b, a, b,
)
Fields§
§children: Vec<TableChild>
Implementations§
Source§impl TableElem
impl TableElem
Sourcepub fn new(children: Vec<TableChild>) -> Self
pub fn new(children: Vec<TableChild>) -> Self
Create a new instance of the element.
Sourcepub fn with_columns(self, columns: TrackSizings) -> Self
pub fn with_columns(self, columns: TrackSizings) -> Self
Builder-style setter for the columns
field.
Sourcepub fn with_rows(self, rows: TrackSizings) -> Self
pub fn with_rows(self, rows: TrackSizings) -> Self
Builder-style setter for the rows
field.
Sourcepub fn with_column_gutter(self, column_gutter: TrackSizings) -> Self
pub fn with_column_gutter(self, column_gutter: TrackSizings) -> Self
Builder-style setter for the column-gutter
field.
Sourcepub fn with_row_gutter(self, row_gutter: TrackSizings) -> Self
pub fn with_row_gutter(self, row_gutter: TrackSizings) -> Self
Builder-style setter for the row-gutter
field.
Sourcepub fn with_fill(self, fill: Celled<Option<Paint>>) -> Self
pub fn with_fill(self, fill: Celled<Option<Paint>>) -> Self
Builder-style setter for the fill
field.
Sourcepub fn with_align(self, align: Celled<Smart<Alignment>>) -> Self
pub fn with_align(self, align: Celled<Smart<Alignment>>) -> Self
Builder-style setter for the align
field.
Sourcepub fn with_stroke(
self,
stroke: Celled<Sides<Option<Option<Arc<Stroke>>>>>,
) -> Self
pub fn with_stroke( self, stroke: Celled<Sides<Option<Option<Arc<Stroke>>>>>, ) -> Self
Builder-style setter for the stroke
field.
Sourcepub fn with_inset(self, inset: Celled<Sides<Option<Rel<Length>>>>) -> Self
pub fn with_inset(self, inset: Celled<Sides<Option<Rel<Length>>>>) -> Self
Builder-style setter for the inset
field.
Sourcepub fn push_columns(&mut self, columns: TrackSizings)
pub fn push_columns(&mut self, columns: TrackSizings)
Setter for the columns
field.
Sourcepub fn push_rows(&mut self, rows: TrackSizings)
pub fn push_rows(&mut self, rows: TrackSizings)
Setter for the rows
field.
Sourcepub fn push_column_gutter(&mut self, column_gutter: TrackSizings)
pub fn push_column_gutter(&mut self, column_gutter: TrackSizings)
Setter for the column-gutter
field.
Sourcepub fn push_row_gutter(&mut self, row_gutter: TrackSizings)
pub fn push_row_gutter(&mut self, row_gutter: TrackSizings)
Setter for the row-gutter
field.
Sourcepub fn push_stroke(
&mut self,
stroke: Celled<Sides<Option<Option<Arc<Stroke>>>>>,
)
pub fn push_stroke( &mut self, stroke: Celled<Sides<Option<Option<Arc<Stroke>>>>>, )
Setter for the stroke
field.
Sourcepub fn push_inset(&mut self, inset: Celled<Sides<Option<Rel<Length>>>>)
pub fn push_inset(&mut self, inset: Celled<Sides<Option<Rel<Length>>>>)
Setter for the inset
field.
Sourcepub fn columns<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
pub fn columns<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
The column sizes. See the grid documentation for more information on track sizing.
Sourcepub fn rows<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
pub fn rows<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
The row sizes. See the grid documentation for more information on track sizing.
Sourcepub fn column_gutter<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
pub fn column_gutter<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
The gaps between columns. Takes precedence over gutter
. See the
grid documentation for more information on gutters.
Sourcepub fn row_gutter<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
pub fn row_gutter<'a>(&'a self, styles: StyleChain<'a>) -> &'a TrackSizings
The gaps between rows. Takes precedence over gutter
. See the
grid documentation for more information on gutters.
Sourcepub fn fill<'a>(&'a self, styles: StyleChain<'a>) -> &'a Celled<Option<Paint>>
pub fn fill<'a>(&'a self, styles: StyleChain<'a>) -> &'a Celled<Option<Paint>>
How to fill the cells.
This can be a color or a function that returns a color. The function receives the cells’ column and row indices, starting from zero. This can be used to implement striped tables.
#table(
fill: (x, _) =>
if calc.odd(x) { luma(240) }
else { white },
align: (x, y) =>
if y == 0 { center }
else if x == 0 { left }
else { right },
columns: 4,
[], [*Q1*], [*Q2*], [*Q3*],
[Revenue:], [1000 €], [2000 €], [3000 €],
[Expenses:], [500 €], [1000 €], [1500 €],
[Profit:], [500 €], [1000 €], [1500 €],
)
Sourcepub fn align<'a>(
&'a self,
styles: StyleChain<'a>,
) -> &'a Celled<Smart<Alignment>>
pub fn align<'a>( &'a self, styles: StyleChain<'a>, ) -> &'a Celled<Smart<Alignment>>
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 receives the cells’ column and row indices, starting from
zero. If set to {auto}
, the outer alignment is used.
#table(
columns: 3,
align: (left, center, right),
[Hello], [Hello], [Hello],
[A], [B], [C],
)
Sourcepub fn stroke(
&self,
styles: StyleChain<'_>,
) -> <Celled<Sides<Option<Option<Arc<Stroke>>>>> as Resolve>::Output
pub fn stroke( &self, styles: StyleChain<'_>, ) -> <Celled<Sides<Option<Option<Arc<Stroke>>>>> as Resolve>::Output
How to [stroke] the cells.
Strokes can be disabled by setting this to {none}
.
If it is necessary to place lines which can cross spacing between cells
produced by the gutter
option, or to override the stroke between
multiple specific cells, consider specifying one or more of
table.hline
and table.vline
alongside your table cells.
See the grid documentation for more information on strokes.
Sourcepub fn inset(
&self,
styles: StyleChain<'_>,
) -> Celled<Sides<Option<Rel<Length>>>>
pub fn inset( &self, styles: StyleChain<'_>, ) -> Celled<Sides<Option<Rel<Length>>>>
How much to pad the cells’ content.
#table(
inset: 10pt,
[Hello],
[World],
)
#table(
columns: 2,
inset: (
x: 20pt,
y: 10pt,
),
[Hello],
[World],
)
Sourcepub fn columns_in(styles: StyleChain<'_>) -> &TrackSizings
pub fn columns_in(styles: StyleChain<'_>) -> &TrackSizings
Access the columns
field in the given style chain.
Sourcepub fn rows_in(styles: StyleChain<'_>) -> &TrackSizings
pub fn rows_in(styles: StyleChain<'_>) -> &TrackSizings
Access the rows
field in the given style chain.
Sourcepub fn column_gutter_in(styles: StyleChain<'_>) -> &TrackSizings
pub fn column_gutter_in(styles: StyleChain<'_>) -> &TrackSizings
Access the column-gutter
field in the given style chain.
Sourcepub fn row_gutter_in(styles: StyleChain<'_>) -> &TrackSizings
pub fn row_gutter_in(styles: StyleChain<'_>) -> &TrackSizings
Access the row-gutter
field in the given style chain.
Sourcepub fn fill_in(styles: StyleChain<'_>) -> &Celled<Option<Paint>>
pub fn fill_in(styles: StyleChain<'_>) -> &Celled<Option<Paint>>
Access the fill
field in the given style chain.
Sourcepub fn align_in(styles: StyleChain<'_>) -> &Celled<Smart<Alignment>>
pub fn align_in(styles: StyleChain<'_>) -> &Celled<Smart<Alignment>>
Access the align
field in the given style chain.
Sourcepub fn stroke_in(
styles: StyleChain<'_>,
) -> <Celled<Sides<Option<Option<Arc<Stroke>>>>> as Resolve>::Output
pub fn stroke_in( styles: StyleChain<'_>, ) -> <Celled<Sides<Option<Option<Arc<Stroke>>>>> as Resolve>::Output
Access the stroke
field in the given style chain.
Sourcepub fn inset_in(styles: StyleChain<'_>) -> Celled<Sides<Option<Rel<Length>>>>
pub fn inset_in(styles: StyleChain<'_>) -> Celled<Sides<Option<Rel<Length>>>>
Access the inset
field in the given style chain.
Sourcepub fn set_columns(columns: TrackSizings) -> Property
pub fn set_columns(columns: TrackSizings) -> Property
Create a style property for the columns
field.
Sourcepub fn set_rows(rows: TrackSizings) -> Property
pub fn set_rows(rows: TrackSizings) -> Property
Create a style property for the rows
field.
Sourcepub fn set_column_gutter(column_gutter: TrackSizings) -> Property
pub fn set_column_gutter(column_gutter: TrackSizings) -> Property
Create a style property for the column-gutter
field.
Sourcepub fn set_row_gutter(row_gutter: TrackSizings) -> Property
pub fn set_row_gutter(row_gutter: TrackSizings) -> Property
Create a style property for the row-gutter
field.
Sourcepub fn set_fill(fill: Celled<Option<Paint>>) -> Property
pub fn set_fill(fill: Celled<Option<Paint>>) -> Property
Create a style property for the fill
field.
Sourcepub fn set_align(align: Celled<Smart<Alignment>>) -> Property
pub fn set_align(align: Celled<Smart<Alignment>>) -> Property
Create a style property for the align
field.
Trait Implementations§
Source§impl Fields for TableElem
impl Fields for TableElem
Source§fn field(&self, id: u8) -> Result<Value, FieldAccessError>
fn field(&self, id: u8) -> Result<Value, FieldAccessError>
Source§fn field_with_styles(
&self,
id: u8,
styles: StyleChain<'_>,
) -> Result<Value, FieldAccessError>
fn field_with_styles( &self, id: u8, styles: StyleChain<'_>, ) -> Result<Value, FieldAccessError>
Source§fn field_from_styles(
id: u8,
styles: StyleChain<'_>,
) -> Result<Value, FieldAccessError>
fn field_from_styles( id: u8, styles: StyleChain<'_>, ) -> Result<Value, FieldAccessError>
Source§fn materialize(&mut self, styles: StyleChain<'_>)
fn materialize(&mut self, styles: StyleChain<'_>)
Source§impl NativeElement for TableElem
impl NativeElement for TableElem
Source§impl NativeScope for TableElem
impl NativeScope for TableElem
Source§fn constructor() -> Option<&'static NativeFuncData>
fn constructor() -> Option<&'static NativeFuncData>
Auto Trait Implementations§
impl Freeze for TableElem
impl !RefUnwindSafe for TableElem
impl Send for TableElem
impl Sync for TableElem
impl Unpin for TableElem
impl !UnwindSafe for TableElem
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult for Twhere
T: IntoValue,
impl<T> IntoResult for Twhere
T: IntoValue,
Source§fn into_result(self, _: Span) -> Result<Value, EcoVec<SourceDiagnostic>>
fn into_result(self, _: Span) -> Result<Value, EcoVec<SourceDiagnostic>>
Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more