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:{ p1:{
title:'Шпаргалка §1', title:'Шпаргалка §1',
rows:[ rows:[
['<b>√a</b>','арифметический корень из <b>a 0</b>'], ['$\\sqrt{a}$','арифметический корень из <b>$a \\geq 0$</b>'],
['Определение','<i>неотриц.</i> число, квадрат которого равен <b>a</b>'], ['Определение','<i>неотриц.</i> число, квадрат которого равен <b>$a$</b>'],
['√0','= 0'], ['$\\sqrt{0}$','$= 0$'],
['√(25)','не существует'], ['$\\sqrt{-25}$','не существует'],
['(√a)²','= a, при a 0'], ['$(\\sqrt{a})^2$','$= a$, при $a \\geq 0$'],
['√(a²)','= |a|'], ['$\\sqrt{a^2}$','$= |a|$'],
] ]
}, },
p2:{ p2:{
title:'Шпаргалка §2', title:'Шпаргалка §2',
rows:[ rows:[
['','натуральные: 1, 2, 3, ...'], ['$\\mathbb{N}$','натуральные: $1, 2, 3, \\ldots$'],
['','целые: ..., 2, 1, 0, 1, 2, ...'], ['$\\mathbb{Z}$','целые: $\\ldots, -2, -1, 0, 1, 2, \\ldots$'],
['','рациональные: m/n (n≠0)'], ['$\\mathbb{Q}$','рациональные: $m/n$, $n \\neq 0$'],
['<b>I</b>','иррациональные: √2, √3, π, e, ...'], ['$\\mathbb{I}$','иррац.: $\\sqrt{2}, \\sqrt{3}, \\pi, e$'],
['','действительные: ℚ ∪ I'], ['$\\mathbb{R}$','действ.: $\\mathbb{Q} \\cup \\mathbb{I}$'],
['Включение',''], ['Включение','$\\mathbb{N} \\subset \\mathbb{Z} \\subset \\mathbb{Q} \\subset \\mathbb{R}$'],
] ]
}, },
p3:{ p3:{
title:'Шпаргалка §3', title:'Шпаргалка §3',
rows:[ rows:[
['<b>√(ab)</b>','= √a · √b, a≥0, b≥0'], ['$\\sqrt{ab}$','$= \\sqrt{a} \\cdot \\sqrt{b}$, $a,b \\geq 0$'],
['<b>√(a/b)</b>','= √a / √b, a≥0, b>0'], ['$\\sqrt{a/b}$','$= \\sqrt{a}/\\sqrt{b}$, $a \\geq 0$, $b>0$'],
['<b>√(a²)</b>','= |a|'], ['$\\sqrt{a^2}$','$= |a|$'],
['(√a)²','= a'], ['$(\\sqrt{a})^2$','$= a$'],
['Пример','√(36·25) = 6·5 = 30'], ['Пример','$\\sqrt{36 \\cdot 25} = 6 \\cdot 5 = 30$'],
] ]
}, },
p4:{ p4:{
title:'Шпаргалка §4', title:'Шпаргалка §4',
rows:[ rows:[
['Вынесение','√(a²b) = a√b при a≥0'], ['Вынесение','$\\sqrt{a^2 b} = a\\sqrt{b}$ при $a \\geq 0$'],
['Внесение','a√b = √(a²b) при a≥0'], ['Внесение','$a\\sqrt{b} = \\sqrt{a^2 b}$ при $a \\geq 0$'],
['От иррац.','1/√a = √a / a'], ['От иррац.','$\\dfrac{1}{\\sqrt{a}} = \\dfrac{\\sqrt{a}}{a}$'],
['От иррац.²','c/(a√b) = c√b/(ab)'], ['Сложнее','$\\dfrac{c}{a\\sqrt{b}} = \\dfrac{c\\sqrt{b}}{ab}$'],
['Сравнение','возведением в квадрат'], ['Сравнение','возведением в квадрат'],
] ]
}, },
p5:{ p5:{
title:'Шпаргалка §5', title:'Шпаргалка §5',
rows:[ rows:[
['<b>(a; b)</b>','a < x < b — открытый'], ['$(a; b)$','$a < x < b$ — открытый'],
['<b>[a; b]</b>','a ≤ x ≤ b — закрытый'], ['$[a; b]$','$a \\leq x \\leq b$ — закрытый'],
['<b>[a; b)</b>','a x < b — полуоткрытый'], ['$[a; b)$','$a \\leq x < b$ — полуоткр.'],
['<b>(a; +∞)</b>','x > a — луч'], ['$(a; +\\infty)$','$x > a$ — луч'],
['<b>A B</b>','объединение (или)'], ['$A \\cup B$','объединение (или)'],
['<b>A ∩ B</b>','пересечение (и)'], ['$A \\cap B$','пересечение (и)'],
] ]
}, },
p6:{ p6:{
title:'Шпаргалка §6', title:'Шпаргалка §6',
rows:[ rows:[
['<b>{</b> система','решение = (и то, и то)'], ['$\\{\\,$ система','решение $= \\cap$ (и то, и то)'],
['<b>[</b> совокупность','решение = (одно ИЛИ другое)'], ['$[\\,$ совокупн.','решение $= \\cup$ (одно ИЛИ другое)'],
['Двойное','a&lt;x&lt;b ⟺ система {x&gt;a; x&lt;b}'], ['Двойное','$a<x<b \\Leftrightarrow \\{x>a;\\, x<b\\}$'],
['Алгоритм','1) решить каждое'], ['Алгоритм','1) решить каждое'],
['','2) применить ∩ или '], ['','2) применить $\\cap$ или $\\cup$'],
] ]
}, },
final:{ 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> 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>`; <div class="sidecard-row" style="font-size:.82rem">Учитесь без спешки. Сначала прочитайте теорию, потом попробуйте интерактив, и только потом решайте задачи.</div></div>`;
box.innerHTML = html; 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){}
}
} }
/* ════════════════════════════════════════════════════════ /* ════════════════════════════════════════════════════════