mirror of
https://github.com/jgm/pandoc.git
synced 2026-09-13 11:05:55 +00:00
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.
116 lines
2.6 KiB
Plaintext
116 lines
2.6 KiB
Plaintext
#let content-to-string(content) = {
|
|
if content.has("text") {
|
|
content.text
|
|
} else if content.has("children") {
|
|
content.children.map(content-to-string).join("")
|
|
} else if content.has("body") {
|
|
content-to-string(content.body)
|
|
} else if content == [ ] {
|
|
" "
|
|
}
|
|
}
|
|
#let conf(
|
|
title: none,
|
|
subtitle: none,
|
|
authors: (),
|
|
keywords: (),
|
|
date: none,
|
|
abstract-title: none,
|
|
abstract: none,
|
|
thanks: none,
|
|
cols: 1,
|
|
margin: (x: 1.25in, y: 1.25in),
|
|
paper: "us-letter",
|
|
lang: "en",
|
|
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)).join(", ", last: " & "),
|
|
keywords: keywords,
|
|
)
|
|
set page(
|
|
paper: paper,
|
|
margin: margin,
|
|
numbering: pagenumbering,
|
|
)
|
|
|
|
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)
|
|
|
|
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)))
|
|
}
|
|
}
|
|
|
|
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 abstract != none {
|
|
block(inset: 2em)[
|
|
#text(weight: "semibold")[#abstract-title] #h(1em) #abstract
|
|
]
|
|
}
|
|
]
|
|
|
|
doc
|
|
}
|