mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-30 17:59:17 +08:00
dc4bcd23cc
This avoids an empty block for documents that lack metadata information. The empty block causes problems if `#set page` is used, as it will cause a page break. Closes #11529.
123 lines
3.0 KiB
Plaintext
123 lines
3.0 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: none,
|
|
fontsize: 11pt,
|
|
mathfont: none,
|
|
codefont: none,
|
|
linestretch: 1,
|
|
sectionnumbering: none,
|
|
linkcolor: none,
|
|
citecolor: none,
|
|
filecolor: none,
|
|
pagenumbering: "1",
|
|
doc,
|
|
) = {
|
|
set document(
|
|
title: title,
|
|
keywords: keywords,
|
|
)
|
|
set document(
|
|
author: authors.map(author => content-to-string(author.name)).join(", ", last: " & "),
|
|
) if authors != none and authors != ()
|
|
set page(
|
|
paper: paper,
|
|
margin: margin,
|
|
numbering: pagenumbering,
|
|
columns: cols
|
|
)
|
|
|
|
set par(
|
|
justify: true,
|
|
leading: linestretch * 0.65em
|
|
)
|
|
set text(lang: lang,
|
|
region: region,
|
|
size: fontsize)
|
|
|
|
set text(font: font) if font != none
|
|
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)))
|
|
} else {
|
|
text(this)
|
|
}
|
|
}
|
|
|
|
#let has-title-block = title != none or (authors != none and authors != ()) or
|
|
date != none or abstract != none
|
|
#if has-title-block {
|
|
place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
|
|
#if title != none {
|
|
align(center, block[
|
|
#text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
|
|
footnote(thanks, numbering: "*")
|
|
counter(footnote).update(n => n - 1)
|
|
}]
|
|
#(
|
|
if subtitle != none {
|
|
parbreak()
|
|
text(weight: "bold", size: 1.25em, hyphenate: false)[#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
|
|
}
|