fix(textbooks): убраны лишние слэши в LaTeX-формулах (over-escaping)
Формулы в JS-литералах имели \\\\dfrac / \\\\\\\\dfrac (4/8 слэшей) вместо
\\dfrac (2). После JS-анескейпа KaTeX получал \\dfrac, трактовал \\ как
перенос строки и печатал dfrac/cdot/sqrt/pi как текст (карточка пирамиды и
конуса в geometry_11_ch2, и др.).
Схлопнуты прогоны слэшей кратные 4 перед LaTeX-командой -> 2. Прогоны из
3 слэшей (\\ перенос строки + \cmd в \begin{cases}) и перед x/цифрой не
тронуты. 150 правок в 7 файлах (algebra_11_ch1/ch2/ch3, geometry_11_ch1..ch4).
БД чиста: questions (1398) text/explanation/correct_text + options (5187) -
0 багов. Скрипт: backend/scripts/fix_overescaped_latex.js (идемпотентный,
dry-run по умолчанию, --apply, с KaTeX-валидацией).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Fix OVER-ESCAPED LaTeX backslashes in textbook HTML.
|
||||
*
|
||||
* BUG: some formulas in JS string literals have too many backslashes, e.g.
|
||||
* "$V=\\\\dfrac{1}{3}S_{осн}\\\\cdot h$" (4 backslashes)
|
||||
* After JS unescaping KaTeX receives \\dfrac -> it renders "\\" as a LINE
|
||||
* BREAK and prints "dfrac"/"cdot" as plain text (exactly the screenshot).
|
||||
* The correct literal is 2 backslashes ("\\dfrac" -> value \dfrac).
|
||||
*
|
||||
* PARITY RULE (critical — protects legitimate row separators):
|
||||
* literal-run length value backslashes meaning
|
||||
* 2 1 \cmd OK keep
|
||||
* 4 2 \\ + "cmd"(text) BUG -> 2
|
||||
* 6 3 \\ + \cmd (rowbreak+cmd) OK keep
|
||||
* 8 4 \\\\ + "cmd"(text) BUG -> 2
|
||||
* => collapse ONLY runs whose length is a multiple of 4, AND only when the
|
||||
* run is immediately followed by a known LaTeX command. Runs before "x",
|
||||
* digits, etc. (real \\ row separators inside cases/array) are untouched.
|
||||
*
|
||||
* Usage: node backend/scripts/fix_overescaped_latex.js (dry run)
|
||||
* node backend/scripts/fix_overescaped_latex.js --apply (write)
|
||||
*/
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const APPLY = process.argv.includes('--apply');
|
||||
|
||||
// Known LaTeX commands observed at 4/8 backslashes (exact-match whitelist).
|
||||
const CMDSET = new Set([
|
||||
'dfrac','tfrac','frac','sqrt','cdot','pi','log','ln','lg','alpha','beta','gamma',
|
||||
'delta','Delta','theta','lambda','mu','sigma','phi','varphi','omega','infty',
|
||||
'iff','in','notin','ne','neq','ge','geq','le','leq','mathbb','mathrm',
|
||||
'leftrightarrow','rightarrow','leftarrow','times','div','vec','overline',
|
||||
'perp','parallel','cos','sin','tan','cot','ldots','cdots','pm','mp','angle','triangle',
|
||||
]);
|
||||
|
||||
let katex = null;
|
||||
try { katex = require('katex'); } catch { /* validation optional */ }
|
||||
function mathRegions(t) {
|
||||
const out = []; let i = 0;
|
||||
while (i < t.length) {
|
||||
const a = t.indexOf('$', i); if (a < 0) break;
|
||||
const dbl = t[a + 1] === '$'; const s = a + (dbl ? 2 : 1);
|
||||
let b = dbl ? t.indexOf('$$', s) : t.indexOf('$', s);
|
||||
if (b < 0 && dbl) b = t.indexOf('$', s);
|
||||
if (b < 0) break;
|
||||
out.push(t.slice(s, b));
|
||||
i = b + (dbl && t.slice(b, b + 2) === '$$' ? 2 : 1);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
// These math strings live in JS literals; KaTeX sees them AFTER one level of JS
|
||||
// unescaping. Emulate that so validation reflects what the browser renders.
|
||||
function jsUnescape(s) {
|
||||
return s.replace(/\\\\/g, '\\');
|
||||
}
|
||||
function katexErrors(t) {
|
||||
if (!katex) return null;
|
||||
let bad = 0;
|
||||
for (const inner of mathRegions(t)) {
|
||||
const expr = jsUnescape(inner);
|
||||
try { katex.renderToString(expr, { throwOnError: true }); }
|
||||
catch { bad++; }
|
||||
}
|
||||
return bad;
|
||||
}
|
||||
|
||||
const dir = path.join(__dirname, '..', '..', 'frontend', 'textbooks');
|
||||
const files = ['algebra_11_ch1.html','algebra_11_ch3.html','geometry_11_ch3.html',
|
||||
'geometry_11_ch2.html','geometry_11_ch1.html','algebra_11_ch2.html','algebra_8.html',
|
||||
'algebra_7_ch4.html','geometry_11_ch4.html'];
|
||||
|
||||
const report = [];
|
||||
report.push('MODE: ' + (APPLY ? 'APPLY' : 'DRY-RUN'));
|
||||
let grandFixes = 0;
|
||||
|
||||
for (const f of files) {
|
||||
const p = path.join(dir, f);
|
||||
const t = fs.readFileSync(p, 'utf8');
|
||||
const before = katexErrors(t);
|
||||
|
||||
const perCmd = {};
|
||||
let fixes = 0;
|
||||
const next = t.replace(/(\\{4,})([A-Za-z]+)/g, (whole, bs, word) => {
|
||||
if (bs.length % 4 !== 0) return whole; // 6,10,... rowbreak+command -> keep
|
||||
if (!CMDSET.has(word)) return whole; // x / begin / unknown -> keep
|
||||
fixes++;
|
||||
perCmd[word] = (perCmd[word] || 0) + 1;
|
||||
return '\\\\' + word; // collapse to two backslashes
|
||||
});
|
||||
|
||||
// validate by emulating browser render of the FIXED text
|
||||
const after = katexErrors(next);
|
||||
grandFixes += fixes;
|
||||
report.push('');
|
||||
report.push(f + ': fixes=' + fixes + ' katexErrors before=' + before + ' after=' + after +
|
||||
(fixes ? ' cmds=' + JSON.stringify(perCmd) : ''));
|
||||
if (after !== null && before !== null && after > before)
|
||||
report.push(' !! WARNING: katex errors INCREASED — not writing this file');
|
||||
|
||||
if (APPLY && fixes > 0 && !(after > before)) fs.writeFileSync(p, next, 'utf8');
|
||||
}
|
||||
|
||||
report.push('');
|
||||
report.push('TOTAL fixes: ' + grandFixes);
|
||||
fs.writeFileSync(path.join(__dirname, 'fix_overescaped_latex.report.txt'), report.join('\n'), 'utf8');
|
||||
console.log(report.join('\n'));
|
||||
@@ -407,16 +407,16 @@ function goTo(id){
|
||||
}
|
||||
|
||||
const SIDEBARS = {
|
||||
p1:{title:"Шпаргалка §1",rows:[["Корень","$\\\\sqrt[n]{a^m} = a^{m/n}$, $a \\\\ge 0$, $n \\\\in \\\\mathbb{N}$"],["Свойства","$a^p \\\\cdot a^q = a^{p+q}$, $(a^p)^q = a^{pq}$"],["Дробный","$a^{1/n} = \\\\sqrt[n]{a}$, $a^{-p} = 1/a^p$"],["Действ.","показатель — любое $x \\\\in \\\\mathbb{R}$"]]},
|
||||
p2:{title:"Шпаргалка §2",rows:[["Вид","$y = x^\\\\alpha$, $\\\\alpha \\\\in \\\\mathbb{R}$"],["$\\\\alpha > 0$","возрастает на $(0; +\\\\infty)$"],["$\\\\alpha < 0$","убывает на $(0; +\\\\infty)$"],["Чёт./нечёт.","зависит от $\\\\alpha$"]]},
|
||||
p3:{title:"Шпаргалка §3",rows:[["Опр.","$\\\\log_a b = c \\\\iff a^c = b$"],["Условия","$a > 0$, $a \\\\ne 1$, $b > 0$"],["Тождество","$a^{\\\\log_a b} = b$"],["$\\\\lg, \\\\ln$","$\\\\lg = \\\\log_{10}$, $\\\\ln = \\\\log_e$"]]},
|
||||
p1:{title:"Шпаргалка §1",rows:[["Корень","$\\sqrt[n]{a^m} = a^{m/n}$, $a \\ge 0$, $n \\in \\mathbb{N}$"],["Свойства","$a^p \\cdot a^q = a^{p+q}$, $(a^p)^q = a^{pq}$"],["Дробный","$a^{1/n} = \\sqrt[n]{a}$, $a^{-p} = 1/a^p$"],["Действ.","показатель — любое $x \\in \\mathbb{R}$"]]},
|
||||
p2:{title:"Шпаргалка §2",rows:[["Вид","$y = x^\\alpha$, $\\alpha \\in \\mathbb{R}$"],["$\\alpha > 0$","возрастает на $(0; +\\infty)$"],["$\\alpha < 0$","убывает на $(0; +\\infty)$"],["Чёт./нечёт.","зависит от $\\alpha$"]]},
|
||||
p3:{title:"Шпаргалка §3",rows:[["Опр.","$\\log_a b = c \\iff a^c = b$"],["Условия","$a > 0$, $a \\ne 1$, $b > 0$"],["Тождество","$a^{\\log_a b} = b$"],["$\\lg, \\ln$","$\\lg = \\log_{10}$, $\\ln = \\log_e$"]]},
|
||||
final1:{title:"Финал главы 1",rows:[["§§1–3","теория главы 1"],["Награда","+50 XP"]]}
|
||||
};
|
||||
|
||||
const TIPS=[
|
||||
{sec:'p1',html:"Дробный показатель: $a^{m/n} = \\\\sqrt[n]{a^m}$. База $a \\\\ge 0$ для произвольного $m/n$."},
|
||||
{sec:'p2',html:"Степенная функция $y = x^\\\\alpha$: при $\\\\alpha > 0$ возрастает на $(0; +\\\\infty)$, при $\\\\alpha < 0$ — убывает."},
|
||||
{sec:'p3',html:"$\\\\log_a b$ — это показатель, в который надо возвести $a$, чтобы получить $b$."},
|
||||
{sec:'p1',html:"Дробный показатель: $a^{m/n} = \\sqrt[n]{a^m}$. База $a \\ge 0$ для произвольного $m/n$."},
|
||||
{sec:'p2',html:"Степенная функция $y = x^\\alpha$: при $\\alpha > 0$ возрастает на $(0; +\\infty)$, при $\\alpha < 0$ — убывает."},
|
||||
{sec:'p3',html:"$\\log_a b$ — это показатель, в который надо возвести $a$, чтобы получить $b$."},
|
||||
{sec:'final1',html:"Финал главы 1 — интегрированные задачи по §§1–3."}
|
||||
];
|
||||
|
||||
|
||||
@@ -387,9 +387,9 @@ function goTo(id){
|
||||
}
|
||||
|
||||
const SIDEBARS = {
|
||||
p4:{title:"Шпаргалка §4",rows:[["Вид","$y = a^x$, $a > 0$, $a \\\\ne 1$"],["D(f)","$x \\\\in \\\\mathbb{R}$"],["E(f)","$y > 0$ (всегда положит.)"],["$a > 1$","возрастает"],["$0 < a < 1$","убывает"]]},
|
||||
p5:{title:"Шпаргалка §5",rows:[["Базовый","$a^{f(x)} = a^{g(x)} \\\\iff f(x) = g(x)$"],["Замена","$t = a^x$, $t > 0$"],["Вынес.","$a^x(\\\\ldots) = 0$ — разделить"],["Графич.","пересечение графиков"]]},
|
||||
p6:{title:"Шпаргалка §6",rows:[["$a > 1$","$a^{f} > a^{g} \\\\iff f > g$"],["$0 < a < 1$","$a^{f} > a^{g} \\\\iff f < g$ (знак меняется!)"],["Замена","$t = a^x$, $t > 0$"]]},
|
||||
p4:{title:"Шпаргалка §4",rows:[["Вид","$y = a^x$, $a > 0$, $a \\ne 1$"],["D(f)","$x \\in \\mathbb{R}$"],["E(f)","$y > 0$ (всегда положит.)"],["$a > 1$","возрастает"],["$0 < a < 1$","убывает"]]},
|
||||
p5:{title:"Шпаргалка §5",rows:[["Базовый","$a^{f(x)} = a^{g(x)} \\iff f(x) = g(x)$"],["Замена","$t = a^x$, $t > 0$"],["Вынес.","$a^x(\\ldots) = 0$ — разделить"],["Графич.","пересечение графиков"]]},
|
||||
p6:{title:"Шпаргалка §6",rows:[["$a > 1$","$a^{f} > a^{g} \\iff f > g$"],["$0 < a < 1$","$a^{f} > a^{g} \\iff f < g$ (знак меняется!)"],["Замена","$t = a^x$, $t > 0$"]]},
|
||||
final2:{title:"Финал главы 2",rows:[["§§4–6","теория главы 2"],["Награда","+50 XP"]]}
|
||||
};
|
||||
|
||||
|
||||
@@ -411,17 +411,17 @@ function goTo(id){
|
||||
}
|
||||
|
||||
const SIDEBARS = {
|
||||
p7:{title:"Шпаргалка §7",rows:[["Произв.","$\\\\log_a(bc) = \\\\log_a b + \\\\log_a c$"],["Част.","$\\\\log_a(b/c) = \\\\log_a b - \\\\log_a c$"],["Степ.","$\\\\log_a b^k = k \\\\log_a b$"],["Перех.","$\\\\log_a b = \\\\dfrac{\\\\log_c b}{\\\\log_c a}$"]]},
|
||||
p8:{title:"Шпаргалка §8",rows:[["Вид","$y = \\\\log_a x$, $a > 0$, $a \\\\ne 1$"],["D(f)","$x > 0$"],["E(f)","$y \\\\in \\\\mathbb{R}$"],["$a > 1$","возрастает"],["$0 < a < 1$","убывает"],["Точка","проходит через $(1; 0)$"]]},
|
||||
p9:{title:"Шпаргалка §9",rows:[["Базовый","$\\\\log_a f = \\\\log_a g \\\\iff f = g$, $f, g > 0$"],["ОДЗ","всё под $\\\\log > 0$, основание $a > 0$, $a \\\\ne 1$"],["Замена","$t = \\\\log_a x$"]]},
|
||||
p10:{title:"Шпаргалка §10",rows:[["$a > 1$","$\\\\log_a f > \\\\log_a g \\\\iff f > g > 0$"],["$0 < a < 1$","$\\\\log_a f > \\\\log_a g \\\\iff 0 < f < g$ (знак меняется!)"],["ОДЗ","обязательно учесть"]]},
|
||||
p7:{title:"Шпаргалка §7",rows:[["Произв.","$\\log_a(bc) = \\log_a b + \\log_a c$"],["Част.","$\\log_a(b/c) = \\log_a b - \\log_a c$"],["Степ.","$\\log_a b^k = k \\log_a b$"],["Перех.","$\\log_a b = \\dfrac{\\log_c b}{\\log_c a}$"]]},
|
||||
p8:{title:"Шпаргалка §8",rows:[["Вид","$y = \\log_a x$, $a > 0$, $a \\ne 1$"],["D(f)","$x > 0$"],["E(f)","$y \\in \\mathbb{R}$"],["$a > 1$","возрастает"],["$0 < a < 1$","убывает"],["Точка","проходит через $(1; 0)$"]]},
|
||||
p9:{title:"Шпаргалка §9",rows:[["Базовый","$\\log_a f = \\log_a g \\iff f = g$, $f, g > 0$"],["ОДЗ","всё под $\\log > 0$, основание $a > 0$, $a \\ne 1$"],["Замена","$t = \\log_a x$"]]},
|
||||
p10:{title:"Шпаргалка §10",rows:[["$a > 1$","$\\log_a f > \\log_a g \\iff f > g > 0$"],["$0 < a < 1$","$\\log_a f > \\log_a g \\iff 0 < f < g$ (знак меняется!)"],["ОДЗ","обязательно учесть"]]},
|
||||
final3:{title:"Финал главы 3",rows:[["§§7–10","теория главы 3"],["Награда","+50 XP"]]}
|
||||
};
|
||||
|
||||
const TIPS=[
|
||||
{sec:'p7',html:"$\\\\log_a(bc) = \\\\log_a b + \\\\log_a c$ — произведение в логарифме превращается в сумму."},
|
||||
{sec:'p8',html:"График $y = \\\\log_a x$ — зеркальное отражение $y = a^x$ относительно $y = x$."},
|
||||
{sec:'p9',html:"<b>Всегда</b> выписывай ОДЗ: всё под $\\\\log$ должно быть строго положительно."},
|
||||
{sec:'p7',html:"$\\log_a(bc) = \\log_a b + \\log_a c$ — произведение в логарифме превращается в сумму."},
|
||||
{sec:'p8',html:"График $y = \\log_a x$ — зеркальное отражение $y = a^x$ относительно $y = x$."},
|
||||
{sec:'p9',html:"<b>Всегда</b> выписывай ОДЗ: всё под $\\log$ должно быть строго положительно."},
|
||||
{sec:'p10',html:"При $0 < a < 1$ — знак неравенства меняется. ОДЗ обязательно."},
|
||||
{sec:'final3',html:"Финал главы 3 — синтез логарифмов и логарифмических функций."}
|
||||
];
|
||||
|
||||
@@ -409,14 +409,14 @@ function goTo(id){
|
||||
}
|
||||
|
||||
const SIDEBARS = {
|
||||
p1:{title:"Шпаргалка § 1", rows:[["Тема","Призма"],["Прямая","$S_{бок}=P_{осн}\\\\cdot h$"],["Наклонная","$S_{бок}=P_{пер}\\\\cdot l$"],["Объём","$V=S_{осн}\\\\cdot h$"],["Диагональ пар.","$d=\\\\sqrt{a^2+b^2+c^2}$"]]},
|
||||
p2:{title:"Шпаргалка § 2", rows:[["Тема", "Цилиндр"],["$S_{осн}$","$\\\\pi R^2$"],["$S_{бок}$","$2\\\\pi Rh$"],["$S_{полн}$","$2\\\\pi R(R+h)$"],["$V$","$\\\\pi R^2 h$"],["Развёртка","прямоуг. $2\\\\pi R \\\\times h$"],["Осевое сеч.","прямоуг. $2R \\\\times h$"],["Наклон. сеч.","эллипс, $a=R/\\\\cos\\\\alpha$, $b=R$"]]},
|
||||
p1:{title:"Шпаргалка § 1", rows:[["Тема","Призма"],["Прямая","$S_{бок}=P_{осн}\\cdot h$"],["Наклонная","$S_{бок}=P_{пер}\\cdot l$"],["Объём","$V=S_{осн}\\cdot h$"],["Диагональ пар.","$d=\\sqrt{a^2+b^2+c^2}$"]]},
|
||||
p2:{title:"Шпаргалка § 2", rows:[["Тема", "Цилиндр"],["$S_{осн}$","$\\pi R^2$"],["$S_{бок}$","$2\\pi Rh$"],["$S_{полн}$","$2\\pi R(R+h)$"],["$V$","$\\pi R^2 h$"],["Развёртка","прямоуг. $2\\pi R \\times h$"],["Осевое сеч.","прямоуг. $2R \\times h$"],["Наклон. сеч.","эллипс, $a=R/\\cos\\alpha$, $b=R$"]]},
|
||||
final1:{title:"Финал раздела 1", rows:[["§ 1","Призма"],["§ 2","Цилиндр"],["Боссы","5 интегрированных"],["Награда","+50 XP + ачивка"]]}
|
||||
};
|
||||
|
||||
const TIPS=[
|
||||
{sec:'p1',html:"§ 1 «Призма» — крути 3D-модель в интерактиве 1, проверь формулы в калькуляторе. Главное: $V=S_{осн}\\\\cdot h$, $S_{бок}=P_{осн}\\\\cdot h$ (для прямой)."},
|
||||
{sec:'p2',html:"§ 2 «Цилиндр» — крути 3D-модель в интерактиве 1, разбирай сечения в IV2 (круг/прямоугольник/эллипс). Главное: $S_{бок}=2\\\\\\\\pi Rh$, $V=\\\\\\\\pi R^2 h$, развёртка боковой поверхности — прямоугольник $2\\\\\\\\pi R \\\\\\\\times h$."},
|
||||
{sec:'p1',html:"§ 1 «Призма» — крути 3D-модель в интерактиве 1, проверь формулы в калькуляторе. Главное: $V=S_{осн}\\cdot h$, $S_{бок}=P_{осн}\\cdot h$ (для прямой)."},
|
||||
{sec:'p2',html:"§ 2 «Цилиндр» — крути 3D-модель в интерактиве 1, разбирай сечения в IV2 (круг/прямоугольник/эллипс). Главное: $S_{бок}=2\\pi Rh$, $V=\\pi R^2 h$, развёртка боковой поверхности — прямоугольник $2\\pi R \\times h$."},
|
||||
{sec:'final1',html:"Финал раздела 1 — интегрированные задачи по разделу."}
|
||||
];
|
||||
|
||||
|
||||
@@ -413,30 +413,30 @@ const SIDEBARS = {
|
||||
["Пирамида", "основание + апекс"],
|
||||
["Правильная","основание — правильный многоугольник; высота в центре основания"],
|
||||
["Апофема $l$","высота боковой грани"],
|
||||
["Объём","$V=\\\\dfrac{1}{3}S_{осн}\\\\cdot h$"],
|
||||
["$S_{бок}$ (правильной)","$\\\\dfrac{1}{2}P_{осн}\\\\cdot l$"],
|
||||
["Боковое ребро","$b=\\\\sqrt{R^2+h^2}$"],
|
||||
["Апофема","$l=\\\\sqrt{r^2+h^2}$"],
|
||||
["Усечённая","$V=\\\\dfrac{h}{3}(S_1+S_2+\\\\sqrt{S_1 S_2})$"]
|
||||
["Объём","$V=\\dfrac{1}{3}S_{осн}\\cdot h$"],
|
||||
["$S_{бок}$ (правильной)","$\\dfrac{1}{2}P_{осн}\\cdot l$"],
|
||||
["Боковое ребро","$b=\\sqrt{R^2+h^2}$"],
|
||||
["Апофема","$l=\\sqrt{r^2+h^2}$"],
|
||||
["Усечённая","$V=\\dfrac{h}{3}(S_1+S_2+\\sqrt{S_1 S_2})$"]
|
||||
]},
|
||||
p4:{title:"Шпаргалка § 4", rows:[
|
||||
["Конус","основание ($R$) + апекс"],
|
||||
["Связь","$l^2=R^2+h^2$"],
|
||||
["$S_{осн}$","$\\\\pi R^2$"],
|
||||
["$S_{бок}$","$\\\\pi R l$"],
|
||||
["$S_{полн}$","$\\\\pi R(R+l)$"],
|
||||
["$V$","$\\\\dfrac{1}{3}\\\\pi R^2 h$"],
|
||||
["Развёртка","сектор $r=l$, дуга $2\\\\pi R$"],
|
||||
["Угол развёртки","$\\\\varphi=\\\\dfrac{360°R}{l}$"],
|
||||
["Усечённый $V$","$\\\\dfrac{\\\\pi h}{3}(R_1^2+R_2^2+R_1R_2)$"],
|
||||
["Усечённый $S_{бок}$","$\\\\pi(R_1+R_2)l$"]
|
||||
["$S_{осн}$","$\\pi R^2$"],
|
||||
["$S_{бок}$","$\\pi R l$"],
|
||||
["$S_{полн}$","$\\pi R(R+l)$"],
|
||||
["$V$","$\\dfrac{1}{3}\\pi R^2 h$"],
|
||||
["Развёртка","сектор $r=l$, дуга $2\\pi R$"],
|
||||
["Угол развёртки","$\\varphi=\\dfrac{360°R}{l}$"],
|
||||
["Усечённый $V$","$\\dfrac{\\pi h}{3}(R_1^2+R_2^2+R_1R_2)$"],
|
||||
["Усечённый $S_{бок}$","$\\pi(R_1+R_2)l$"]
|
||||
]},
|
||||
final2:{title:"Финал раздела 2", rows:[["§ 3–§ 4","теория раздела 2"],["Награда","+50 XP"]]}
|
||||
};
|
||||
|
||||
const TIPS=[
|
||||
{sec:'p3',html:"Главное правило: <b>$V=\\\\\\\\dfrac{1}{3}S_{осн}h$</b> для <i>любой</i> пирамиды. А для правильной — $S_{бок}=\\\\\\\\dfrac{1}{2}P_{осн}l$, где $l$ — апофема."},
|
||||
{sec:'p4',html:"Запомни связку: $l^2=R^2+h^2$. Все формулы конуса — это $\\\\\\\\pi R$ умноженное на соответствующий «множитель»: $R$ (основание), $l$ (боковая), $R+l$ (полная), $\\\\\\\\dfrac{Rh}{3}$ (объём)."},
|
||||
{sec:'p3',html:"Главное правило: <b>$V=\\dfrac{1}{3}S_{осн}h$</b> для <i>любой</i> пирамиды. А для правильной — $S_{бок}=\\dfrac{1}{2}P_{осн}l$, где $l$ — апофема."},
|
||||
{sec:'p4',html:"Запомни связку: $l^2=R^2+h^2$. Все формулы конуса — это $\\pi R$ умноженное на соответствующий «множитель»: $R$ (основание), $l$ (боковая), $R+l$ (полная), $\\dfrac{Rh}{3}$ (объём)."},
|
||||
{sec:'final2',html:"Финал раздела 2 — интегрированные задачи по разделу."}
|
||||
];
|
||||
|
||||
|
||||
@@ -415,25 +415,25 @@ const SIDEBARS = {
|
||||
p5:{title:"Шпаргалка § 5", rows:[
|
||||
["Тема", "Сфера"],
|
||||
["Сфера", "множество точек, $|OM|=R$"],
|
||||
["Шар", "множество точек, $|OM|\\\\le R$"],
|
||||
["Шар", "множество точек, $|OM|\\le R$"],
|
||||
["Уравнение", "$(x-a)^2+(y-b)^2+(z-c)^2=R^2$"],
|
||||
["Касательная", "плоскость $\\\\perp$ радиусу $OM$"],
|
||||
["Сечение", "окружность $r=\\\\sqrt{R^2-d^2}$"],
|
||||
["Касательная", "плоскость $\\perp$ радиусу $OM$"],
|
||||
["Сечение", "окружность $r=\\sqrt{R^2-d^2}$"],
|
||||
["Большой круг", "$d=0$, $r=R$"],
|
||||
["Площадь", "$S=4\\\\pi R^2$"],
|
||||
["Объём шара", "$V=\\\\tfrac{4}{3}\\\\pi R^3$"]
|
||||
["Площадь", "$S=4\\pi R^2$"],
|
||||
["Объём шара", "$V=\\tfrac{4}{3}\\pi R^3$"]
|
||||
]},
|
||||
p6:{title:"Шпаргалка § 6", rows:[
|
||||
["Тема", "Шар"],
|
||||
["Шар", "тело, $|OM|\\\\le R$"],
|
||||
["Площадь сферы", "$S=4\\\\pi R^2$"],
|
||||
["Объём шара", "$V=\\\\tfrac{4}{3}\\\\pi R^3$"],
|
||||
["Сегмент $V$", "$\\\\tfrac{\\\\pi h^2(3R-h)}{3}$"],
|
||||
["Сегмент $S$", "$2\\\\pi R h$"],
|
||||
["Сектор $V$", "$\\\\tfrac{2}{3}\\\\pi R^2 h$"],
|
||||
["Слой $V$", "$\\\\tfrac{\\\\pi h}{6}(3r_1^2+3r_2^2+h^2)$"],
|
||||
["Шар", "тело, $|OM|\\le R$"],
|
||||
["Площадь сферы", "$S=4\\pi R^2$"],
|
||||
["Объём шара", "$V=\\tfrac{4}{3}\\pi R^3$"],
|
||||
["Сегмент $V$", "$\\tfrac{\\pi h^2(3R-h)}{3}$"],
|
||||
["Сегмент $S$", "$2\\pi R h$"],
|
||||
["Сектор $V$", "$\\tfrac{2}{3}\\pi R^2 h$"],
|
||||
["Слой $V$", "$\\tfrac{\\pi h}{6}(3r_1^2+3r_2^2+h^2)$"],
|
||||
["Куб впис. шар", "$r=a/2$"],
|
||||
["Куб опис. шар", "$R=\\\\tfrac{a\\\\sqrt{3}}{2}$"]
|
||||
["Куб опис. шар", "$R=\\tfrac{a\\sqrt{3}}{2}$"]
|
||||
]},
|
||||
p7:{title:"Шпаргалка § 7", rows:[
|
||||
["Тема", "Правильные многогранники"],
|
||||
@@ -445,16 +445,16 @@ const SIDEBARS = {
|
||||
["Додекаэдр", "$F{=}12,\\\\ V{=}20,\\\\ E{=}30$"],
|
||||
["Икосаэдр", "$F{=}20,\\\\ V{=}12,\\\\ E{=}30$"],
|
||||
["Эйлер", "$V-E+F=2$"],
|
||||
["Куб$\\\\leftrightarrow$Окт.", "двойственные"],
|
||||
["Дод.$\\\\leftrightarrow$Икос.", "двойственные"]
|
||||
["Куб$\\leftrightarrow$Окт.", "двойственные"],
|
||||
["Дод.$\\leftrightarrow$Икос.", "двойственные"]
|
||||
]},
|
||||
final3:{title:"Финал раздела 3", rows:[["§ 5–§ 7","теория раздела 3"],["Награда","+50 XP"]]}
|
||||
};
|
||||
|
||||
const TIPS=[
|
||||
{sec:'p5',html:"Сфера: $|OM|=R$. Уравнение $(x-a)^2+(y-b)^2+(z-c)^2=R^2$. Сечение плоскостью — окружность $r=\\\\sqrt{R^2-d^2}$."},
|
||||
{sec:'p6',html:"Шар: $S=4\\\\pi R^2$, $V=\\\\tfrac{4}{3}\\\\pi R^3$. Сегмент: $V=\\\\tfrac{\\\\pi h^2(3R-h)}{3}$, $S=2\\\\pi R h$. Куб впис. шар: $r=a/2$; куб опис. шар: $R=\\\\tfrac{a\\\\sqrt 3}{2}$."},
|
||||
{sec:'p7',html:"Платоновых тел ровно $5$: тетраэдр, куб, октаэдр, додекаэдр, икосаэдр. Формула Эйлера: $V-E+F=2$. Двойственные пары: куб$\\\\leftrightarrow$октаэдр, додекаэдр$\\\\leftrightarrow$икосаэдр; тетраэдр — сам себе двойственный."},
|
||||
{sec:'p5',html:"Сфера: $|OM|=R$. Уравнение $(x-a)^2+(y-b)^2+(z-c)^2=R^2$. Сечение плоскостью — окружность $r=\\sqrt{R^2-d^2}$."},
|
||||
{sec:'p6',html:"Шар: $S=4\\pi R^2$, $V=\\tfrac{4}{3}\\pi R^3$. Сегмент: $V=\\tfrac{\\pi h^2(3R-h)}{3}$, $S=2\\pi R h$. Куб впис. шар: $r=a/2$; куб опис. шар: $R=\\tfrac{a\\sqrt 3}{2}$."},
|
||||
{sec:'p7',html:"Платоновых тел ровно $5$: тетраэдр, куб, октаэдр, додекаэдр, икосаэдр. Формула Эйлера: $V-E+F=2$. Двойственные пары: куб$\\leftrightarrow$октаэдр, додекаэдр$\\leftrightarrow$икосаэдр; тетраэдр — сам себе двойственный."},
|
||||
{sec:'final3',html:"Финал раздела 3 — интегрированные задачи по разделу."}
|
||||
];
|
||||
|
||||
|
||||
@@ -419,7 +419,7 @@ function goTo(id){
|
||||
const SIDEBARS = {
|
||||
p8:{title:"Шпаргалка § 8", rows:[["Сумма углов $\\triangle$","$180°$"],["Пифагор","$a^2+b^2=c^2$"],["Синусов","$\\dfrac{a}{\\sin A}=2R$"],["Косинусов","$c^2=a^2+b^2-2ab\\cos C$"],["Длина окр.","$C=2\\pi R$"],["$S$ круга","$\\pi R^2$"]]},
|
||||
p9:{title:"Шпаргалка § 9", rows:[["$S_\\triangle$","$\\frac{1}{2}ab\\sin C$"],["Герон","$\\sqrt{p(p-a)(p-b)(p-c)}$"],["$S$ трап.","$\\frac{a+b}{2}h$"],["$V$ призмы","$S_{осн}h$"],["$V$ пир.","$\\frac{1}{3}S_{осн}h$"],["$V$ шара","$\\frac{4}{3}\\pi R^3$"]]},
|
||||
p10:{title:"Шпаргалка § 10", rows:[["Тема", "Координаты и векторы"],["Формула","3D: $\\\\vec{a}=(x;y;z)$"]]},
|
||||
p10:{title:"Шпаргалка § 10", rows:[["Тема", "Координаты и векторы"],["Формула","3D: $\\vec{a}=(x;y;z)$"]]},
|
||||
p11:{title:"Шпаргалка § 11", rows:[["Тема", "Геометрические построения"],["Формула","циркуль и линейка"]]},
|
||||
final4:{title:"Финал раздела 4", rows:[["§ 8–§ 11","теория раздела 4"],["Награда","+50 XP"]]}
|
||||
};
|
||||
@@ -427,7 +427,7 @@ const SIDEBARS = {
|
||||
const TIPS=[
|
||||
{sec:'p8',html:"§ 8: обзор планиметрии. Теоремы Пифагора, синусов, косинусов; виды треугольников и четырёхугольников; окружность."},
|
||||
{sec:'p9',html:"§ 9: площади плоских фигур и объёмы тел. Формулы Герона, $S=\\frac{1}{2}ab\\sin C$, $V=\\frac{1}{3}S_{осн}h$, шар."},
|
||||
{sec:'p10',html:"§ 10 «Координаты и векторы» — содержание в разработке. 3D: $\\\\\\\\vec{a}=(x;y;z)$"},
|
||||
{sec:'p10',html:"§ 10 «Координаты и векторы» — содержание в разработке. 3D: $\\vec{a}=(x;y;z)$"},
|
||||
{sec:'p11',html:"§ 11 «Геометрические построения» — содержание в разработке. циркуль и линейка"},
|
||||
{sec:'final4',html:"Финал раздела 4 — интегрированные задачи по разделу."}
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user