Skip to main content

Convert Word manuscripts to journal-ready LaTeX projects and PDFs

Project description

LaTeXtify

PyPI CI License Python

Convert scientific manuscripts from Word (.docx) into journal-ready LaTeX projects and PDFs. Pick a journal, point at a manuscript, get a compilable LaTeX project with extracted citations, journal-appropriate formatting, and a compiled PDF — no TeX installation required (the Tectonic engine is downloaded and managed automatically).

latextify convert paper.docx --journal revtex4-2 --pdf

Try it online: https://latextify-demo.onrender.com — a free-hosted demo of the GUI (shared low-power hardware: conversions are slow, uploads capped at 25 MB, rate-limited, and the instance takes ~1 min to wake after idle). Do not upload confidential or unpublished manuscripts to the demo; install locally for private, full-speed conversions.

What it does

  • Journal formatting — emits a project using the journal's real document class with correct author/affiliation macros, compiled with Tectonic. Class files missing from Tectonic's bundle are vendored (where licenses permit) and staged automatically.
  • Citations with links — extracts references from Zotero/Mendeley field codes, EndNote, Word's built-in citation manager, or hand-typed text (reconstructed via Crossref with confidence scoring), emits references.bib with DOIs, and links in-text citations to real \cite{} commands. Citation style (numeric ↔ author-year) switches per journal support.
  • Reference checking + review (opt-in, needs internet)--check-references validates every reference against Crossref: it resolves each DOI and compares the stored title, authors, year, journal, volume, and pages against the canonical record, flags dead DOIs, and suggests DOIs for references that lack one. Findings land in report.md; a dropped connection marks references unchecked rather than failing the run. Add --review (or the GUI's review panel) to step through each flagged reference one by one — approve Crossref's fix, keep yours, or edit the whole entry — then the accepted corrections are written into references.bib and the PDF is recompiled. On by default in the GUI.
  • Figures — extracts embedded images, or swap in your own vector/high-res files by dropping figures/fig1.pdf beside the docx (or an explicit figures.yaml). SVG converts to PDF automatically.
  • Equations — Word equation editor (OMML) math converts to LaTeX; latextify equations produces a side-by-side audit for equation-heavy papers.
  • Tables — clean Word tables become booktabs; pathological merged-cell tables degrade to a compilable, clearly-marked simplification instead of silent corruption.
  • Honest by design — every run writes report.md: preflight findings, per-reference citation confidence with "verify me" flags, figure provenance, compile diagnostics. The quality bar is compiles cleanly + punch list, not silent camera-ready claims.
  • Re-run safemain.tex is written once and never overwritten; your manual LaTeX polish survives re-conversion (regenerated content lives in generated/).

Supported journals

Fourteen journal templates covering the major physics/chemistry publishers. The -j/--journal value is the short id in the first column; the GUI shows the full publisher name.

Template Journal Citation modes TeX class source
revtex4-2 APS — Physical Review B (generic REVTeX) numeric Tectonic bundle
aps-prl APS — Physical Review Letters numeric Tectonic bundle
aps-prx APS — Physical Review X numeric Tectonic bundle
aps-prapplied APS — Physical Review Applied numeric Tectonic bundle
aps-rmp APS — Reviews of Modern Physics numeric Tectonic bundle
aip-apl AIP — Applied Physics Letters numeric Tectonic bundle
aip-jap AIP — Journal of Applied Physics numeric Tectonic bundle
aip-advances AIP — AIP Advances numeric Tectonic bundle
elsarticle Elsevier numeric, author-year vendored (v3.5, LPPL)
ieeetran IEEE numeric Tectonic bundle
sn-jnl Springer Nature numeric, author-year vendored (LPPL)
achemso ACS numeric Tectonic bundle
iopart IOP Publishing numeric vendored (LPPL)
wiley Wiley (New Journal Design) numeric, author-year user-supplied¹

The APS and AIP entries are REVTeX variants — the same revtex4-2 class with the publisher's society options and bibliography style, so they compile with no extra class files.

¹ Wiley's class file is proprietary and cannot be redistributed; the template works once you place WileyNJD-v2.cls in the output directory (the error message tells you exactly what is missing).

Adding a journal is data, not code: a folder with a manifest and two Jinja templates. See CONTRIBUTING.md.

Install

Install from PyPI with pip (Python 3.10+):

pip install latextify

That is the whole install: no TeX setup (the Tectonic engine is fetched and managed automatically the first time you use --pdf), and pandoc ships bundled in the wheel. The latextify command is then on your PATH. Also installable with uv pip install latextify or pipx install latextify.

For the drag-and-drop web GUI, add the gui extra:

pip install "latextify[gui]"

From source (development)

git clone https://github.com/pquarterman17/LaTeXtify
cd LaTeXtify
uv sync

One-click launcher

To start the web GUI without touching a command line, double-click startup.bat (Windows) or run ./startup.sh (macOS/Linux). It installs dependencies on first run, opens the GUI in your browser, and — if anything goes wrong — writes an easy-to-find latextify-startup.log next to the script and prints it for you to copy.

Usage

Installed from source with uv sync? Prefix these with uv run (e.g. uv run latextify convert ...), or activate the project venv first.

# Convert + compile to PDF (report.md written alongside)
latextify convert paper.docx --journal revtex4-2 --pdf

# Choose citation style where the journal supports both
latextify convert paper.docx --journal elsarticle --citation-style authoryear

# Supplementary material: S-numbered second document sharing the bibliography
latextify convert paper.docx --journal revtex4-2 --supplement si.docx --pdf

# ...and staple the main text + supplement into one combined.pdf
latextify convert paper.docx --journal revtex4-2 --supplement si.docx --pdf --combine-supplement

# ...or render the supplement as a simplified one-column article (common for SI,
# where formatting rules are looser), keeping the shared bibliography + S-numbers
latextify convert paper.docx --journal revtex4-2 --supplement si.docx --pdf --supplement-onecolumn

# Validate references online against Crossref (DOIs, titles, authors, years...)
latextify convert paper.docx --journal revtex4-2 --check-references

# ...and interactively approve/deny/edit each correction, then rewrite + recompile
latextify convert paper.docx --journal revtex4-2 --pdf --review

# A folder of manuscripts at once (continue-on-error + summary)
latextify batch drafts/ --journal revtex4-2 --pdf

# Equation conversion audit for equation-heavy papers
latextify equations paper.docx --pdf

# Local web GUI (drag-and-drop; requires the gui extra: pip install "latextify[gui]")
latextify gui

# List registered journals and their citation modes
latextify journals

Web GUI

latextify gui starts a local, browser-based front end (bound to 127.0.0.1 only — your uploads never leave your machine) and opens a tab. Drop your whole submission in at once — main .docx, supplement .docx, figure files, and a .bib reference library together — then set each file's role, pick a journal from the full publisher list, choose options (compile PDF, combine supplement, one-column SI, equation audit, project .zip), and click Preview. The compiled PDFs render inline so you can confirm the conversion worked. A preview is held only in temporary local storage (a private working directory the app owns) — it is pruned automatically about an hour after its last use and deleted when the app shuts down, so nothing lingers unless you keep it. Once it looks good, the Export panel lets you pick a destination folder (a native "Browse…" dialog) and copy any subset of the outputs — the LaTeX project, individual PDFs, or the .zip — to the folder you choose to keep.

Output layout per conversion:

output/<journal>/
├── main.tex          # yours — written once, never overwritten on re-runs
├── generated/        # regenerated every run: preamble, metadata, body, bibliography
├── figures/          # resolved figure files (embedded or your overrides)
├── references.bib    # extracted bibliography with DOIs
└── report.md         # what happened, what to verify

On first conversion a paper.yaml sidecar is written beside your docx with the guessed title/authors/affiliations — correct it once; it is the source of truth afterwards.

Examples

Three runnable, self-contained examples live in examples/ — each generates its own Word document(s) (no committed binaries) and converts them to a PDF with a single python run.py:

  • 01 – all-embedded: one .docx with embedded figures and a typed reference list (Crossref reconstruction).
  • 02 – word-plus-figures: external figure files via the figures/ folder convention and a figures.yaml manifest.
  • 03 – multipart-refmanager: main + --supplement documents with Zotero/Mendeley field-code citations and a shared, de-duplicated bibliography.

Input expectations

LaTeXtify targets manuscripts that use Word styles: styled headings, equation-editor math, inline figures with captions. Unsupported constructs (text boxes, SmartArt, tracked changes) are reported by preflight rather than silently mangled.

Development

uv run pytest                                     # full suite (~875 tests, real docx→PDF compiles)
uv run pytest -m "not tectonic and not network"   # fast subset
uv run ruff check .

See CONTRIBUTING.md and the archived build plan under plans/archive/ for architecture documentation.

License

Apache-2.0 (see LICENSE). Vendored LaTeX class/style files under latextify/templates/journals/*/vendor/ remain under their own licenses (LPPL) — see NOTICE and the per-journal VENDOR_LICENSE.txt files.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

latextify-0.2.0.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

latextify-0.2.0-py3-none-any.whl (423.7 kB view details)

Uploaded Python 3

File details

Details for the file latextify-0.2.0.tar.gz.

File metadata

  • Download URL: latextify-0.2.0.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for latextify-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a0dae4fa03f3fb1efd7672dd36ab42f0a12edddf12d34ece4439235a55321a4f
MD5 7667d37ca749c3b037d526c013fad121
BLAKE2b-256 919af1838c60163e94423e8a6ed192ddd7cf0d11f4db222caaabdf04a129006d

See more details on using hashes here.

Provenance

The following attestation bundles were made for latextify-0.2.0.tar.gz:

Publisher: publish.yml on pquarterman17/LaTeXtify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file latextify-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: latextify-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 423.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for latextify-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df963136790a9c8b94add7e2b030bd89f3b08c3019dd597e5dc05950cee69869
MD5 37969533e2af3f0e6ab6e609933c7c90
BLAKE2b-256 28fa19af70bada8d7710fcc0345bc13ab57558f5ff25291b5ffbdc077a68437d

See more details on using hashes here.

Provenance

The following attestation bundles were made for latextify-0.2.0-py3-none-any.whl:

Publisher: publish.yml on pquarterman17/LaTeXtify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page