Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
7
`papervibe` is a Python (uv-managed) CLI tool that:
Sign in to like and favorite skills
papervibe is a Python (uv-managed) CLI tool that:
\\pvhighlight{...} wrapperslatexmkSteps 3 and 4 run in parallel, both receiving the paper summary as context.
The design goal is to keep LaTeX diffs minimal and mechanical.
pyproject.toml: uv project config and CLI entry pointsrc/papervibe/
cli.py: Typer CLI and end-to-end pipeline orchestrationarxiv.py: arXiv ID parsing + source/PDF downloadlatex.py: LaTeX helpers (main file detection, references cutoff, abstract span/replace, preamble injection, wrapper stripping)llm.py: AsyncOpenAI wrapper + settings (reads .env) + concurrency semaphore + PDF completionprocess.py: pipeline orchestration (summarize → parallel abstract rewrite + highlight → compile → prepend summary)highlight.py: chunking + snippet-based highlighting (parse_snippets, apply_highlights, chunk_content_with_seps)compile.py: latexmk compilation wrappersummary.py: markdown→LaTeX conversion + summary PDF generation + PDF merging (via pypdf)tests/: pytest suite + LaTeX fixtures (automated, no LLM calls)
fixtures/papers.json: paper IDs for integration testsfixtures/responses/<id>/: pre-computed LLM responses (stub abstracts, summaries, highlight snippets)integration/: integration tests (layout preservation, require latexmk)harness/: manual LLM evaluation with side-by-side PDF comparison
samples/: LaTeX samples (highlight/, abstract/)eval_highlight.py, eval_abstract.py, eval_layout.py: evaluation scriptsout/: evaluation outputs\pvreplaceblock{old}{new} to preserve original layout/spacing)xcolor + \AtBeginDocument{\color{gray}} + \pvhighlight + \pvreplaceblock + abstract black override)\pvhighlight{...} wrappers around important keywords and sentences\AtBeginDocument{\color{gray}})\pvhighlight{...} wrapper)\renewenvironment{abstract})\pvhighlight{...}chunk_content_with_seps() + rejoin_chunks() to avoid corrupting LaTeX tables/environments.\pvreplaceblock{old}{new} boxes the original content to get its exact height, then creates a vbox of that height with new content at top. This guarantees identical vertical footprint.rewrite_abstract() extracts footnotes from original and appends them to the rewritten abstract to preserve page layout..env contains secrets and must never be committed.uv run pytestuv run pytest --ignore=tests/integration/uv run pytest tests/integration/ -vuv run papervibe --helpuv run papervibe arxiv 2107.03374 --dry-runuv run papervibe arxiv 2107.03374 --concurrency 8uv run python harness/eval_highlight.pyuv run python harness/eval_abstract.pyuv run python harness/eval_layout.py [arxiv_ids...]By default, results are written under
out/<id>/:
original/: downloaded/unpacked sourcesmodified/: modified sources used for compilation<id>.pdf: compiled PDF with summary page prepended (if compilation succeeds)summarize_timeout_seconds, default 200s) since PDF processing is slow.