Convert a LaTeX .zip project into an arXiv-ready .zip
Project description
latex2arxiv
A command-line tool that converts a LaTeX .zip project into an arXiv-ready .zip in one command.
latex2arxiv paper.zip --main main.tex --compile
Works with any LaTeX .zip — including projects exported directly from Overleaf.
🚀 Try it in 30 seconds — a self-documenting demo is included:
pip install latex2arxiv latex2arxiv demo_project.zip --compileThis opens a PDF that explains exactly what the converter does and shows the cleaned output.
What it does
| Stage | Action |
|---|---|
| File pruning | Removes unused .tex, .bib, image, and all non-essential files (build artifacts, editor files, cover letters, etc.) |
| Comment stripping | Removes % ... comments from all .tex files |
| Draft cleanup | Removes \todo{}, \hl{}, \note{}, \fixme{}, \begin{comment} blocks, \iffalse...\fi blocks, and draft-only packages |
| BibTeX normalization | Canonical field ordering, deduplication, private field removal |
\pdfoutput=1 |
Injected before \documentclass if missing (required by arXiv) |
| Image resizing | Optional: resize images so longest side ≤ N pixels (helps stay under arXiv's 50MB limit) |
| Compile check | Optional: compiles with pdflatex and opens the PDF for review |
Dependency tracking respects \input, \include, \subfile, \includegraphics, \begin{overpic}, and \bibliography. Commented-out commands are ignored.
Installation
pip install latex2arxiv
Or from source:
git clone https://github.com/YuZh98/latex2arxiv
cd latex2arxiv
pip install .
pdflatex is required only for the --compile flag (install via TeX Live or MacTeX).
Usage
latex2arxiv input.zip [output.zip] [--main MAIN_TEX] [--resize PX] [--compile]
Or without installing:
python3 converter.py input.zip [output.zip] [--main MAIN_TEX] [--resize PX] [--compile]
Options
| Flag | Description |
|---|---|
--main FILENAME |
Specify the main .tex file (e.g. JASA_main.tex). Auto-detected via \documentclass if omitted. |
--resize PX |
Resize images so longest side ≤ PX pixels (e.g. --resize 1600). Requires Pillow. |
--compile |
Run pdflatex on the output and open the resulting PDF. |
Examples
# Basic conversion (auto-detect main file)
latex2arxiv paper.zip
# Specify main file and compile for review
latex2arxiv paper.zip arxiv_ready.zip --main main.tex --compile
# Resize large images to stay under arXiv's 50MB limit
latex2arxiv paper.zip --resize 1600 --compile
Caveats
Dynamically constructed filenames — if your code uses a macro for an image path (e.g. \includegraphics{\figpath/fig1}), the tool cannot resolve it statically and will delete the image. Expand macros before running the converter.
Custom verbatim environments — comments inside standard verbatim, lstlisting, and minted blocks are preserved. Non-standard verbatim-like environments may not be protected.
\subfile vs \input path resolution — image paths in \input/\included files are resolved relative to the project root (how LaTeX works). Paths in \subfile documents are resolved relative to the subfile's own directory. Unusual nested path setups may cause images to be incorrectly pruned; use --compile to verify.
BibTeX normalization requires bibtexparser — install with pip install bibtexparser. If not installed, the .bib file is passed through unchanged.
--compile is a local sanity check — a successful local compile does not guarantee arXiv will compile it. arXiv uses specific TeX Live versions with fixed package sets. Always check the arXiv submission preview after uploading.
Custom style/class files — if your project includes a .cls or .sty file, the tool keeps it and warns you. Verify it is not already provided by TeX Live; if it is, remove it from your submission to avoid conflicts.
Double-spaced / referee mode — the tool warns if it detects referee, doublespace, or \doublespacing in your source. arXiv requires single-spaced submissions.
\today in \date — arXiv occasionally rebuilds PDFs, which will change the displayed date. The tool warns if it detects \today in \date.
Project structure
converter.py # CLI entry point
pipeline/
tex.py # Comment stripping, draft annotation removal
bibtex.py # BibTeX normalization
deps.py # Dependency graph (tex includes, images, bib files)
images.py # Image resizing
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file latex2arxiv-0.1.0.tar.gz.
File metadata
- Download URL: latex2arxiv-0.1.0.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cddd1b0df047cbda36a327a3d067e822157fdd1e4eff97c39b8e2e99d7b2d76
|
|
| MD5 |
54de850bfc3d8d0c4b13ad4f9bb1f768
|
|
| BLAKE2b-256 |
3b8a1914af2bfceca149fcffd3a6b5c81d7a85b1a8fd3cf2783f8979bc3e007f
|
File details
Details for the file latex2arxiv-0.1.0-py3-none-any.whl.
File metadata
- Download URL: latex2arxiv-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d55eecd1b8fc2a2fd284b1274b24f5a72aa61d6c39ad4344aaf508d513865b0c
|
|
| MD5 |
5feb10d55e6f5826b0ba32529a2fbffe
|
|
| BLAKE2b-256 |
5257c21b09b84c52741b8e6383321b5af7236a9410563fc961865334d4d309c3
|