From 974d49b0567f76216270d19647826fa008933b22 Mon Sep 17 00:00:00 2001 From: Arseny <20096ninja@gmail.com> Date: Tue, 25 Aug 2026 14:27:37 +0300 Subject: [PATCH] =?UTF-8?q?[FIX]=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE?= =?UTF-8?q?=D0=BA=20TOC=20=D0=B8=20=D0=BC=D0=BE=D0=BD=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D0=BD=D0=BE=D0=BA=20=D0=B2=20Docker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - md2gost.sh: монтировать директорию входного файла (/input:ro) вместо одного файла — картинки по относительным путям (img/) теперь видны внутри контейнера; основное исправление падений make run - render.py: вставлять TOC до следующего блока, а не после — порядок стал АННОТАЦИЯ -> СОДЕРЖАНИЕ -> ПЕРЕЧЕНЬ -> ВВЕДЕНИЕ (ранее заголовок ПЕРЕЧЕНЬ без тела оказывался перед СОДЕРЖАНИЕМ, а его тело — после) - heading.py: не устанавливать current_heading для СОДЕРЖАНИЕ, чтобы не сбивать спецрежим перечня сокращений - .gitignore: игнорировать сгенерированные report.tex/pdf и img/ --- .gitignore | 3 +++ md2gost.sh | 5 +++-- md2gost/handlers/heading.py | 3 ++- md2gost/render.py | 10 +++++++--- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index cce745e..887c0c0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,8 @@ build/ # Report report.md +report.tex +report.pdf output/ build/ +img/ diff --git a/md2gost.sh b/md2gost.sh index 04e6c70..0b7e1bc 100755 --- a/md2gost.sh +++ b/md2gost.sh @@ -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 diff --git a/md2gost/handlers/heading.py b/md2gost/handlers/heading.py index b932506..5563cf1 100644 --- a/md2gost/handlers/heading.py +++ b/md2gost/handlers/heading.py @@ -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: diff --git a/md2gost/render.py b/md2gost/render.py index f7d387b..81c638e 100644 --- a/md2gost/render.py +++ b/md2gost/render.py @@ -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)