Last active
July 7, 2024 13:40
-
-
Save HeMuling/a492b55e70167a1b0873dbd176976c97 to your computer and use it in GitHub Desktop.
Useful Typst Code: Adjust the page number style, set the starting page number, and customize the heading and outline styles.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// set differnet name for different levels of title | |
#set heading(numbering: (..numbers) => { | |
let level = numbers.pos().len() | |
if (level == 1) { | |
return numbering("第一部分", numbers.pos().at(level - 1)) | |
} else if (level == 2) { | |
return numbering("第一章", numbers.pos().at(level - 1)) | |
} else if (level == 3) { | |
return numbering("1.1", numbers.pos().at(level - 2), numbers.pos().at(level - 1)) | |
} else { | |
return numbering("1.1.1", numbers.pos().at(level - 3), numbers.pos().at(level - 2), numbers.pos().at(level - 1)) | |
}} | |
) | |
// customize title format by defining functions | |
#let hd1(in_text) = { | |
text(size: 18pt)[ | |
#align(center)[ | |
#heading(level: 1)[#in_text] | |
#v(10pt) | |
] | |
] | |
} | |
#let hd2(in_text) = { | |
text(size: 16pt)[ | |
#align(center)[ | |
#heading(level: 2)[#in_text] | |
#v(5pt) | |
] | |
] | |
} | |
#let hd3(in_text) = { | |
text(size: 14pt)[ | |
#align(left)[ | |
#heading(level: 3)[#in_text] | |
] | |
] | |
} | |
#let hd4(in_text) = { | |
text(size: 12pt)[ | |
#align(left)[ | |
#heading(level: 4)[#in_text] | |
] | |
] | |
} | |
# use function | |
#outline() | |
#hd1("野外实习报告") | |
#hd2("实习目的") | |
#hd3("峨眉山食物") | |
#hd4("野外实习目的") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// suppose a json file in format: | |
// { | |
// "1": { | |
// "phylum": "Tracheophyta", | |
// "genus": "Selaginella", | |
// "species": "moellendorffii", | |
// "infraspecies": "", | |
// "family": "Selaginellaceae", | |
// "kingdom": "Plantae", | |
// "class": "Lycopodiopsida", | |
// "order": "Selaginellales", | |
// "name": "江南卷柏" | |
// }, | |
// "2": { | |
// "phylum": "Tracheophyta", | |
// "genus": "Heterostemma", | |
// "species": "wallichii", | |
// "infraspecies": "", | |
// "family": "Apocynaceae", | |
// "kingdom": "Plantae", | |
// "class": "Magnoliopsida", | |
// "order": "Gentianales", | |
// "name": "醉魂藤" | |
// }, | |
// ... | |
// } | |
// get json content according to id | |
#let Plant(id) = { | |
let name = json("plant.json").at(id).name | |
let genus = json("plant.json").at(id).genus | |
let species = json("plant.json").at(id).species | |
let latin_name = text(style: "oblique", font: "Arial")[#genus #species] | |
text()[#name (#latin_name)] | |
} | |
// use the context we get with image | |
#let PlantIMG(id, ext_caption) = { | |
figure( | |
image("img/植物/标本制作/"+ id + ".JPG", width: 95%), // this should be your image file name, which contains id | |
caption: [ | |
#Plant(id)\ | |
#ext_caption | |
], | |
supplement: none | |
) | |
} | |
// use example | |
#PlantIMG("1", lorem(20)) | |
#PlantIMG("2", lorem(20)) | |
#PlantIMG("3", lorem(20)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Set outline Title | |
#align(center)[ | |
#v(100pt) | |
#text(size: 25pt)[ | |
目录 | |
] | |
] | |
// Change outline style | |
#show outline.entry.where( | |
level: 1, | |
): it => { | |
text(size: 16pt)[#it] | |
} | |
#show outline.entry.where( | |
level: 2, | |
): it => { | |
v(2pt, weak: false) | |
text(size: 15pt)[#it] | |
} | |
#show outline.entry.where( | |
level: 3, | |
): it => { | |
text(size: 14pt)[#it] | |
} | |
#show outline.entry.where( | |
level: 4, | |
): it => { | |
text(size: 13pt)[#it] | |
} | |
// Set default properties | |
#outline( | |
title: text(size: 20pt)[], | |
indent: 2em | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// for better showing | |
#set page( | |
height: 0.5cm, | |
width: 3cm, | |
) | |
#set text(size: 2pt) | |
#align(center + horizon)[ | |
First page | |
] | |
#pagebreak() | |
// set this page to the first page to use 'i' style | |
#set page( | |
numbering: (..numbers) => { | |
return numbering("i", counter(page).get().at(0) - 1) | |
}, | |
) | |
// use odd or even page numbers | |
#set page(footer: locate( | |
loc => if calc.even(loc.page()) { | |
align(right, numbering("i", counter(page).get().at(0) - 1)); | |
} else { | |
align(left, numbering("i", counter(page).get().at(0) - 1)); | |
} | |
)) | |
= First level title | |
#align(center + horizon)[ | |
Second page | |
] | |
#pagebreak() | |
== Second level title | |
#align(center + horizon)[ | |
Third page | |
] | |
#pagebreak() | |
// set this page the first page to use '1' style page number | |
#set page( | |
numbering: (..numbers) => { | |
return numbering("1", counter(page).get().at(0) - 3) | |
}, | |
) | |
// odd or even page numbers | |
#set page(footer: locate( | |
loc => if calc.even(loc.page()) { | |
align(right, numbering("1", counter(page).get().at(0) - 3)); | |
} else { | |
align(left, numbering("1", counter(page).get().at(0) - 3)); | |
} | |
)) | |
=== Third level title | |
#align(center + horizon)[ | |
4th page | |
] | |
#pagebreak() | |
#align(center + horizon)[ | |
5th page | |
] | |
#pagebreak() | |
#outline() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment