Skip to content

Instantly share code, notes, and snippets.

@baptiste
Created October 8, 2025 07:36
Show Gist options
  • Select an option

  • Save baptiste/b27ccb560a070bcff9e81bcccf3c25ac to your computer and use it in GitHub Desktop.

Select an option

Save baptiste/b27ccb560a070bcff9e81bcccf3c25ac to your computer and use it in GitHub Desktop.
#let poster(
// The poster's size.
size: "'36x24' or '48x36''",
// The poster's title.
title: "Paper Title",
// A string of author names.
authors: "Author Names (separated by commas)",
// Department name.
departments: "Department Name",
// University logo.
univ_logo: "Logo Path",
// Footer text.
// For instance, Name of Conference, Date, Location.
// or Course Name, Date, Instructor.
footer_text: "Footer Text",
// Any URL, like a link to the conference website.
footer_url: "Footer URL",
// Email IDs of the authors.
footer_email_ids: "Email IDs (separated by commas)",
// Color of the footer.
footer_color: "Hex Color Code",
// DEFAULTS
// ========
// For 3-column posters, these are generally good defaults.
// Tested on 36in x 24in, 48in x 36in, and 36in x 48in posters.
// For 2-column posters, you may need to tweak these values.
// See ./examples/example_2_column_18_24.typ for an example.
// Any keywords or index terms that you want to highlight at the beginning.
keywords: (),
// Number of columns in the poster.
num_columns: "3",
// University logo's scale (in %).
univ_logo_scale: "100",
// University logo's column size (in in).
univ_logo_column_size: "10",
// Title and authors' column size (in in).
title_column_size: "20",
// Poster title's font size (in pt).
title_font_size: "48",
// Authors' font size (in pt).
authors_font_size: "36",
// Footer's URL and email font size (in pt).
footer_url_font_size: "30",
// Footer's text font size (in pt).
footer_text_font_size: "40",
// The poster's content.
body
) = {
// Set the body font.
set text(font: "STIX Two Text", size: 16pt)
let sizes = size.split("x")
let width = int(sizes.at(0)) * 1in
let height = int(sizes.at(1)) * 1in
univ_logo_scale = int(univ_logo_scale) * 1%
title_font_size = int(title_font_size) * 1pt
authors_font_size = int(authors_font_size) * 1pt
num_columns = int(num_columns)
univ_logo_column_size = int(univ_logo_column_size) * 1in
title_column_size = int(title_column_size) * 1in
footer_url_font_size = int(footer_url_font_size) * 1pt
footer_text_font_size = int(footer_text_font_size) * 1pt
// Configure the page.
// This poster defaults to 36in x 24in.
set page(
width: width,
height: height,
margin:
(top: 1in, left: 2in, right: 2in, bottom: 2in),
footer: [
#set align(center)
#set text(32pt)
#block(
fill: rgb(footer_color),
width: 100%,
inset: 20pt,
radius: 10pt,
[
#text(font: "Courier", size: footer_url_font_size, footer_url)
#h(1fr)
#text(size: footer_text_font_size, smallcaps(footer_text))
#h(1fr)
#text(font: "Courier", size: footer_url_font_size, footer_email_ids)
]
)
]
)
// Configure equation numbering and spacing.
set math.equation(numbering: "(1)")
show math.equation: set block(spacing: 0.65em)
// Configure lists.
set enum(indent: 10pt, body-indent: 9pt)
set list(indent: 10pt, body-indent: 9pt)
// Configure headings.
set heading(numbering: "I.A.1.")
show heading: it => context {
// Find out the final number of the heading counter.
let levels = counter(heading).get()
let deepest = if levels != () {
levels.last()
} else {
1
}
set text(24pt, weight: 400)
if it.level == 1 [
// First-level headings are centered smallcaps.
#set align(center)
#set text({ 32pt })
#show: smallcaps
#v(50pt, weak: true)
#if it.numbering != none {
numbering("I.", deepest)
h(7pt, weak: true)
}
#it.body
#v(35.75pt, weak: true)
#line(length: 100%)
] else if it.level == 2 [
// Second-level headings are run-ins.
#set text(style: "italic")
#v(32pt, weak: true)
#if it.numbering != none {
numbering("i.", deepest)
h(7pt, weak: true)
}
#it.body
#v(10pt, weak: true)
] else [
// Third level headings are run-ins too, but different.
#if it.level == 3 {
numbering("1)", deepest)
[ ]
}
_#(it.body):_
]
}
// Arranging the logo, title, authors, and department in the header.
align(center,
grid(
rows: 2,
columns: (univ_logo_column_size, title_column_size),
column-gutter: 0pt,
row-gutter: 50pt,
image(univ_logo, width: univ_logo_scale),
text(title_font_size, title + "\n\n") +
text(authors_font_size, emph(authors) +
" (" + departments + ") "),
)
)
// Start three column mode and configure paragraph properties.
show: columns.with(num_columns, gutter: 64pt)
set par(justify: true, first-line-indent: 0em)
show par: set block(spacing: 0.65em)
// Display the keywords.
if keywords != () [
#set text(24pt, weight: 400)
#show "Keywords": smallcaps
*Keywords* --- #keywords.join(", ")
]
// Display the poster's contents.
body
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment