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)