main
1// 部分取自 modern-nju-thesis
2
3#let 字号 = (
4 初号: 42pt,
5 小初: 36pt,
6 一号: 26pt,
7 小一: 24pt,
8 二号: 22pt,
9 小二: 18pt,
10 三号: 16pt,
11 小三: 15pt,
12 四号: 14pt,
13 中四: 13pt,
14 小四: 12pt,
15 五号: 10.5pt,
16 小五: 9pt,
17 六号: 7.5pt,
18 小六: 6.5pt,
19 七号: 5.5pt,
20 小七: 5pt,
21)
22
23#let 字体 = (
24 // 宋体,属于「有衬线字体」,一般可以等同于英文中的 Serif Font
25 // 这一行分别是「新罗马体(有衬线英文字体)」、「思源宋体(简体)」、「思源宋体」、「宋体(Windows)」、「宋体(MacOS)」
26 宋体: (
27 (name: "Times New Roman", covers: "latin-in-cjk"),
28 "Source Han Serif SC",
29 "Source Han Serif",
30 "Noto Serif CJK SC",
31 "SimSun",
32 "Songti SC",
33 "STSongti",
34 ),
35 // 黑体,属于「无衬线字体」,一般可以等同于英文中的 Sans Serif Font
36 // 这一行分别是「Arial(无衬线英文字体)」、「思源黑体(简体)」、「思源黑体」、「黑体(Windows)」、「黑体(MacOS)」
37 黑体: (
38 (name: "Arial", covers: "latin-in-cjk"),
39 "Source Han Sans SC",
40 "Source Han Sans",
41 "Noto Sans CJK SC",
42 "SimHei",
43 "Heiti SC",
44 "STHeiti",
45 ),
46 // 楷体
47 楷体: (
48 (name: "Times New Roman", covers: "latin-in-cjk"),
49 "KaiTi",
50 "Kaiti SC",
51 "STKaiti",
52 "FZKai-Z03S",
53 ),
54 // 仿宋
55 仿宋: (
56 (name: "Times New Roman", covers: "latin-in-cjk"),
57 "FangSong",
58 "FangSong SC",
59 "STFangSong",
60 "FZFangSong-Z02S",
61 ),
62 // 等宽字体,用于代码块环境,一般可以等同于英文中的 Monospaced Font
63 // 这一行分别是「Courier New(Windows 等宽英文字体)」、「思源等宽黑体(简体)」、「思源等宽黑体」、「黑体(Windows)」、「黑体(MacOS)」
64 等宽: (
65 (name: "Courier New", covers: "latin-in-cjk"),
66 (name: "Menlo", covers: "latin-in-cjk"),
67 (name: "IBM Plex Mono", covers: "latin-in-cjk"),
68 "Source Han Sans HW SC",
69 "Source Han Sans HW",
70 "Noto Sans Mono CJK SC",
71 "SimHei",
72 "Heiti SC",
73 "STHeiti",
74 ),
75)
76
77// 获取字体中的英文部分,选取带有 `covers = "latin-in-cjk"` 的字体
78//
79// - fonts (array, str): 字体列表\
80// 接受与 typst 内建 `text` 函数中的 `font` 参数类似的数组\
81// 当传入字符串时,将直接返回该字符串\
82// 当传入的数组中不存在满足要求的元素时,将返回原数组\
83// -> array, str
84#let 英文(fonts) = {
85 if type(fonts) == str {
86 return fonts
87 }
88 let en-fonts = fonts
89 .filter(font => type(font) == dictionary)
90 .filter(font => font.covers == "latin-in-cjk")
91 .map(font => font.name)
92 if en-fonts.len() == 0 {
93 return fonts
94 }
95 return en-fonts
96}
97
98// 修复英文引号 `'` 和 `"` 显示为中文字形的问题
99//
100// - body (content):
101// -> content
102#let fix-smartquote(body) = context {
103 show smartquote: set text(font: 英文(text.font))
104 body
105}