font and layout

This commit is contained in:
Youmu Liu
2026-10-20 17:17:15 +08:00
parent 10b126266b
commit dff7d13f16
8 changed files with 4279 additions and 10 deletions
+35 -9
View File
@@ -1,16 +1,18 @@
// ============================================================
// A4 文档模板
// 封面:页边距 0,标题与图案 Bahnschrift / 信息 Source Code Pro
// 正文:上下 3.5cm,左右 2cm,中文 Source Han Sans SC / 英文 IBM Plex Sans
// 正文:上下 3.5cm,左右 2cm,中文 Noto Serif SC / 英文 IBM Plex Sans
// 代码块:IBM Plex Mono
// ============================================================
// ---- 字体配置(可按需修改)----
#let cover-cjk = "SimHei" // 封面中文回退:黑体
#let cover-cjk = "Noto Sans SC" // 封面中文回退:开放授权黑体
#let cover-latin = "Source Code Pro" // 文档信息与签名:Source Code Pro
#let cover-title-cjk = "SimHei" // 封面中文标题
#let cover-title-cjk = "Noto Sans SC" // 封面中文标题
#let cover-title-latin = "Bahnschrift" // 封面英文标题
#let body-cjk = "Source Han Sans SC" // 正文中文
#let body-cjk = "Noto Serif SC" // 正文中文:开放授权宋体
#let heading-cjk = "Noto Sans SC" // 一级、二级标题中文
#let code-cjk = "Noto Sans SC" // 代码中的中文回退
#let body-latin = "IBM Plex Sans" // 正文英文
#let mono-font = "IBM Plex Mono" // 代码块
@@ -18,7 +20,7 @@
// 坐标系:左上角为原点,x 向右、y 向下;坐标记为 (x, y) 即 (列, 行)。
// 1 单位 = 1.2cm,一个单位方块为边长 1.5cm 的正方形。
#let unit = 1.2cm
#let sky = rgb("#4FC3F7") // 天蓝色
#let sky = rgb("#4FC3F7") // 河童蓝
#let accent = rgb("#E9784B") // 珊瑚橙
// 在网格 (x, y) 处放置内容(以页面左上角为基准)
@@ -349,11 +351,35 @@
// 无序列表整体缩进一个正文字符;圆点与正文仍使用 Typst 默认间距。
set list(indent: 1em)
// 正文标题与正文使用同一套中西文字体。
show heading: set text(font: (body-latin, body-cjk))
// 一级标题:加大字号、常规字重并下置细线;二级标题略放大,三级标题保留正文宋体。
show heading.where(level: 1): heading => block(
width: 100%,
above: 1.2em,
below: 1.2em,
sticky: true,
)[
#stack(
dir: ttb,
spacing: 0.2em,
block(width: 100%, above: 0pt, below: 0pt, {
set par(first-line-indent: 0pt, leading: 0pt, spacing: 0pt)
set text(font: (body-latin, heading-cjk), size: 18pt, weight: "regular")
heading.body
}),
line(length: 100%, stroke: 0.7pt + luma(45%)),
)
]
show heading.where(level: 2): set text(
font: (body-latin, heading-cjk), size: 14pt, weight: "medium",
)
show heading.where(level: 2): set block(above: 1em, below: 0.6em)
show heading.where(level: 3): set text(
font: (body-latin, body-cjk), size: 12pt, weight: "medium",
)
show heading.where(level: 3): set block(above: 0.7em, below: 0.4em)
// 代码块与行内代码:西文使用 IBM Plex Mono,中文回退到正文中文字体。
show raw: set text(font: (mono-font, body-cjk))
// 代码块与行内代码:西文使用 IBM Plex Mono,中文回退到开源黑体。
show raw: set text(font: (mono-font, code-cjk))
// 块级代码:细边框、浅色背景与自动行号;行内代码不受影响。
show raw.where(block: true): code => {