[FIX] порядок TOC и монтирование картинок в Docker

- md2gost.sh: монтировать директорию входного файла (/input:ro) вместо
  одного файла — картинки по относительным путям (img/) теперь видны
  внутри контейнера; основное исправление падений make run
- render.py: вставлять TOC до следующего блока, а не после — порядок
  стал АННОТАЦИЯ -> СОДЕРЖАНИЕ -> ПЕРЕЧЕНЬ -> ВВЕДЕНИЕ (ранее заголовок
  ПЕРЕЧЕНЬ без тела оказывался перед СОДЕРЖАНИЕМ, а его тело — после)
- heading.py: не устанавливать current_heading для СОДЕРЖАНИЕ, чтобы
  не сбивать спецрежим перечня сокращений
- .gitignore: игнорировать сгенерированные report.tex/pdf и img/
This commit is contained in:
Arseny
2026-08-25 14:27:37 +03:00
parent 8a921e2337
commit 974d49b056
4 changed files with 15 additions and 6 deletions
+3
View File
@@ -16,5 +16,8 @@ build/
# Report
report.md
report.tex
report.pdf
output/
build/
img/
+3 -2
View File
@@ -50,6 +50,7 @@ OUTPUT_ABS="$(realpath -m "$OUTPUT_DIR")"
mkdir -p "$OUTPUT_ABS"
INPUT_BASE="$(basename "$INPUT_FILE")"
INPUT_DIR="$(dirname "$INPUT_ABS")"
# Собираем образ если нужно
if ! docker image inspect "$IMAGE" &>/dev/null; then
@@ -60,11 +61,11 @@ fi
echo "-> конвертация $INPUT_FILE -> $OUTPUT_DIR/"
# Запуск контейнера:
# - вход: только .md файл (read-only)
# - вход: директория с .md и картинками (read-only, нужен для img/)
# - выход: директория для .tex и .pdf
# - user: текущий пользователь (не root)
docker run --rm \
-v "$INPUT_ABS:/input/$INPUT_BASE:ro" \
-v "$INPUT_DIR:/input:ro" \
-v "$OUTPUT_ABS:/output" \
--user "$(id -u):$(id -g)" \
"$IMAGE" "/input/$INPUT_BASE" -o /output
+2 -1
View File
@@ -30,12 +30,13 @@ def heading(r, tok: Token) -> str:
r.pos += 2
upper = text.upper()
r.current_heading = upper
if upper == TOC_HEADING:
r.pending_toc = True
return ""
r.current_heading = upper
if upper in UNNUMBERED:
prefix = ""
if upper in NEWPAGE_BEFORE:
+7 -3
View File
@@ -51,11 +51,15 @@ class Renderer:
]
while self.pos < len(self.tokens):
rendered = self._dispatch()
parts.append(rendered)
if self.pending_toc and rendered:
if self.pending_toc:
parts.append("\\newpage\n\\tableofcontents\n\\newpage")
self.pending_toc = False
rendered = self._dispatch()
parts.append(rendered)
# TOC в конце файла (если # СОДЕРЖАНИЕ был последним блоком)
if self.pending_toc:
parts.append("\\newpage\n\\tableofcontents\n\\newpage")
parts.append(END_DOCUMENT)
return "\n\n".join(p for p in parts if p)