aboutsummaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorChristopher Kenny <[email protected]>2024-07-08 22:08:30 -0400
committerJohn MacFarlane <[email protected]>2025-07-24 10:45:28 -0700
commitf000fa168bd122fee6e67f5a67bdd6d42d173261 (patch)
tree49b8be848793a66f94c207d911091e8026eaee8a /data
parentebf41dd5392283398f35dac1414c04dbc3e3e7ca (diff)
Add features to typst base template.
This implements the changes suggested in #9956, with the exception of the filecolor/urlcolor one. These would require adding some regex to guess the link types. This is theoretically possible to do, but it wasn't clear to me that this is a good thing to put in a default template. Happy to adjust if you have thoughts on this. Closes #9956. Some things to note: I'm converting colors by passing them as content, as I was seeing pandoc escape # if that was included. I set the default fonts for math and code ("raw") to fonts that are bundled with Typst. These need not be those fonts if there are more familiar pandoc preferences.
Diffstat (limited to 'data')
-rw-r--r--data/templates/default.typst24
-rw-r--r--data/templates/template.typst100
2 files changed, 87 insertions, 37 deletions
diff --git a/data/templates/default.typst b/data/templates/default.typst
index 79b2c33f5..00e1ec557 100644
--- a/data/templates/default.typst
+++ b/data/templates/default.typst
@@ -71,9 +71,15 @@ $endif$
$if(region)$
region: "$region$",
$endif$
+$if(abstract-title)$
+ abstract-title: [$abstract-title$],
+$endif$
$if(abstract)$
abstract: [$abstract$],
$endif$
+$if(thanks)$
+ thanks: [$thanks$],
+$endif$
$if(margin)$
margin: ($for(margin/pairs)$$margin.key$: $margin.value$,$endfor$),
$endif$
@@ -86,10 +92,28 @@ $endif$
$if(fontsize)$
fontsize: $fontsize$,
$endif$
+$if(mathfont)$
+ mathfont: ($for(mathfont)$"$mathfont$",$endfor$),
+$endif$
+$if(codefont)$
+ codefont: ($for(codefont)$"$codefont$",$endfor$),
+$endif$
+$if(linestretch)$
+ linestretch: $linestretch$,
+$endif$
$if(section-numbering)$
sectionnumbering: "$section-numbering$",
$endif$
pagenumbering: $if(page-numbering)$"$page-numbering$"$else$none$endif$,
+$if(linkcolor)$
+ linkcolor: [$linkcolor$],
+$endif$
+$if(citecolor)$
+ citecolor: [$citecolor$],
+$endif$
+$if(filecolor)$
+ filecolor: [$filecolor$],
+$endif$
cols: $if(columns)$$columns$$else$1$endif$,
doc,
)
diff --git a/data/templates/template.typst b/data/templates/template.typst
index 24b1320fb..1afaa35fc 100644
--- a/data/templates/template.typst
+++ b/data/templates/template.typst
@@ -15,7 +15,9 @@
authors: (),
keywords: (),
date: none,
+ abstract-title: none,
abstract: none,
+ thanks: none,
cols: 1,
margin: (x: 1.25in, y: 1.25in),
paper: "us-letter",
@@ -23,66 +25,90 @@
region: "US",
font: (),
fontsize: 11pt,
+ mathfont: none,
+ codefont: none,
+ linestretch: 1,
sectionnumbering: none,
+ linkcolor: none,
+ citecolor: none,
+ filecolor: none,
pagenumbering: "1",
doc,
) = {
set document(
title: title,
- author: authors.map(author => content-to-string(author.name)),
+ author: authors.map(author => content-to-string(author.name)).join(", ", last: " & "),
keywords: keywords,
)
set page(
paper: paper,
margin: margin,
numbering: pagenumbering,
- columns: cols,
- )
- set par(justify: true)
+ )
+
+ set par(
+ justify: true,
+ leading: linestretch * 0.65em
+ )
set text(lang: lang,
region: region,
font: font,
size: fontsize)
+
+ show math.equation: set text(font: mathfont) if mathfont != none
+ show raw: set text(font: codefont) if codefont != none
+
set heading(numbering: sectionnumbering)
- place(top, float: true, scope: "parent", clearance: 4mm)[
- #if title != none {
- align(center)[#block(inset: 2em)[
- #text(weight: "bold", size: 1.5em)[#title]
- #(if subtitle != none {
- parbreak()
- text(weight: "bold", size: 1.25em)[#subtitle]
- })
- ]]
+ show link: set text(fill: rgb(content-to-string(linkcolor))) if linkcolor != none
+ show ref: set text(fill: rgb(content-to-string(citecolor))) if citecolor != none
+ show link: this => {
+ if filecolor != none and type(this.dest) == label {
+ text(this, fill: rgb(content-to-string(filecolor)))
+ }
}
- #if authors != none and authors != [] {
- let count = authors.len()
- let ncols = calc.min(count, 3)
- grid(
- columns: (1fr,) * ncols,
- row-gutter: 1.5em,
- ..authors.map(author =>
- align(center)[
- #author.name \
- #author.affiliation \
- #author.email
- ]
+ block(below: 4mm)[
+ #if title != none {
+ align(center)[#block(inset: 2em)[
+ #text(weight: "bold", size: 1.5em)[#title #if thanks != none {
+ footnote(thanks, numbering: "*")
+ counter(footnote).update(n => n - 1)
+ }]
+ #(
+ if subtitle != none {
+ parbreak()
+ text(weight: "bold", size: 1.25em)[#subtitle]
+ }
+ )
+ ]]
+ }
+
+ #if authors != none and authors != [] {
+ let count = authors.len()
+ let ncols = calc.min(count, 3)
+ grid(
+ columns: (1fr,) * ncols,
+ row-gutter: 1.5em,
+ ..authors.map(author => align(center)[
+ #author.name \
+ #author.affiliation \
+ #author.email
+ ])
)
- )
- }
+ }
- #if date != none {
- align(center)[#block(inset: 1em)[
- #date
- ]]
- }
+ #if date != none {
+ align(center)[#block(inset: 1em)[
+ #date
+ ]]
+ }
- #if abstract != none {
- block(inset: 2em)[
- #text(weight: "semibold")[$if(abstract-title)$${abstract-title}$else$Abstract$endif$] #h(1em) #abstract
- ]
- }
+ #if abstract != none {
+ block(inset: 2em)[
+ #text(weight: "semibold")[#abstract-title] #h(1em) #abstract
+ ]
+ }
]
doc