mirror of
https://github.com/szdytom/LADRSolutions.git
synced 2025-10-20 17:00:16 +00:00
better visual effects
Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
parent
22e2392306
commit
83f797bd52
25
color.typ
Normal file
25
color.typ
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// #let theme_color = cmyk(0%, 70%, 100%, 0%)
|
||||||
|
|
||||||
|
#let theme_color_set = (
|
||||||
|
"100": cmyk(0%, 70%, 100%, 0%),
|
||||||
|
"90": rgb("#ee7b1a"),
|
||||||
|
"80": rgb("#ef8933"),
|
||||||
|
"70": rgb("#f1984d"),
|
||||||
|
"60": rgb("#f3a766"),
|
||||||
|
"50": rgb("#f5b680"),
|
||||||
|
"40": rgb("#f7c499"),
|
||||||
|
"30": rgb("#f9d3b3"),
|
||||||
|
"20": rgb("#fbe1cc"),
|
||||||
|
"10": rgb("#fdf0e6"),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let text_color_set = (
|
||||||
|
"100": cmyk(100%, 70%, 70%, 30%),
|
||||||
|
"90": rgb("#1a5356"),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let aux_color_set = (
|
||||||
|
"100": cmyk(70%, 0%, 35%, 0%),
|
||||||
|
"20": rgb("#d4f0ef"),
|
||||||
|
"10": rgb("#eaf7f7"),
|
||||||
|
)
|
26
cover.typ
Normal file
26
cover.typ
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#import "styles.typ": zhfont_sans
|
||||||
|
#import "color.typ": text_color_set, theme_color_set
|
||||||
|
|
||||||
|
#{
|
||||||
|
// Book Cover
|
||||||
|
set align(right)
|
||||||
|
set text(font: zhfont_sans)
|
||||||
|
v(5fr)
|
||||||
|
{
|
||||||
|
set text(fill: text_color_set.at("100"), weight: "semibold")
|
||||||
|
stack(
|
||||||
|
dir: ttb,
|
||||||
|
spacing: 15pt,
|
||||||
|
text([线性代数应该这样学], 22pt),
|
||||||
|
text([习题解答], 33pt),
|
||||||
|
box(width: 10 * 22pt, {
|
||||||
|
line(end: (100%, 0%), stroke: 3pt + theme_color_set.at("100"))
|
||||||
|
line(end: (38.2%, 0%), stroke: 3pt + text_color_set.at("100"))
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
v(2fr)
|
||||||
|
|
||||||
|
pagebreak(weak: true)
|
||||||
|
|
||||||
|
}
|
66
main.typ
66
main.typ
@ -1,11 +1,59 @@
|
|||||||
#import "styles.typ": project, setup_main_text
|
#import "styles.typ": project, setup_main_text, margin-wrapper, zhfont_sans
|
||||||
|
#import "toc.typ": toc
|
||||||
|
#import "color.typ": text_color_set, theme_color_set
|
||||||
|
|
||||||
#show: project.with("线性代数应该这样学 习题解答")
|
#show: project.with("线性代数应该这样学 习题解答")
|
||||||
|
|
||||||
#let toc = ((
|
#include "cover.typ"
|
||||||
title: [向量空间],
|
|
||||||
sections: 3,
|
#[
|
||||||
),)
|
#show heading.where(level: 1): set text(22pt)
|
||||||
|
= 目录
|
||||||
|
#v(1em)
|
||||||
|
#margin-wrapper(
|
||||||
|
margin: 2em,
|
||||||
|
context for i in range(0, toc.len()) {
|
||||||
|
set text(font: zhfont_sans)
|
||||||
|
let chapter = toc.at(i)
|
||||||
|
let nc = numbering("1", i + 1)
|
||||||
|
let clabel = label("chapter-heading" + nc)
|
||||||
|
let cloc = query(selector(clabel)).first().location()
|
||||||
|
link(cloc, {
|
||||||
|
set text(15pt, fill: text_color_set.at("100"))
|
||||||
|
numbering("第1章", i + 1)
|
||||||
|
h(1em)
|
||||||
|
chapter.title
|
||||||
|
|
||||||
|
h(10pt)
|
||||||
|
box(width: 1fr, repeat(sym.dot))
|
||||||
|
h(10pt)
|
||||||
|
|
||||||
|
str(counter(page).at(cloc).at(0))
|
||||||
|
})
|
||||||
|
margin-wrapper(
|
||||||
|
margin: 2em,
|
||||||
|
for j in range(0, chapter.sections.len()) {
|
||||||
|
let ns = numbering("1A", i + 1, j + 1)
|
||||||
|
let slabel = label("section-heading" + ns)
|
||||||
|
let sloc = query(selector(slabel)).first().location()
|
||||||
|
link(cloc, {
|
||||||
|
set text(11pt, fill: text_color_set.at("100"))
|
||||||
|
ns
|
||||||
|
h(1em)
|
||||||
|
chapter.sections.at(j)
|
||||||
|
|
||||||
|
h(10pt)
|
||||||
|
box(width: 1fr, repeat(sym.dot))
|
||||||
|
h(10pt)
|
||||||
|
|
||||||
|
str(counter(page).at(sloc).at(0))
|
||||||
|
})
|
||||||
|
linebreak()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
#[
|
#[
|
||||||
#show: setup_main_text
|
#show: setup_main_text
|
||||||
@ -15,12 +63,14 @@
|
|||||||
for i in range(0, toc.len()) {
|
for i in range(0, toc.len()) {
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
let chapter = toc.at(i)
|
let chapter = toc.at(i)
|
||||||
heading(chapter.title, level: 1)
|
[#heading(chapter.title, level: 1) #label("chapter-heading" + numbering("1", i + 1))]
|
||||||
for j in range(0, chapter.sections) {
|
for j in range(0, chapter.sections.len()) {
|
||||||
if j > 0 {
|
if j > 0 {
|
||||||
pagebreak(weak: true)
|
pagebreak(weak: true)
|
||||||
}
|
}
|
||||||
include "sections/" + numbering("1A", i + 1, j + 1) + ".typ"
|
let n = numbering("1A", i + 1, j + 1)
|
||||||
|
[#heading(chapter.sections.at(j), level: 2) #label("section-heading" + n)]
|
||||||
|
include "sections/" + n + ".typ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
outline.typ
Normal file
3
outline.typ
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#import "color.typ": text_color_set, theme_color_set
|
||||||
|
#import "toc.typ": toc
|
||||||
|
|
@ -1,7 +1,5 @@
|
|||||||
#import "../styles.typ": exercise_sol, ii, note, tab, simple_box, unset-list-indent
|
#import "../styles.typ": exercise_sol, ii, note, tab, simple_box, unset-list-indent
|
||||||
|
|
||||||
== $RR^n$ 和 $CC^n$
|
|
||||||
|
|
||||||
#exercise_sol(type: "proof")[
|
#exercise_sol(type: "proof")[
|
||||||
证明:$alpha + beta = beta + alpha$ 对所有 $alpha,beta in CC$ 成立。
|
证明:$alpha + beta = beta + alpha$ 对所有 $alpha,beta in CC$ 成立。
|
||||||
][
|
][
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#import "../styles.typ": exercise_sol, ii, note, tab
|
#import "../styles.typ": exercise_sol, ii, note, tab
|
||||||
|
|
||||||
== 向量空间的定义
|
|
||||||
|
|
||||||
#exercise_sol(type: "proof")[
|
#exercise_sol(type: "proof")[
|
||||||
证明:$-(-v)=v$ 对任一 $v in V$ 都成立。
|
证明:$-(-v)=v$ 对任一 $v in V$ 都成立。
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#import "../styles.typ": exercise_sol, ii, note, tab, unset-list-indent
|
#import "../styles.typ": exercise_sol, ii, note, tab, unset-list-indent
|
||||||
|
|
||||||
== 子空间
|
|
||||||
|
|
||||||
#exercise_sol(type: "answer")[
|
#exercise_sol(type: "answer")[
|
||||||
对于 $FF^3$ 的下列各个子集,判断其是否是 $FF^3$ 的子空间:
|
对于 $FF^3$ 的下列各个子集,判断其是否是 $FF^3$ 的子空间:
|
||||||
|
|
||||||
@ -222,3 +220,9 @@
|
|||||||
|
|
||||||
#tab 这个集合满足对标量数乘封闭,但不满足对加法封闭。比如,取 $u = (1, 0) in U$,$v = (0, 1) in U$,则 $u+v=(1, 1) in.not U$。因此 $U$ 不是 $RR^2$ 的子空间。
|
#tab 这个集合满足对标量数乘封闭,但不满足对加法封闭。比如,取 $u = (1, 0) in U$,$v = (0, 1) in U$,则 $u+v=(1, 1) in.not U$。因此 $U$ 不是 $RR^2$ 的子空间。
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#exercise_sol(type: "answer")[
|
||||||
|
函数 $f: RR -> RR$ 被成为*周期的(periodic)*,是指存在一正数 $p$,使得 $f(x) = f(x + p)$ 对所有 $x in RR$ 成立。$RR -> RR$ 上的周期函数构成的集合是不是 $RR^RR$ 的子空间?请作解释。
|
||||||
|
][
|
||||||
|
不是。取 $f(x) = sin x$,$g(x) = sin (sqrt(2) x)$,并令 $h=f+g$。下面说明 $h$ 不是周期函数。
|
||||||
|
]
|
||||||
|
80
styles.typ
80
styles.typ
@ -3,20 +3,20 @@
|
|||||||
#import "@preview/cetz:0.3.2"
|
#import "@preview/cetz:0.3.2"
|
||||||
#import "@preview/cetz-plot:0.1.1": plot
|
#import "@preview/cetz-plot:0.1.1": plot
|
||||||
|
|
||||||
|
#import "color.typ": theme_color_set, text_color_set, aux_color_set
|
||||||
|
|
||||||
#let zhfont_sans = ("Noto Sans CJK SC",)
|
#let zhfont_sans = ("Noto Sans CJK SC",)
|
||||||
#let zhfont_serif = ("Noto Serif CJK SC",)
|
#let zhfont_serif = ("Noto Serif CJK SC",)
|
||||||
#let zhfont_fangsong = ("Zhuque Fangsong (technical preview)", "Noto Serif CJK SC")
|
#let zhfont_fangsong = ("Zhuque Fangsong (technical preview)", "Noto Serif CJK SC")
|
||||||
#let monofont = ("Fira Code",)
|
#let monofont = ("Fira Code",)
|
||||||
|
|
||||||
#let theme_color = color.green
|
|
||||||
|
|
||||||
#let tab = h(2em)
|
#let tab = h(2em)
|
||||||
#let halftab = h(1em)
|
#let halftab = h(1em)
|
||||||
#let ee = "e"
|
#let ee = "e"
|
||||||
#let ii = "i"
|
#let ii = "i"
|
||||||
|
|
||||||
#let margin-wrapper(margin: 2.5em, body) = {
|
#let margin-wrapper(margin: 2.5em, body) = {
|
||||||
set align(center)
|
// set align(center)
|
||||||
block(inset: (
|
block(inset: (
|
||||||
left: margin,
|
left: margin,
|
||||||
), width: 100%, body)
|
), width: 100%, body)
|
||||||
@ -40,14 +40,15 @@
|
|||||||
breakable: true,
|
breakable: true,
|
||||||
title-style: (
|
title-style: (
|
||||||
weight: 900,
|
weight: 900,
|
||||||
color: theme_color.darken(40%),
|
color: text_color_set.at("100"),
|
||||||
sep-thickness: 0pt,
|
sep-thickness: 0pt,
|
||||||
font: zhfont_sans
|
font: zhfont_sans,
|
||||||
),
|
),
|
||||||
frame: (
|
frame: (
|
||||||
title-color: theme_color.lighten(80%),
|
title-color: theme_color_set.at("20"),
|
||||||
border-color: theme_color.darken(40%),
|
border-color: theme_color_set.at("100"),
|
||||||
thickness: (left: 1pt),
|
body-color: aux_color_set.at("10"),
|
||||||
|
thickness: (left: 3pt),
|
||||||
radius: 0pt
|
radius: 0pt
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -55,9 +56,9 @@
|
|||||||
#let problem_box = showy_wrapper.with(
|
#let problem_box = showy_wrapper.with(
|
||||||
breakable: false,
|
breakable: false,
|
||||||
frame: (
|
frame: (
|
||||||
title-color: theme_color.lighten(80%),
|
body-color: aux_color_set.at("10"),
|
||||||
border-color: theme_color.darken(40%),
|
border-color: theme_color_set.at("100"),
|
||||||
thickness: (left: 1pt),
|
thickness: (left: 3pt),
|
||||||
radius: 0pt,
|
radius: 0pt,
|
||||||
align: left,
|
align: left,
|
||||||
),
|
),
|
||||||
@ -83,38 +84,30 @@
|
|||||||
spacing: 1.2em,
|
spacing: 1.2em,
|
||||||
leading: 0.75em,
|
leading: 0.75em,
|
||||||
)
|
)
|
||||||
set list(marker: (text(sym.square.filled.small, fill: theme_color), text([--], fill: theme_color)), indent: 2.5em)
|
set list(marker: (text(sym.square.filled.small, fill: theme_color_set.at("100")), text([--], fill: theme_color_set.at("100"))), indent: 2.5em)
|
||||||
set enum(indent: 2.5em)
|
set enum(indent: 2.5em)
|
||||||
set terms(indent: 2.5em)
|
set terms(indent: 2.5em)
|
||||||
show heading: set text(font: zhfont_sans, weight: "semibold")
|
show heading: set text(font: zhfont_sans, weight: "semibold", text_color_set.at("100"))
|
||||||
show strong: set text(fill: theme_color.darken(40%))
|
show strong: set text(fill: theme_color_set.at("100"))
|
||||||
set par(justify: true)
|
set par(justify: true)
|
||||||
set text(11pt)
|
set text(11pt)
|
||||||
show heading.where(level: 3): set text(14pt)
|
|
||||||
show figure.caption: set text(9pt, font: zhfont_fangsong)
|
show figure.caption: set text(9pt, font: zhfont_fangsong)
|
||||||
show footnote.entry: set text(9pt, font: zhfont_fangsong)
|
show footnote.entry: set text(9pt, font: zhfont_fangsong)
|
||||||
set table(stroke: 1pt + theme_color, inset: 5pt)
|
set table(stroke: 1pt + theme_color_set.at("100"), inset: 5pt)
|
||||||
set grid(stroke: 1pt + theme_color)
|
set grid(stroke: 1pt + theme_color_set.at("100"))
|
||||||
set highlight(fill: none, stroke: (
|
set highlight(fill: none, stroke: (
|
||||||
bottom: 4pt + theme_color.lighten(80%)
|
bottom: 4pt + theme_color_set.at("10")
|
||||||
))
|
))
|
||||||
set footnote(numbering: "注1")
|
set footnote(numbering: "注1")
|
||||||
show math.equation: set text(font: ("New Computer Modern Math", ..zhfont_serif))
|
show math.equation: set text(font: ("New Computer Modern Math", ..zhfont_serif))
|
||||||
|
hide[#title <book-title>]
|
||||||
v(10fr)
|
|
||||||
h(2fr)
|
|
||||||
[
|
|
||||||
#set text(2em, weight: "light", font: zhfont_sans)
|
|
||||||
#title <book-title>
|
|
||||||
]
|
|
||||||
v(3fr)
|
|
||||||
|
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
#let note(body, supplement: "注") = {
|
#let note(body, supplement: "注") = {
|
||||||
if supplement != none {
|
if supplement != none {
|
||||||
text(supplement, 9pt, font: zhfont_sans, weight: "medium", fill: theme_color.darken(40%))
|
text(supplement, 9pt, font: zhfont_sans, weight: "medium", fill: theme_color_set.at("100"))
|
||||||
h(0.5em)
|
h(0.5em)
|
||||||
}
|
}
|
||||||
text(body, 9pt, font: zhfont_fangsong)
|
text(body, 9pt, font: zhfont_fangsong)
|
||||||
@ -124,15 +117,15 @@
|
|||||||
// TODO: wrap placed figures: https://github.com/typst/typst/issues/5181
|
// TODO: wrap placed figures: https://github.com/typst/typst/issues/5181
|
||||||
figure(box(
|
figure(box(
|
||||||
inset: 5pt,
|
inset: 5pt,
|
||||||
stroke: 1pt + theme_color,
|
stroke: 1pt + theme_color_set.at("100"),
|
||||||
body
|
body
|
||||||
), ..args)
|
), ..args)
|
||||||
}
|
}
|
||||||
|
|
||||||
#let fancy_term_box(title, value) = {
|
#let fancy_term_box(title, value) = {
|
||||||
box(baseline: 3pt,{
|
box(baseline: 3pt,{
|
||||||
box(fill: theme_color.lighten(80%), inset: 3pt, text([#title], fill: theme_color.darken(40%), font: zhfont_sans, weight: "medium"))
|
box(fill: theme_color_set.at("20"), inset: 3pt, text([#title], fill: theme_color_set.at("100"), font: zhfont_sans, weight: "medium"))
|
||||||
box(fill: theme_color.lighten(20%), inset: 3pt, text([#value], fill: white, font: zhfont_sans, weight: "medium"))},
|
box(fill: theme_color_set.at("60"), inset: 3pt, text([#value], fill: white, font: zhfont_sans, weight: "medium"))},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +142,7 @@
|
|||||||
inset: 0.4em,
|
inset: 0.4em,
|
||||||
stroke: none,
|
stroke: none,
|
||||||
grid.cell(
|
grid.cell(
|
||||||
fill: theme_color.lighten(20%),
|
fill: theme_color_set.at("80"),
|
||||||
{
|
{
|
||||||
set text(fill: white)
|
set text(fill: white)
|
||||||
"第"
|
"第"
|
||||||
@ -157,7 +150,7 @@
|
|||||||
"章"
|
"章"
|
||||||
}),
|
}),
|
||||||
grid.cell(
|
grid.cell(
|
||||||
fill: theme_color.lighten(80%),
|
fill: theme_color_set.at("20"),
|
||||||
{
|
{
|
||||||
it.body
|
it.body
|
||||||
})
|
})
|
||||||
@ -170,8 +163,8 @@
|
|||||||
counter("section_N").step()
|
counter("section_N").step()
|
||||||
counter(figure.where(kind: "exercise-problem")).update(0)
|
counter(figure.where(kind: "exercise-problem")).update(0)
|
||||||
block(width: 100%, {
|
block(width: 100%, {
|
||||||
set text(30pt, font: zhfont_sans, weight: "light")
|
set text(30pt, font: zhfont_sans, weight: "regular")
|
||||||
block(stroke: (bottom: 10pt + theme_color.lighten(80%),), inset: -2pt)[
|
block(stroke: (bottom: 10pt + theme_color_set.at("20"),), inset: -2pt)[
|
||||||
#context{
|
#context{
|
||||||
counter("chapter_N").display("1")
|
counter("chapter_N").display("1")
|
||||||
counter("section_N").display("A")
|
counter("section_N").display("A")
|
||||||
@ -188,7 +181,7 @@
|
|||||||
let isleft = calc.even(this_page)
|
let isleft = calc.even(this_page)
|
||||||
set align(left) if isleft
|
set align(left) if isleft
|
||||||
set align(right) if not isleft
|
set align(right) if not isleft
|
||||||
set text(9pt, font: zhfont_sans, fill: theme_color.darken(20%))
|
set text(9pt, font: zhfont_sans, fill: text_color_set.at("100"), weight: "semibold")
|
||||||
|
|
||||||
let prev_headers = query(selector(<section-title>).before(here()))
|
let prev_headers = query(selector(<section-title>).before(here()))
|
||||||
let book_title = query(selector(<book-title>)).first().text
|
let book_title = query(selector(<book-title>)).first().text
|
||||||
@ -230,30 +223,21 @@
|
|||||||
"explain": "解释",
|
"explain": "解释",
|
||||||
)
|
)
|
||||||
tab
|
tab
|
||||||
text(splt.at(type), font: zhfont_sans, weight: "medium", fill: theme_color.darken(40%))
|
text(splt.at(type), font: zhfont_sans, weight: "medium", fill: theme_color_set.at("100"))
|
||||||
h(0.5em)
|
h(0.5em)
|
||||||
s
|
s
|
||||||
if type == "proof" {
|
if type == "proof" {
|
||||||
h(1fr)
|
h(1fr)
|
||||||
text(sym.square.filled, fill: theme_color)
|
text(sym.square.filled, fill: theme_color_set.at("60"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#let ploting-styles = (
|
#let ploting-styles = (
|
||||||
mark: (fill: theme_color.lighten(80%), stroke: theme_color),
|
mark: (fill: theme_color_set.at("10"), stroke: theme_color_set.at("80")),
|
||||||
|
|
||||||
nothing: (fill: none, stroke: none),
|
nothing: (fill: none, stroke: none),
|
||||||
|
|
||||||
s_l20: (stroke: theme_color.lighten(20%)),
|
s: (stroke: theme_color_set.at("100")),
|
||||||
s: (stroke: theme_color),
|
|
||||||
s_d20: (stroke: theme_color.darken(20%)),
|
|
||||||
s_hl: (stroke: theme_color.darken(20%) + 2pt),
|
|
||||||
s_hl_l20: (stroke: theme_color.lighten(20%) + 2pt),
|
|
||||||
s_black: (stroke: black),
|
|
||||||
|
|
||||||
f_l80: (stroke: none, fill: theme_color.lighten(80%)),
|
|
||||||
f_l90: (stroke: none, fill: theme_color.lighten(90%)),
|
|
||||||
f_l95: (stroke: none, fill: theme_color.lighten(95%)),
|
|
||||||
|
|
||||||
axis: cetz.draw.set-style(axes: (stroke: .5pt, tick: (stroke: .5pt))),
|
axis: cetz.draw.set-style(axes: (stroke: .5pt, tick: (stroke: .5pt))),
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user