% ===== ElegantBook preamble — адаптация под русский перевод ===== % Отличия от оригинала (book/ апстрима): % • основной шрифт — кириллический (PT Serif / DejaVu Serif / дефолт); % • китайский рендерится через xeCJK (для остаточных иероглифов: термины гл.10, % примеры в блоках кода) — грузится ТОЛЬКО если найден CJK-шрифт, иначе пропуск; % • заголовок questionbox переведён; % • сборка идёт с classoption=lang=en (структурные подписи латиницей), см. build_pdf.sh. % ── Основной (кириллический) шрифт ──────────────────────────────── % Cambria — хорошая книжная засечка с полной кириллицей/греческим, есть на Windows. \IfFontExistsTF{PT Serif}{\setmainfont{PT Serif}}{% \IfFontExistsTF{DejaVu Serif}{\setmainfont{DejaVu Serif}}{% \IfFontExistsTF{Cambria}{\setmainfont{Cambria}}{% \IfFontExistsTF{Times New Roman}{\setmainfont{Times New Roman}}{}}}} % ── Санс-шрифт (заголовки глав/секций, титул выносок) — обязательно с кириллицей, % иначе ElegantBook берёт Latin Modern Sans без кириллицы (тысячи «квадратов»). ─ \IfFontExistsTF{DejaVu Sans}{\setsansfont{DejaVu Sans}}{% \IfFontExistsTF{Segoe UI}{\setsansfont{Segoe UI}}{% \IfFontExistsTF{Calibri}{\setsansfont{Calibri}}{% \IfFontExistsTF{Arial}{\setsansfont{Arial}}{}}}} % ── Китайский фолбэк (xeCJK) — только если есть подходящий шрифт ─── \IfFontExistsTF{Noto Sans CJK SC}{\newcommand{\cjkmain}{Noto Sans CJK SC}}{% \IfFontExistsTF{Microsoft YaHei}{\newcommand{\cjkmain}{Microsoft YaHei}}{% \IfFontExistsTF{SimSun}{\newcommand{\cjkmain}{SimSun}}{% \IfFontExistsTF{Songti SC}{\newcommand{\cjkmain}{Songti SC}}{}}}} \ifdefined\cjkmain \usepackage{xeCJK} \setCJKmainfont{\cjkmain} \setCJKsansfont{\cjkmain} \setCJKmonofont{\cjkmain} \fi % ── Юникод-глифы, которых нет в основном шрифте ─────────────────── \usepackage{newunicodechar} % Segoe UI Symbol есть на всех Windows и покрывает ★ ♦ ✓ ✗ стрелки и т.п. \IfFontExistsTF{DejaVu Sans}{\newfontfamily\fallbackfont{DejaVu Sans}}{% \IfFontExistsTF{Segoe UI Symbol}{\newfontfamily\fallbackfont{Segoe UI Symbol}}{% \IfFontExistsTF{Arial Unicode MS}{\newfontfamily\fallbackfont{Arial Unicode MS}}{% \newfontfamily\fallbackfont{Latin Modern Roman}}}} \newunicodechar{★}{{\fallbackfont ★}} % сложность экспериментов «Эксперимент N-M ★★» \newunicodechar{☆}{{\fallbackfont ☆}} \newunicodechar{✓}{{\fallbackfont ✓}} \newunicodechar{✗}{{\fallbackfont ✗}} \newunicodechar{≈}{{\fallbackfont ≈}} \newunicodechar{→}{{\fallbackfont →}} \newunicodechar{←}{{\fallbackfont ←}} \newunicodechar{↓}{{\fallbackfont ↓}} \newunicodechar{√}{{\fallbackfont √}} \newunicodechar{♦}{{\fallbackfont ♦}}\newunicodechar{♠}{{\fallbackfont ♠}} \newunicodechar{♥}{{\fallbackfont ♥}}\newunicodechar{♣}{{\fallbackfont ♣}} \newunicodechar{⟦}{{\fallbackfont ⟦}} \newunicodechar{⟧}{{\fallbackfont ⟧}} % Греческие буквы, встречающиеся в тексте (RL, τ-bench и т.п.) \newunicodechar{α}{{\fallbackfont α}}\newunicodechar{β}{{\fallbackfont β}} \newunicodechar{γ}{{\fallbackfont γ}}\newunicodechar{δ}{{\fallbackfont δ}} \newunicodechar{ε}{{\fallbackfont ε}}\newunicodechar{θ}{{\fallbackfont θ}} \newunicodechar{λ}{{\fallbackfont λ}}\newunicodechar{μ}{{\fallbackfont μ}} \newunicodechar{π}{{\fallbackfont π}}\newunicodechar{σ}{{\fallbackfont σ}} \newunicodechar{τ}{{\fallbackfont τ}}\newunicodechar{φ}{{\fallbackfont φ}}\newunicodechar{ω}{{\fallbackfont ω}} % Заглавные греческие буквы (Σ, Φ, ... в формулах) \newunicodechar{Γ}{{\fallbackfont Γ}}\newunicodechar{Δ}{{\fallbackfont Δ}} \newunicodechar{Θ}{{\fallbackfont Θ}}\newunicodechar{Λ}{{\fallbackfont Λ}} \newunicodechar{Ξ}{{\fallbackfont Ξ}}\newunicodechar{Π}{{\fallbackfont Π}} \newunicodechar{Σ}{{\fallbackfont Σ}}\newunicodechar{Φ}{{\fallbackfont Φ}} \newunicodechar{Ψ}{{\fallbackfont Ψ}}\newunicodechar{Ω}{{\fallbackfont Ω}} % Нижние индексы (₀…₉ в обозначениях вроде x₀) \newunicodechar{₀}{{\fallbackfont ₀}}\newunicodechar{₁}{{\fallbackfont ₁}} \newunicodechar{₂}{{\fallbackfont ₂}}\newunicodechar{₃}{{\fallbackfont ₃}} \newunicodechar{₄}{{\fallbackfont ₄}}\newunicodechar{₅}{{\fallbackfont ₅}} \newunicodechar{₆}{{\fallbackfont ₆}}\newunicodechar{₇}{{\fallbackfont ₇}} \newunicodechar{₈}{{\fallbackfont ₈}}\newunicodechar{₉}{{\fallbackfont ₉}} % ── Моноширинный шрифт для кода ─────────────────────────────────── \IfFontExistsTF{Menlo}{\setmonofont[Scale=0.86]{Menlo}}{\IfFontExistsTF{DejaVu Sans Mono}{\setmonofont[Scale=0.86]{DejaVu Sans Mono}}{\IfFontExistsTF{Consolas}{\setmonofont[Scale=0.86]{Consolas}}{}}} % ── tcolorbox + TikZ (для обложки) ──────────────────────────────── \tcbuselibrary{skins,breakable} \usepackage{tikz} \usetikzlibrary{fadings} \tikzfading[name=titlefade, top color=transparent!100, bottom color=transparent!0] % Акцентный цвет — глубокий navy (как в оригинале) \definecolor{structurecolor}{RGB}{30,58,107} \colorlet{accent}{structurecolor} \newcommand{\crossreflink}[2]{\hyperref[#1]{\textcolor{structurecolor}{#2}}} \colorlet{accentbg}{structurecolor!6} \colorlet{accentrule}{structurecolor!35} % ── Перенос длинных строк в блоках кода ─────────────────────────── \usepackage{fvextra} \fvset{breaklines=true,breakanywhere=true,% breaksymbolleft={\footnotesize\textcolor{accentrule}{$\hookrightarrow$}\,}} \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},breaklines,breakanywhere} % ── Блоки кода: рамка в стиле O'Reilly ──────────────────────────── \newtcolorbox{codebox}{% breakable, enhanced, colback=black!3, colframe=accentrule, boxrule=0.5pt, leftrule=2.5pt, left=0.7em, right=0.6em, top=0.4em, bottom=0.4em, arc=0.6mm, before skip=0.7em, after skip=0.7em} \renewenvironment{Shaded}{\begin{codebox}}{\end{codebox}} \renewenvironment{verbatim}% {\VerbatimEnvironment\begin{codebox}\begin{Verbatim}}% {\end{Verbatim}\end{codebox}} % ── Выноски экспериментов и вопросов (experiment_box.lua) ───────── \newtcolorbox{experimentbox}{ breakable, enhanced, colback=accentbg, colframe=accent, boxrule=0.6pt, left=0.8em, right=0.8em, top=0.6em, bottom=0.6em, arc=1mm, before skip=0.9em, after skip=0.9em} \newtcolorbox{questionbox}{ breakable, enhanced, colback=accentbg, colframe=accent, boxrule=0.8pt, left=0.9em, right=0.9em, top=0.9em, bottom=0.7em, arc=1.2mm, before skip=0.9em, after skip=0.9em, title={\sffamily\bfseries Вопрос для размышления}, fonttitle=\normalsize\color{white}, coltitle=white, attach boxed title to top left={xshift=1em, yshift=-\tcboxedtitleheight/2}, boxed title style={colback=accent, colframe=accent, arc=0.8mm, outer arc=0.8mm}} % ── Рисунки: [H], чтобы сидели внутри выносок/цитат ────────────── \usepackage{float} \let\origfigure\figure \let\origendfigure\endfigure \renewenvironment{figure}[1][htbp]{\origfigure[H]}{\origendfigure} \setkeys{Gin}{width=\linewidth,height=0.38\textheight,keepaspectratio} % ── Подписи к рисункам: номер задан вручную в тексте, метку подавляем ── \usepackage{caption} \captionsetup{font={normalsize,sf,bf}, labelformat=empty, skip=4pt, justification=centering} % ── Цитаты: бирюзовая левая полоса (эксперименты рендерятся как quote) ── \renewenvironment{quote}{% \begin{tcolorbox}[blanker, breakable, borderline west={2.5pt}{0pt}{accent}, colback=accent!4, left=1em, right=0.6em, top=0.5em, bottom=0.5em, before skip=0.6em, after skip=0.6em]% }{% \end{tcolorbox}% } \setlength{\parindent}{2em} % ElegantBook empties the `plain` page style used on chapter-opening pages. % Keep those pages numbered, matching the centered footer on regular pages. \fancypagestyle{plain}{% \fancyhf{}% \fancyfoot[C]{\color{structurecolor}\small\thepage}% \renewcommand{\headrulewidth}{0pt}% \renewcommand{\footrulewidth}{0pt}% }