[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:
@@ -16,5 +16,8 @@ build/
|
|||||||
|
|
||||||
# Report
|
# Report
|
||||||
report.md
|
report.md
|
||||||
|
report.tex
|
||||||
|
report.pdf
|
||||||
output/
|
output/
|
||||||
build/
|
build/
|
||||||
|
img/
|
||||||
|
|||||||
+3
-2
@@ -50,6 +50,7 @@ OUTPUT_ABS="$(realpath -m "$OUTPUT_DIR")"
|
|||||||
mkdir -p "$OUTPUT_ABS"
|
mkdir -p "$OUTPUT_ABS"
|
||||||
|
|
||||||
INPUT_BASE="$(basename "$INPUT_FILE")"
|
INPUT_BASE="$(basename "$INPUT_FILE")"
|
||||||
|
INPUT_DIR="$(dirname "$INPUT_ABS")"
|
||||||
|
|
||||||
# Собираем образ если нужно
|
# Собираем образ если нужно
|
||||||
if ! docker image inspect "$IMAGE" &>/dev/null; then
|
if ! docker image inspect "$IMAGE" &>/dev/null; then
|
||||||
@@ -60,11 +61,11 @@ fi
|
|||||||
echo "-> конвертация $INPUT_FILE -> $OUTPUT_DIR/"
|
echo "-> конвертация $INPUT_FILE -> $OUTPUT_DIR/"
|
||||||
|
|
||||||
# Запуск контейнера:
|
# Запуск контейнера:
|
||||||
# - вход: только .md файл (read-only)
|
# - вход: директория с .md и картинками (read-only, нужен для img/)
|
||||||
# - выход: директория для .tex и .pdf
|
# - выход: директория для .tex и .pdf
|
||||||
# - user: текущий пользователь (не root)
|
# - user: текущий пользователь (не root)
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v "$INPUT_ABS:/input/$INPUT_BASE:ro" \
|
-v "$INPUT_DIR:/input:ro" \
|
||||||
-v "$OUTPUT_ABS:/output" \
|
-v "$OUTPUT_ABS:/output" \
|
||||||
--user "$(id -u):$(id -g)" \
|
--user "$(id -u):$(id -g)" \
|
||||||
"$IMAGE" "/input/$INPUT_BASE" -o /output
|
"$IMAGE" "/input/$INPUT_BASE" -o /output
|
||||||
|
|||||||
@@ -30,12 +30,13 @@ def heading(r, tok: Token) -> str:
|
|||||||
r.pos += 2
|
r.pos += 2
|
||||||
|
|
||||||
upper = text.upper()
|
upper = text.upper()
|
||||||
r.current_heading = upper
|
|
||||||
|
|
||||||
if upper == TOC_HEADING:
|
if upper == TOC_HEADING:
|
||||||
r.pending_toc = True
|
r.pending_toc = True
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
r.current_heading = upper
|
||||||
|
|
||||||
if upper in UNNUMBERED:
|
if upper in UNNUMBERED:
|
||||||
prefix = ""
|
prefix = ""
|
||||||
if upper in NEWPAGE_BEFORE:
|
if upper in NEWPAGE_BEFORE:
|
||||||
|
|||||||
+7
-3
@@ -51,11 +51,15 @@ class Renderer:
|
|||||||
]
|
]
|
||||||
|
|
||||||
while self.pos < len(self.tokens):
|
while self.pos < len(self.tokens):
|
||||||
rendered = self._dispatch()
|
if self.pending_toc:
|
||||||
parts.append(rendered)
|
|
||||||
if self.pending_toc and rendered:
|
|
||||||
parts.append("\\newpage\n\\tableofcontents\n\\newpage")
|
parts.append("\\newpage\n\\tableofcontents\n\\newpage")
|
||||||
self.pending_toc = False
|
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)
|
parts.append(END_DOCUMENT)
|
||||||
return "\n\n".join(p for p in parts if p)
|
return "\n\n".join(p for p in parts if p)
|
||||||
|
|||||||
Reference in New Issue
Block a user