[FIX] рефакторинг: C1-C4 критичные + W1-W10 предупреждения
C1: LaTeX escaping спецсимволов (& % $ # _ { } ~ ^ \)
C2: text.capitalize() → first char uppercase only
C3: run_xelatex проверяет returncode
C4: парсинг лога при ошибке второго прохода
W1: Удалены мёртвые счётчики section/subsection/subsubsection
W2: text.upper() вычисляется один раз
W3: Единая сигнатура хендлеров (r, tok) для всех
W4: Джэгged строки таблицы паддятся до max колонок
W5: Пустой lang в code fence → без [language=]
W6: hr() вынесен из code.py в hr.py
W7: Валидация обязательных полей front matter
W8: Имя вуза конфигурируется через front matter
W9: -> None аннотация main()
W10: \n в конце END_DOCUMENT
+ Dockerfile: добавлен texlive-fonts-recommended
This commit is contained in:
@@ -93,4 +93,4 @@ PREAMBLE = r"""\documentclass[a4paper, 14pt]{extarticle}
|
||||
|
||||
\begin{document}"""
|
||||
|
||||
END_DOCUMENT = r"\end{document}"
|
||||
END_DOCUMENT = r"\end{document}" + "\n"
|
||||
|
||||
+22
-15
@@ -1,31 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from md2gost.handlers.inline import escape_latex
|
||||
|
||||
|
||||
def render_titlepage(fm: dict[str, str]) -> str:
|
||||
faculty = fm.get("факультет", "")
|
||||
department = fm.get("кафедра", "")
|
||||
report_type = fm.get("тип", "")
|
||||
title = fm.get("название", "")
|
||||
student = fm.get("студент", "")
|
||||
advisor = fm.get("преподаватель", "")
|
||||
group = fm.get("группа", "")
|
||||
year = fm.get("год", "2026")
|
||||
required = {"название": "заголовок работы", "тип": "тип работы"}
|
||||
for key, desc in required.items():
|
||||
if key not in fm:
|
||||
raise ValueError(f"front matter: отсутствует поле '{key}' ({desc})")
|
||||
|
||||
faculty = escape_latex(fm.get("факультет", ""))
|
||||
department = escape_latex(fm.get("кафедра", ""))
|
||||
report_type = escape_latex(fm.get("тип", ""))
|
||||
title = escape_latex(fm.get("название", ""))
|
||||
student = escape_latex(fm.get("студент", ""))
|
||||
advisor = escape_latex(fm.get("преподаватель", ""))
|
||||
group = escape_latex(fm.get("группа", ""))
|
||||
year = escape_latex(fm.get("год", "2026"))
|
||||
|
||||
ministry_lines = (
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\hspace*{-6pt}\\centerline{Министерство науки и высшего образования Российской Федерации}\n"
|
||||
f"\\hspace*{{-6pt}}\\centerline{{{fm.get('министерство', 'Министерство науки и высшего образования Российской Федерации')}}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{Федеральное государственное бюджетное образовательное учреждение }\n"
|
||||
f"\\centerline{{{fm.get('вуз_тип', 'Федеральное государственное бюджетное образовательное учреждение ')}}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{высшего образования}\n"
|
||||
f"\\centerline{{{fm.get('вуз_тип2', 'высшего образования')}}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{<<Московский государственный технический университет}\n"
|
||||
f"\\centerline{{<<{fm.get('вуз', 'Московский государственный технический университет')}}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{имени Н.Э. Баумана>>}\n"
|
||||
f"\\centerline{{имени Н.Э. Баумана>>}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{(национальный исследовательский университет)}\n"
|
||||
f"\\centerline{{({fm.get('вуз_статус', 'национальный исследовательский университет')}}}\n"
|
||||
"\\vspace*{-0.7ex}\n"
|
||||
"\\centerline{(МГТУ им. Н.Э. Баумана)}"
|
||||
f"\\centerline{{({fm.get('вуз_аббревиатура', 'МГТУ им. Н.Э. Баумана')}}}"
|
||||
)
|
||||
|
||||
titlepage = (
|
||||
|
||||
Reference in New Issue
Block a user