fix(textbooks): KaTeX-рендер в шпаргалке Алгебры 8

Боковая шпаргалка строилась обычным HTML (Unicode-символы √ ≤ ⊂), формулы не оформлялись как настоящие математические.

Фикс:
- Все формулы в SIDEBARS обёрнуты $-делимитерами KaTeX (\sqrt, \mathbb, \cap, \subset, \Leftrightarrow и т.д.)
- После buildSidebar() вызывается renderMathInElement(box) для встроенного рендера
- Учебник теперь показывает корни и множества в правильной типографике
This commit is contained in:
Maxim Dolgolyov
2026-05-27 09:41:20 +03:00
parent dd62486074
commit fff3ddc45e
+35 -31
View File
@@ -497,64 +497,64 @@ const SIDEBARS = {
p1:{
title:'Шпаргалка §1',
rows:[
['<b>√a</b>','арифметический корень из <b>a 0</b>'],
['Определение','<i>неотриц.</i> число, квадрат которого равен <b>a</b>'],
['√0','= 0'],
['√(25)','не существует'],
['(√a)²','= a, при a 0'],
['√(a²)','= |a|'],
['$\\sqrt{a}$','арифметический корень из <b>$a \\geq 0$</b>'],
['Определение','<i>неотриц.</i> число, квадрат которого равен <b>$a$</b>'],
['$\\sqrt{0}$','$= 0$'],
['$\\sqrt{-25}$','не существует'],
['$(\\sqrt{a})^2$','$= a$, при $a \\geq 0$'],
['$\\sqrt{a^2}$','$= |a|$'],
]
},
p2:{
title:'Шпаргалка §2',
rows:[
['','натуральные: 1, 2, 3, ...'],
['','целые: ..., 2, 1, 0, 1, 2, ...'],
['','рациональные: m/n (n≠0)'],
['<b>I</b>','иррациональные: √2, √3, π, e, ...'],
['','действительные: ℚ ∪ I'],
['Включение',''],
['$\\mathbb{N}$','натуральные: $1, 2, 3, \\ldots$'],
['$\\mathbb{Z}$','целые: $\\ldots, -2, -1, 0, 1, 2, \\ldots$'],
['$\\mathbb{Q}$','рациональные: $m/n$, $n \\neq 0$'],
['$\\mathbb{I}$','иррац.: $\\sqrt{2}, \\sqrt{3}, \\pi, e$'],
['$\\mathbb{R}$','действ.: $\\mathbb{Q} \\cup \\mathbb{I}$'],
['Включение','$\\mathbb{N} \\subset \\mathbb{Z} \\subset \\mathbb{Q} \\subset \\mathbb{R}$'],
]
},
p3:{
title:'Шпаргалка §3',
rows:[
['<b>√(ab)</b>','= √a · √b, a≥0, b≥0'],
['<b>√(a/b)</b>','= √a / √b, a≥0, b>0'],
['<b>√(a²)</b>','= |a|'],
['(√a)²','= a'],
['Пример','√(36·25) = 6·5 = 30'],
['$\\sqrt{ab}$','$= \\sqrt{a} \\cdot \\sqrt{b}$, $a,b \\geq 0$'],
['$\\sqrt{a/b}$','$= \\sqrt{a}/\\sqrt{b}$, $a \\geq 0$, $b>0$'],
['$\\sqrt{a^2}$','$= |a|$'],
['$(\\sqrt{a})^2$','$= a$'],
['Пример','$\\sqrt{36 \\cdot 25} = 6 \\cdot 5 = 30$'],
]
},
p4:{
title:'Шпаргалка §4',
rows:[
['Вынесение','√(a²b) = a√b при a≥0'],
['Внесение','a√b = √(a²b) при a≥0'],
['От иррац.','1/√a = √a / a'],
['От иррац.²','c/(a√b) = c√b/(ab)'],
['Вынесение','$\\sqrt{a^2 b} = a\\sqrt{b}$ при $a \\geq 0$'],
['Внесение','$a\\sqrt{b} = \\sqrt{a^2 b}$ при $a \\geq 0$'],
['От иррац.','$\\dfrac{1}{\\sqrt{a}} = \\dfrac{\\sqrt{a}}{a}$'],
['Сложнее','$\\dfrac{c}{a\\sqrt{b}} = \\dfrac{c\\sqrt{b}}{ab}$'],
['Сравнение','возведением в квадрат'],
]
},
p5:{
title:'Шпаргалка §5',
rows:[
['<b>(a; b)</b>','a < x < b — открытый'],
['<b>[a; b]</b>','a ≤ x ≤ b — закрытый'],
['<b>[a; b)</b>','a x < b — полуоткрытый'],
['<b>(a; +∞)</b>','x > a — луч'],
['<b>A B</b>','объединение (или)'],
['<b>A ∩ B</b>','пересечение (и)'],
['$(a; b)$','$a < x < b$ — открытый'],
['$[a; b]$','$a \\leq x \\leq b$ — закрытый'],
['$[a; b)$','$a \\leq x < b$ — полуоткр.'],
['$(a; +\\infty)$','$x > a$ — луч'],
['$A \\cup B$','объединение (или)'],
['$A \\cap B$','пересечение (и)'],
]
},
p6:{
title:'Шпаргалка §6',
rows:[
['<b>{</b> система','решение = (и то, и то)'],
['<b>[</b> совокупность','решение = (одно ИЛИ другое)'],
['Двойное','a&lt;x&lt;b ⟺ система {x&gt;a; x&lt;b}'],
['$\\{\\,$ система','решение $= \\cap$ (и то, и то)'],
['$[\\,$ совокупн.','решение $= \\cup$ (одно ИЛИ другое)'],
['Двойное','$a<x<b \\Leftrightarrow \\{x>a;\\, x<b\\}$'],
['Алгоритм','1) решить каждое'],
['','2) применить ∩ или '],
['','2) применить $\\cap$ или $\\cup$'],
]
},
final:{
@@ -588,6 +588,10 @@ function buildSidebar(id){
html += `<div class="sidecard" style="background:linear-gradient(135deg,var(--pri-soft),var(--acc-soft))"><h4>Подсказка</h4>
<div class="sidecard-row" style="font-size:.82rem">Учитесь без спешки. Сначала прочитайте теорию, потом попробуйте интерактив, и только потом решайте задачи.</div></div>`;
box.innerHTML = html;
// render KaTeX inside sidebar
if(window.renderMathInElement){
try{ renderMathInElement(box, {delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false}],throwOnError:false}); }catch(e){}
}
}
/* ════════════════════════════════════════════════════════