text
ElementElement functions can be customized with set
and show
rules.
set
and show
rules.Customize the look and layout of text in a variety of ways.
This function is used often, both with set rules and directly. While the set rule is often the simpler choice, calling the text function directly can be useful when passing text as an argument to another function.
Example
#set text(18pt)
With a set rule.
#emph(text(blue)[
With a function call.
])

ParametersParameters are the inputs to a function. They are specified in parentheses after the function name.
font
A prioritized sequence of font families.
When processing text, Typst tries all specified font families in order
until it finds a font that has the necessary glyphs. In the example
below, the font Inria Serif
is preferred, but since it does not
contain Arabic glyphs, the arabic text uses Noto Sans Arabic
instead.
Default: "linux libertine"
#set text(font: (
"Inria Serif",
"Noto Sans Arabic",
))
This is Latin. \
هذا عربي.

fallback
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether to allow last resort font fallback when the primary font list contains no match. This lets Typst search through all available fonts for the most similar one that has the necessary glyphs.
Note: Currently, there are no warnings when fallback is disabled and no glyphs are found. Instead, your text shows up in the form of "tofus": Small boxes that indicate the lack of an appropriate glyph. In the future, you will be able to instruct Typst to issue warnings so you know something is up.
Default: true
#set text(font: "Inria Serif")
هذا عربي
#set text(fallback: false)
هذا عربي

style
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The desired font style.
When an italic style is requested and only an oblique one is available, it is used. Similarly, the other way around, an italic style can stand in for an oblique one. When neither an italic nor an oblique style is available, Typst selects the normal style. Since most fonts are only available either in an italic or oblique style, the difference between italic and oblique style is rarely observable.
If you want to emphasize your text, you should do so using the emph function instead. This makes it easy to adapt the style later if you change your mind about how to signify the emphasis.
"normal"
The default, typically upright style.
"italic"
A cursive style with custom letterform.
"oblique"
Just a slanted version of the normal style.
Default: "normal"
#text(font: "Linux Libertine", style: "italic")[Italic]
#text(font: "DejaVu Sans", style: "oblique")[Oblique]

weight
The desired thickness of the font's glyphs. Accepts an integer between
100
and 900
or one of the predefined weight names. When the
desired weight is not available, Typst selects the font from the family
that is closest in weight.
If you want to strongly emphasize your text, you should do so using the strong function instead. This makes it easy to adapt the style later if you change your mind about how to signify the strong emphasis.
"thin"
Thin weight (100).
"extralight"
Extra light weight (200).
"light"
Light weight (300).
"regular"
Regular weight (400).
"medium"
Medium weight (500).
"semibold"
Semibold weight (600).
"bold"
Bold weight (700).
"extrabold"
Extrabold weight (800).
"black"
Black weight (900).
Default: "regular"
#set text(font: "IBM Plex Sans")
#text(weight: "light")[Light] \
#text(weight: "regular")[Regular] \
#text(weight: "medium")[Medium] \
#text(weight: 500)[Medium] \
#text(weight: "bold")[Bold]

stretch
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The desired width of the glyphs. Accepts a ratio between 50%
and
200%
. When the desired weight is not available, Typst selects the
font from the family that is closest in stretch. This will only stretch
the text if a condensed or expanded version of the font is available.
If you want to adjust the amount of space between characters instead of
stretching the glyphs itself, use the tracking
property instead.
Default: 100%
#text(stretch: 75%)[Condensed] \
#text(stretch: 100%)[Normal]

size
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The size of the glyphs. This value forms the basis of the em
unit:
1em
is equivalent to the font size.
You can also give the font size itself in em
units. Then, it is
relative to the previous font size.
Default: 11pt
#set text(size: 20pt)
very #text(1.5em)[big] text

fill
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The glyph fill color.
Default: rgb("#000000")
#set text(fill: red)
This text is red.

tracking
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The amount of space that should be added between characters.
Default: 0pt
#set text(tracking: 1.5pt)
Distant text.

spacing
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.The amount of space between words.
Can be given as an absolute length, but also relative to the width of the space character in the font.
If you want to adjust the amount of space between characters rather than
words, use the tracking
property instead.
Default: 100%
#set text(spacing: 200%)
Text with distant words.

baseline
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.An amount to shift the text baseline by.
Default: 0pt
A #text(baseline: 3pt)[lowered]
word.

overhang
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether certain glyphs can hang over into the margin in justified text. This can make justification visually more pleasing.
Default: true
#set par(justify: true)
This justified text has a hyphen in
the paragraph's first line. Hanging
the hyphen slightly into the margin
results in a clearer paragraph edge.
#set text(overhang: false)
This justified text has a hyphen in
the paragraph's first line. Hanging
the hyphen slightly into the margin
results in a clearer paragraph edge.

top-edge
The top end of the conceptual frame around the text used for layout and positioning. This affects the size of containers that hold text.
"ascender"
The font's ascender, which typically exceeds the height of all glyphs.
"cap-height"
The approximate height of uppercase letters.
"x-height"
The approximate height of non-ascending lowercase letters.
"baseline"
The baseline on which the letters rest.
"descender"
The font's ascender, which typically exceeds the depth of all glyphs.
Default: "cap-height"
#set rect(inset: 0pt)
#set text(size: 20pt)
#set text(top-edge: "ascender")
#rect(fill: aqua)[Typst]
#set text(top-edge: "cap-height")
#rect(fill: aqua)[Typst]

bottom-edge
The bottom end of the conceptual frame around the text used for layout and positioning. This affects the size of containers that hold text.
"ascender"
The font's ascender, which typically exceeds the height of all glyphs.
"cap-height"
The approximate height of uppercase letters.
"x-height"
The approximate height of non-ascending lowercase letters.
"baseline"
The baseline on which the letters rest.
"descender"
The font's ascender, which typically exceeds the depth of all glyphs.
Default: "baseline"
#set rect(inset: 0pt)
#set text(size: 20pt)
#set text(bottom-edge: "baseline")
#rect(fill: aqua)[Typst]
#set text(bottom-edge: "descender")
#rect(fill: aqua)[Typst]

lang
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.An ISO 639-1/2/3 language code.
Setting the correct language affects various parts of Typst:
- The text processing pipeline can make more informed choices.
- Hyphenation will use the correct patterns for the language.
- Smart quotes turns into the correct quotes for the language.
- And all other things which are language-aware.
Default: "en"
#set text(lang: "de")
#outline()
= Einleitung
In diesem Dokument, ...

region
An ISO 3166-1 alpha-2 region code.
This lets the text processing pipeline make more informed choices.
Default: none
dir
The dominant direction for text and inline objects. Possible values are:
auto
: Automatically infer the direction from thelang
property.ltr
: Layout text from left to right.rtl
: Layout text from right to left.
When writing in right-to-left scripts like Arabic or Hebrew, you should
set the text language or direction. While individual
runs of text are automatically layouted in the correct direction,
setting the dominant direction gives the bidirectional reordering
algorithm the necessary information to correctly place punctuation and
inline objects. Furthermore, setting the direction affects the alignment
values start
and end
, which are equivalent to left
and right
in
ltr
text and the other way around in rtl
text.
If you set this to rtl
and experience bugs or in some way bad looking
output, please do get in touch with us through the
contact form or our
Discord server!
Default: auto
#set text(dir: rtl)
هذا عربي.

hyphenate
Whether to hyphenate text to improve line breaking. When auto
, text
will be hyphenated if and only if justification is enabled.
Setting the text language ensures that the correct hyphenation patterns are used.
Default: auto
#set page(width: 200pt)
#set par(justify: true)
This text illustrates how
enabling hyphenation can
improve justification.
#set text(hyphenate: false)
This text illustrates how
enabling hyphenation can
improve justification.

kerning
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether to apply kerning.
When enabled, specific letter pairings move closer together or further
apart for a more visually pleasing result. The example below
demonstrates how decreasing the gap between the "T" and "o" results in a
more natural look. Setting this to false
disables kerning by turning
off the OpenType kern
font feature.
Default: true
#set text(size: 25pt)
Totally
#set text(kerning: false)
Totally

alternates
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether to apply stylistic alternates.
Sometimes fonts contain alternative glyphs for the same codepoint.
Setting this to true
switches to these by enabling the OpenType
salt
font feature.
Default: false
#set text(
font: "IBM Plex Sans",
size: 20pt,
)
0, a, g, ß
#set text(alternates: true)
0, a, g, ß

stylistic-set
Which stylistic set to apply. Font designers can categorize alternative
glyphs forms into stylistic sets. As this value is highly font-specific,
you need to consult your font to know which sets are available. When set
to an integer between 1
and 20
, enables the corresponding
OpenType font feature from ss01
, ..., ss20
.
Default: none
ligatures
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether standard ligatures are active.
Certain letter combinations like "fi" are often displayed as a single
merged glyph called a ligature. Setting this to false
disables
these ligatures by turning off the OpenType liga
and clig
font
features.
Default: true
#set text(size: 20pt)
A fine ligature.
#set text(ligatures: false)
A fine ligature.

discretionary-ligatures
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether ligatures that should be used sparingly are active. Setting this
to true
enables the OpenType dlig
font feature.
Default: false
historical-ligatures
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether historical ligatures are active. Setting this to true
enables the OpenType hlig
font feature.
Default: false
number-type
Which kind of numbers / figures to select. When set to auto
, the
default numbers for the font are used.
"lining"
Numbers that fit well with capital text (the OpenType
lnum
font feature)."old-style"
Numbers that fit well into a flow of upper- and lowercase text (the OpenType
onum
font feature).
Default: auto
#set text(font: "Noto Sans", 20pt)
#set text(number-type: "lining")
Number 9.
#set text(number-type: "old-style")
Number 9.

number-width
The width of numbers / figures. When set to auto
, the default
numbers for the font are used.
"proportional"
Numbers with glyph-specific widths (the OpenType
pnum
font feature)."tabular"
Numbers of equal width (the OpenType
tnum
font feature).
Default: auto
#set text(font: "Noto Sans", 20pt)
#set text(number-width: "proportional")
A 12 B 34. \
A 56 B 78.
#set text(number-width: "tabular")
A 12 B 34. \
A 56 B 78.

slashed-zero
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether to have a slash through the zero glyph. Setting this to true
enables the OpenType zero
font feature.
Default: false
0, #text(slashed-zero: true)[0]

fractions
SettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Whether to turn numbers into fractions. Setting this to true
enables the OpenType frac
font feature.
Default: false
1/2 \
#text(fractions: true)[1/2]

features
array or dictionarySettableSettable parameters can be customized for all following uses of the function with a set
rule.
set
rule.Raw OpenType features to apply.
- If given an array of strings, sets the features identified by the
strings to
1
. - If given a dictionary mapping to numbers, sets the features identified by the keys to the values.
Default: (:)
// Enable the `frac` feature manually.
#set text(features: ("frac",))
1/2

body
Content in which all text is styled according to the other arguments.