189 lines
4.8 KiB
Typst
189 lines
4.8 KiB
Typst
// This function gets your whole document as its `body` and formats
|
|
// it as an article in the style of the IEEE.
|
|
|
|
// CHANGES MADE TO COMPLY WITH QRS
|
|
// Font changed from STIX TWO Text to Times New Roman
|
|
// Gutter changed from 12 to 18 pt
|
|
// Indent on consecutiv par removed
|
|
// Changed x margin to 0.75in
|
|
// Changed y margin to 1in
|
|
// Changed heading numbering to 1.1.1
|
|
// Changed heading styles
|
|
// Change author listing
|
|
// Change abstract heading boldness
|
|
|
|
|
|
#let ieee(
|
|
// The paper's title.
|
|
title: "Paper Title",
|
|
|
|
// An array of authors. For each author you can specify a name,
|
|
// department, organization, location, and email. Everything but
|
|
// but the name is optional.
|
|
authors: (),
|
|
|
|
// The paper's abstract. Can be omitted if you don't have one.
|
|
abstract: none,
|
|
|
|
// A list of index terms to display after the abstract.
|
|
index-terms: (),
|
|
|
|
// The article's paper size. Also affects the margins.
|
|
paper-size: "us-letter",
|
|
|
|
// The path to a bibliography file if you want to cite some external
|
|
// works.
|
|
bibliography-file: none,
|
|
|
|
// The paper's content.
|
|
body
|
|
) = {
|
|
// Set document metdata.
|
|
set document(title: title, author: authors.map(author => author.name))
|
|
|
|
// Set the body font.
|
|
set text(font: "Times New Roman", size: 10pt)
|
|
|
|
// Configure the page.
|
|
set page(
|
|
paper: paper-size,
|
|
numbering: "1",
|
|
// The margins depend on the paper size.
|
|
margin: if paper-size == "a4" {
|
|
(x: 41.5pt, top: 80.51pt, bottom: 89.51pt)
|
|
} else {
|
|
(
|
|
x: 0.75in,
|
|
y: 1in,
|
|
//x: (50pt / 216mm) * 100%,
|
|
//top: (55pt / 279mm) * 100%,
|
|
//bottom: (64pt / 279mm) * 100%,
|
|
)
|
|
}
|
|
)
|
|
|
|
// 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: "1.")
|
|
show heading: it => locate(loc => {
|
|
// Find out the final number of the heading counter.
|
|
let levels = counter(heading).at(loc)
|
|
let deepest = if levels != () {
|
|
levels.last()
|
|
} else {
|
|
1
|
|
}
|
|
|
|
set text(10pt, weight: 400)
|
|
if it.level == 1 [
|
|
#show: smallcaps
|
|
#v(12pt, weak: true)
|
|
#it
|
|
#v(12pt, weak: true)
|
|
] else if it.level >= 2 [
|
|
// Second-level headings are run-ins.
|
|
#set par(first-line-indent: 0pt)
|
|
//#set text(style: "italic")
|
|
#v(10pt, weak: true)
|
|
#it
|
|
#v(10pt, weak: true)
|
|
]
|
|
})
|
|
|
|
// Display the paper's title.
|
|
//v(3pt, weak: true)
|
|
align(center, text(weight: "bold", size: 14pt, title))
|
|
v(10pt, weak: true)
|
|
|
|
|
|
// Make author list
|
|
// Start with names
|
|
set align(center)
|
|
let nbr_authors = authors.len()
|
|
for (i,author) in authors.enumerate(){
|
|
if i+1 == nbr_authors{
|
|
[#author.name\ ]
|
|
}else{
|
|
[#author.name, ]
|
|
}
|
|
}
|
|
// Continue with affiliations
|
|
for author in authors{
|
|
if author.department+author.organization+author.location != ""{
|
|
[#author.department, #author.organization, #author.location\ ]
|
|
}
|
|
}
|
|
// Continue with the emails, same way as for authors
|
|
for (i,author) in authors.enumerate(){
|
|
if i+1 == nbr_authors{
|
|
[#author.email\ ]
|
|
}else{
|
|
[#author.email, ]
|
|
}
|
|
}
|
|
[\*Corresponding author]
|
|
set align(left)
|
|
|
|
// Display the authors list.
|
|
//for i in range(calc.ceil(authors.len() / 3)) {
|
|
// let end = calc.min((i + 1) * 3, authors.len())
|
|
// let is-last = authors.len() == end
|
|
// let slice = authors.slice(i * 3, end)
|
|
// grid(
|
|
// columns: slice.len() * (1fr,),
|
|
// gutter: 12pt,
|
|
// ..slice.map(author => align(center, {
|
|
// text(12pt, author.name)
|
|
// if "department" in author [
|
|
// \ #emph(author.department)
|
|
// ]
|
|
// if "organization" in author [
|
|
// \ #emph(author.organization)
|
|
// ]
|
|
// if "location" in author [
|
|
// \ #author.location
|
|
// ]
|
|
// if "email" in author [
|
|
// \ #link("mailto:" + author.email)
|
|
// ]
|
|
// }))
|
|
// )
|
|
|
|
// if not is-last {
|
|
// v(16pt, weak: true)
|
|
// }
|
|
//}
|
|
v(40pt, weak: true)
|
|
|
|
// Start two column mode and configure paragraph properties.
|
|
show: columns.with(2, gutter: 18pt)
|
|
set par(justify: true, first-line-indent: 0pt)
|
|
show par: set block(spacing: 0.65em)
|
|
|
|
// Display abstract and index terms.
|
|
if abstract != none [
|
|
#set text(weight: "regular")
|
|
#h(1em) _Abstract_---#abstract
|
|
|
|
#if index-terms != () [
|
|
#h(1em)_Index terms_---#index-terms.join(", ")
|
|
]
|
|
#v(2pt)
|
|
]
|
|
|
|
// Display the paper's contents.
|
|
body
|
|
|
|
// Display bibliography.
|
|
if bibliography-file != none {
|
|
show bibliography: set text(9pt)
|
|
bibliography(bibliography-file, title: text(10pt)[References], style: "ieee")
|
|
}
|
|
}
|