211 lines
5.0 KiB
Typst
211 lines
5.0 KiB
Typst
/*
|
|
betterposter originally developed by Mike Morrison
|
|
https://osf.io/ef53g/
|
|
*/
|
|
|
|
#import "../utils/scripts.typ": *
|
|
|
|
|
|
// Different behavior than for basic.typ
|
|
#let theme(
|
|
primary-color: rgb(28,55,103), // Dark blue
|
|
background-color: white,
|
|
accent-color: rgb(243,163,30), // Yellow
|
|
titletext-color: black,
|
|
titletext-size: 2em,
|
|
body,
|
|
) = {
|
|
set page(
|
|
margin: 0pt,
|
|
)
|
|
|
|
color-primary.update(primary-color)
|
|
color-background.update(background-color)
|
|
color-accent.update(accent-color)
|
|
color-titletext.update(color-titletext => titletext-color)
|
|
size-titletext.update(size-titletext => titletext-size)
|
|
|
|
body
|
|
}
|
|
|
|
|
|
#let focus-box(
|
|
footer-kwargs: none,
|
|
body
|
|
) = {
|
|
focus-content.update(focus-body => body)
|
|
}
|
|
|
|
|
|
#let normal-box(
|
|
color: none,
|
|
body
|
|
) = {
|
|
context[
|
|
#let primary-color = color-primary.get()
|
|
#let accent-color = color-accent.get()
|
|
#if color != none [
|
|
#let accent-color = color
|
|
#box(
|
|
stroke: none, //primary-color+0.2em,
|
|
width: 100%,
|
|
fill: accent-color,
|
|
inset: 0%,
|
|
[
|
|
#box(
|
|
inset: (top: 4%, left: 4%, right: 4%, bottom: 4%),
|
|
body
|
|
)
|
|
]
|
|
)
|
|
] else [
|
|
// #let accent-color = color
|
|
#box(
|
|
stroke: none, //primary-color+0.0625em,
|
|
width: 100%,
|
|
fill: accent-color,
|
|
inset: 0%,
|
|
[
|
|
#box(
|
|
inset: (top: 4%, left: 4%, right: 4%, bottom: 4%),
|
|
body
|
|
)
|
|
]
|
|
)
|
|
]
|
|
]
|
|
}
|
|
|
|
|
|
#let poster-content(
|
|
col: 1,
|
|
|
|
title: none,
|
|
subtitle: none,
|
|
authors: none,
|
|
affiliation: none,
|
|
|
|
left-logo: none,
|
|
right-logo: none,
|
|
|
|
textcolor: black,
|
|
|
|
body
|
|
)={
|
|
context[
|
|
#let edge-color = color-background.get()
|
|
#let center-color = color-primary.get()
|
|
#let titletext-color = color-titletext.get()
|
|
#let titletext-size = size-titletext.get()
|
|
|
|
#let current-title = context title-content.get()
|
|
#let current-subtitle = context subtitle-content.get()
|
|
#let current-author = context author-content.get()
|
|
#let current-affiliation = context affiliation-content.get()
|
|
#let current-focus = context focus-content.get()
|
|
#let current-footer = context footer-content.get()
|
|
|
|
// Table captions go above
|
|
#show figure.where(kind:table) : set figure.caption(position:top)
|
|
#show figure.caption.where(kind:image): it => [
|
|
// #context it.counter.display(it.numbering)
|
|
// Since the #body is called twice (+1?), subtract half of the total figures to get the correct number
|
|
Fig.
|
|
#let last-counter = it.counter.final()
|
|
#context {it.counter.get().at(0) - (last-counter.at(0)-1)/2}:
|
|
#it.body
|
|
]
|
|
#show figure.caption.where(kind:table): it => [
|
|
Table
|
|
#let last-counter = it.counter.final()
|
|
#context {it.counter.get().at(0) - (last-counter.at(0)-1)/2}:
|
|
#it.body
|
|
]
|
|
|
|
// First, need body (hidden) to update header and footer
|
|
#block(height: 0pt, hide[#body])
|
|
#v(0pt, weak: true)
|
|
|
|
|
|
#grid(
|
|
columns: (12.5/52*100%, 28.5/52*100%, 11/52*100%),
|
|
rows: (100%),
|
|
|
|
// Left = title and main text
|
|
[
|
|
#grid(
|
|
columns: (100%),
|
|
rows: (auto, 1fr),
|
|
[
|
|
#box(
|
|
stroke: none,
|
|
fill: edge-color,
|
|
// height: 100%,
|
|
width: 100%,
|
|
inset: 6%,
|
|
|
|
[
|
|
#align(top+left)[
|
|
\
|
|
#set text(size: titletext-size/(7/5),
|
|
fill: titletext-color,
|
|
)
|
|
*#current-title*
|
|
#current-subtitle \
|
|
// i.e. (6/7 = 0.857), which converts 1.4 -> 1.2, or (5/7 = 714) 1.4 -> 1.0
|
|
#set text(size: 0.714em)
|
|
\
|
|
#current-author \
|
|
#current-affiliation
|
|
]
|
|
|
|
]
|
|
)
|
|
#v(0pt, weak: true)
|
|
],
|
|
[
|
|
#align(top+left)[
|
|
#box(
|
|
inset: 6%,
|
|
fill: edge-color,
|
|
columns(col)[
|
|
#body
|
|
]
|
|
)
|
|
]
|
|
]
|
|
)
|
|
],
|
|
|
|
// Center = focus box
|
|
[
|
|
#box(
|
|
height: 100%,
|
|
width: 100%,
|
|
inset: 10%,
|
|
fill: center-color,
|
|
align(left+horizon)[
|
|
#set text(size: 2em,
|
|
fill: white)
|
|
#current-focus
|
|
]
|
|
)
|
|
],
|
|
|
|
// Right = declarations and affiliation
|
|
[
|
|
#box(
|
|
stroke: none,
|
|
fill: edge-color,
|
|
height: 100%,
|
|
width: 100%,
|
|
inset: 6%,
|
|
|
|
align(bottom+left)[#current-footer]
|
|
)
|
|
]
|
|
)
|
|
|
|
]
|
|
}
|