A Typst package for creating horizontal columned lists, similar to LaTeX’s tasks package. Perfect for exercises, multiple-choice questions, and any content that benefits from a compact columned layout.
Gallery
Click on an image to see the source code.
![]() |
![]() |
![]() |
| Basic Tasks | Math Exercises | Custom Labels |
![]() |
![]() |
![]() |
| Vertical Flow | Column Spanning | Bold Labels |
Features
- Horizontal flow layout - Items flow left-to-right across columns (like LaTeX’s tasks)
- Flexible column counts - 2, 3, 4 or any number of columns
- Column spanning - Items can span multiple columns using
(N)syntax - Multiple label formats - Alphabetic (
a),A)), numeric (1),(1)), roman (i),I)), bullets, or custom - Bold labels - Make labels stand out with bold weight
- Resume numbering - Continue numbering across multiple task blocks
- Two flow directions - Horizontal (a b | c d) or vertical (a c | b d)
- Global configuration - Set defaults for all tasks in your document
- Shorthand functions -
tasks2,tasks3,tasks4for quick column setup
Quick Start
#import "@preview/taskize:0.2.0": tasks
#tasks[
+ First item
+ Second item
+ Third item
+ Fourth item
]
Basic Usage
Simple Two-Column Layout
#import "@preview/taskize:0.2.0": tasks
#tasks[
+ $2 + 3 = ?$
+ $5 - 2 = ?$
+ $4 times 3 = ?$
+ $8 div 2 = ?$
]
Three-Column Layout
#import "@preview/taskize:0.2.0": tasks
#tasks(columns: 3)[
+ Option A
+ Option B
+ Option C
+ Option D
+ Option E
+ Option F
]
Shorthand Functions
#import "@preview/taskize:0.2.0": tasks2, tasks3, tasks4
// Two columns
#tasks2[
+ Item 1
+ Item 2
]
// Three columns
#tasks3[
+ Item 1
+ Item 2
+ Item 3
]
// Four columns
#tasks4[
+ A
+ B
+ C
+ D
]
Label Formats
Built-in Formats
#import "@preview/taskize:0.2.0": tasks
// Lowercase letters with parenthesis (default)
#tasks(label: "a)")[+ One + Two + Three]
// Uppercase letters
#tasks(label: "A)")[+ One + Two + Three]
// Numbers with parenthesis
#tasks(label: "1)")[+ One + Two + Three]
// Numbers in parentheses
#tasks(label: "(1)")[+ One + Two + Three]
// Lowercase roman numerals
#tasks(label: "i)")[+ One + Two + Three]
// Uppercase roman numerals
#tasks(label: "I)")[+ One + Two + Three]
// Bullet points
#tasks(label: "*")[+ One + Two + Three]
// Dashes
#tasks(label: "-")[+ One + Two + Three]
// No labels
#tasks(label: none)[+ One + Two + Three]
Custom Label Function
#import "@preview/taskize:0.2.0": tasks
// Custom emoji labels
#tasks(label: n => "Q" + str(n) + ":")[
+ What is 2+2?
+ What is the capital of France?
+ What color is the sky?
]
Flow Direction
Horizontal Flow (Default)
Items fill rows first: a b | c d | e f
#import "@preview/taskize:0.2.0": tasks
#tasks(columns: 2, flow: "horizontal")[
+ a
+ b
+ c
+ d
+ e
+ f
]
// Layout:
// a) b)
// c) d)
// e) f)
Vertical Flow
Items fill columns first: a c e | b d f
#import "@preview/taskize:0.2.0": tasks
#tasks(columns: 2, flow: "vertical")[
+ a
+ b
+ c
+ d
+ e
+ f
]
// Layout:
// a) d)
// b) e)
// c) f)
Resuming Numbering
#import "@preview/taskize:0.2.0": tasks, tasks-reset
#tasks[
+ First
+ Second
+ Third
]
Some text between task blocks...
// Continue numbering from where we left off
#tasks(resume: true)[
+ Fourth
+ Fifth
+ Sixth
]
// Reset counter to start fresh
#tasks-reset()
#tasks[
+ Back to one
+ Two again
]
Starting from a Specific Number
#import "@preview/taskize:0.2.0": tasks
#tasks(start: 5)[
+ This is item 5
+ This is item 6
+ This is item 7
]
Global Configuration
Set defaults for all tasks in your document:
#import "@preview/taskize:0.2.0": tasks, tasks-setup
// Configure global defaults
#tasks-setup(
columns: 3,
label-format: "1)",
column-gutter: 1.5em,
row-gutter: 0.8em,
)
// All subsequent tasks use these defaults
#tasks[
+ Item 1
+ Item 2
+ Item 3
]
// Override specific settings per-call
#tasks(columns: 2, label: "a)")[
+ Override A
+ Override B
]
Advanced Features
Label Baseline Alignment
Control the vertical alignment of labels relative to content:
#import "@preview/taskize:0.2.0": tasks
// Center alignment (default)
#tasks(label-baseline: "center")[
+ Short item
+ Multi-line item\
with more text
]
// Top alignment
#tasks(label-baseline: "top")[
+ Item aligned at top
+ Another item
]
// Bottom alignment
#tasks(label-baseline: "bottom")[
+ Item aligned at bottom
+ Another item
]
Bold Labels
Make labels stand out by using bold weight:
#import "@preview/taskize:0.2.0": tasks
// Bold labels for emphasis
#tasks(label-weight: "bold")[
+ Important task
+ Critical item
+ Key point
]
// Regular labels (default)
#tasks(label-weight: "regular")[
+ Normal item
+ Standard task
]
Column Spanning
Items can span multiple columns using the +() or +(N) syntax (no space after +). This is similar to LaTeX’s \task* command:
#import "@preview/taskize:0.2.0": tasks
#tasks(columns: 3)[
+ Short
+ Short
+ Short
+(2) This item spans 2 columns
+ Short
+() This item spans all columns (full width)
+ Normal
+ Normal
]
// Practical example: Multiple choice with explanation
#tasks(columns: 2, label: "A)")[
+ Paris
+ London
+ Berlin
+ Madrid
+() The capital of France is Paris, known for the Eiffel Tower.
]
Syntax:
+ Content- Normal item (spans 1 column)+(2) Content- Spans 2 columns (no space after +)+(3) Content- Spans 3 columns+() Content- Spans all columns (full width)
Notes:
- Important: No space between
+and()or(N) - If an item with span doesn’t fit in the current row, it wraps to the next row
- Column spans are clamped to the total number of columns
- Great for adding explanations, headings, or long content within lists
Parameters Reference
tasks Function
| Parameter | Type | Default | Description |
|---|---|---|---|
columns |
int | 2 | Number of columns |
label |
string/function | "a)" |
Label format (shorthand for label-format) |
label-format |
string/function | "a)" |
Label format |
start |
int | 1 | Starting number for labels |
resume |
bool | false | Continue numbering from previous block |
column-gutter |
length | 1em | Space between columns |
row-gutter |
length | 0.6em | Space between rows |
label-width |
auto/length | auto | Width reserved for labels |
label-align |
alignment | right | Label alignment |
label-baseline |
string/length | "center" |
Label vertical alignment: "center", "top", "bottom", or length |
label-weight |
string | "regular" |
Label font weight: "regular" or "bold" |
indent-after-label |
length | 0.4em | Space between label and content |
indent |
length | 0pt | Left indentation of entire block |
above |
length | 0.5em | Space before block |
below |
length | 0.5em | Space after block |
flow |
string | "horizontal" |
Flow direction: "horizontal" or "vertical" |
Label Format Options
| Format | Example | Description |
|---|---|---|
"a)" |
a) b) c) | Lowercase letters with closing paren |
"a." |
a. b. c. | Lowercase letters with period |
"(a)" |
(a) (b) © | Lowercase letters in parentheses |
"A)" |
A) B) C) | Uppercase letters with closing paren |
"A." |
A. B. C. | Uppercase letters with period |
"1)" |
1) 2) 3) | Numbers with closing paren |
"1." |
1. 2. 3. | Numbers with period |
"(1)" |
(1) (2) (3) | Numbers in parentheses |
"i)" |
i) ii) iii) | Lowercase roman numerals |
"I)" |
I) II) III) | Uppercase roman numerals |
"*" |
bullet | Bullet points |
"-" |
dash | En-dashes |
none |
(none) | No labels |
| function | custom | Custom function n => content |
Examples
Math Exercise Sheet
#import "@preview/taskize:0.2.0": tasks
= Algebra Practice
Simplify the following expressions:
#tasks(columns: 2)[
+ $x^2 + 2x + 1$
+ $(a + b)^2$
+ $3x - 5 + 2x + 8$
+ $frac(x^2 - 4, x - 2)$
]
Solve for $x$:
#tasks(columns: 2, label: "1)")[
+ $2x + 5 = 13$
+ $x^2 = 16$
+ $3(x - 2) = 15$
+ $frac(x, 4) = 7$
]
Multiple Choice Questions
#import "@preview/taskize:0.2.0": tasks
*Question 1:* What is the capital of France?
#tasks(columns: 2, label: "A)")[
+ London
+ Paris
+ Berlin
+ Madrid
]
*Question 2:* Which planet is closest to the Sun?
#tasks(columns: 2, label: "A)")[
+ Venus
+ Mercury
+ Mars
+ Earth
]
Vocabulary List
#import "@preview/taskize:0.2.0": tasks
= French Vocabulary
#tasks(columns: 3, label: none)[
+ *bonjour* - hello
+ *merci* - thank you
+ *oui* - yes
+ *non* - no
+ *s'il vous plait* - please
+ *au revoir* - goodbye
]
When to Use taskize
taskize is specifically designed for horizontal columned layouts where items flow left-to-right across multiple columns, perfect for exercises, multiple-choice questions, and compact lists. Choose taskize when you need:
- Horizontal flow layout - Items arranged in rows across columns (a b | c d | e f)
- Compact exercise sheets - Mathematical exercises, vocabulary lists, multiple-choice questions
- Flexible column control - Easy 2, 3, 4+ column layouts with shorthand functions
- Resume numbering - Continue numbering across multiple task blocks
- LaTeX tasks compatibility - Familiar syntax for users migrating from LaTeX’s tasks package
Comparison with itemize
itemize is an excellent, feature-rich package for vertical list styling with advanced customization capabilities. Use itemize when you need:
- Vertical lists with advanced styling (colors, custom markers, spacing)
- Nested lists with sophisticated formatting
- Rich marker customization (emojis, custom content, per-item markers)
- Advanced typography control over list appearance
- Complex list hierarchies with fine-grained control
In summary: Use taskize for horizontal multi-column layouts (exercises, quizzes, compact lists), and use itemize for feature-rich vertical lists with advanced styling. They complement each other well for different layout needs.
License
MIT License - see LICENSE file for details.
Changelog
All notable changes to taskize are documented here.
[0.2.0] - 2026-01-15
Added
- Column spanning - Items can span multiple columns using
(N)syntax (e.g.,+ (2) Contentor+ () Full width) label-baselineparameter for controlling vertical alignment of labels ("center","top","bottom", or custom length)label-weightparameter for bold labels ("regular"or"bold")- Advanced Features section in documentation with examples
- Gallery examples for column spanning and bold labels
Changed
- Repository URL updated to GitLab:
https://gitlab.com/nathan-ed/typst-package-taskize - Description enhanced to mention “Horizontal and vertical” flow directions
[0.1.0] - 2026-01-14
Added
- Initial release with horizontal columned list layout
- Flexible column counts (2, 3, 4, or custom)
- Multiple label formats (alphabetic, numeric, roman, bullets, custom)
- Resume numbering across multiple task blocks
- Two flow directions: horizontal (a b | c d) and vertical (a c | b d)
- Global configuration system with
tasks-setup() - Shorthand functions
tasks2,tasks3,tasks4 - Comprehensive parameter customization
- Full documentation with examples and parameter reference





