This commit is contained in:
Arseny
2026-07-15 10:45:23 +03:00
commit 9e1d5c3c7e
24 changed files with 992 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
import argparse
import subprocess
import sys
from pathlib import Path
from md2gost.parser import Parser
from md2gost.render import Renderer
def main():
cli = argparse.ArgumentParser(
prog="md2gost",
description="Markdown → LaTeX конвертер по ГОСТ Р 7.0.5-2008",
)
cli.add_argument("input", type=Path, help="путь к .md файлу")
cli.add_argument(
"-o", "--output", type=Path, default=Path("."),
help="выходная директория (по умолчанию текущая)",
)
cli.add_argument(
"--no-pdf", action="store_true",
help="только .tex, без компиляции в PDF",
)
args = cli.parse_args()
if not args.input.exists():
print(f"ошибка: {args.input} не найден", file=sys.stderr)
sys.exit(1)
args.output.mkdir(parents=True, exist_ok=True)
md_text = args.input.read_text(encoding="utf-8")
parser = Parser(md_text)
renderer = Renderer(parser.tokens, parser.front_matter)
latex = renderer.render()
tex_path = args.output / args.input.with_suffix(".tex").name
tex_path.write_text(latex, encoding="utf-8")
print(f"{tex_path}")
if not args.no_pdf:
pdf_path = args.output / args.input.with_suffix(".pdf").name
result = subprocess.run(
["xelatex", "-interaction=nonstopmode", "-output-directory", str(args.output), str(tex_path)],
capture_output=True, text=True,
)
if not pdf_path.exists():
print(result.stdout[-2000:], file=sys.stderr)
sys.exit(1)
print(f"{pdf_path}")
if result.returncode != 0:
print(" (предупреждения xelatex, PDF собран)", file=sys.stderr)
if __name__ == "__main__":
main()