SciTeX Writer

July 13, 2026 · View on GitHub

SciTeX Writer

SciTeX Writer

pypi python docs

tests cov

scitex.ai · docs · uv pip install scitex-writer[all]


LaTeX compilation system for scientific manuscripts with automatic versioning, diff generation, and cross-platform reproducibility.

Part of the SciTeX ecosystem — empowers both human researchers and AI agents.

Problem and Solution

#ProblemSolution
1LaTeX compilation is fragile -- bib, figs, tables, cross-refs, supplement each have their own failure modescitex writer compile -- one command runs bibtex → latex → bibtex → latex twice; handles supplement + revision diffs
2Figures drift from manuscript -- author renumbers a figure; half the references go stale; \ref{} silently prints ??Reference check + float-order audit -- writer_check_references + writer_check_float_order catch dangling \ref{} before submission
3Manuscript claims uncheckable -- a paper asserts "t(58) = 2.34, p = .021"; reviewer has no way to verifyClew-backed claims -- writer_add_claim binds each assertion to a source session + file hash; writer_render_claims exposes the verification DAG

Demo

Light Mode    Dark Mode

Light mode (default) and dark mode (--dark-mode)

Demo Video

Demo video with AI agent

Installation

# LaTeX dependencies (Ubuntu/Debian)
sudo apt-get install texlive-latex-extra latexdiff parallel imagemagick ghostscript

# LaTeX dependencies (macOS)
brew install texlive latexdiff parallel imagemagick ghostscript

# Python package + MCP server
pip install scitex-writer

Quick Start

git clone https://github.com/ywatanabe1989/scitex-writer.git my-paper
cd my-paper && make manuscript   # or: ./compile.sh manuscript

Part of SciTeX

scitex-writer is part of SciTeX. Install via the umbrella with pip install scitex[writer] to use as scitex.writer (Python) or scitex writer ... (CLI).

Four Freedoms for Research

  1. The freedom to run your research anywhere — your machine, your terms.
  2. The freedom to study how every step works — from raw data to final manuscript.
  3. The freedom to redistribute your workflows, not just your papers.
  4. The freedom to modify any module and share improvements with the community.

AGPL-3.0 — because we believe research infrastructure deserves the same freedoms as the software it runs on.

Problem

LaTeX compilation for scientific manuscripts is painful:

  • Environment inconsistency — "It compiles on my machine" is not a solution when collaborating across Linux, macOS, WSL2, and HPC clusters.
  • Manual figure conversion — Converting between PNG, SVG, PDF, Mermaid, and TIFF formats by hand wastes time and introduces errors.
  • No version tracking — Generating tracked-change diffs between revisions requires manual latexdiff invocations and careful file management.
  • Fragmented tooling — Separate workflows for compilation, bibliography management, table formatting, and submission packaging.
  • AI agents cannot help — Without a programmatic interface, AI assistants have no way to compile or manage manuscripts.

Solution

SciTeX Writer solves each of these problems:

  • Container-based reproducible compilation — Consistent builds across all platforms via Docker, Singularity, or native installation with automatic engine selection (Tectonic, latexmk, or 3-pass).
  • Automatic asset conversion — Figures and tables are converted in parallel from source formats (PNG, SVG, comma-separated values (CSV), Mermaid) to LaTeX-ready output.
  • Built-in version tracking with diff generation — Every compilation archives the previous version and generates a latexdiff document automatically.
  • Unified interface — One tool for compilation, bibliography deduplication, figure/table management, and arXiv export packaging.
  • 44 Model Context Protocol (MCP) tools for AI agents — AI assistants can compile, edit, and manage manuscripts programmatically.

Architecture

flowchart TB
    subgraph Surfaces["Surfaces (user-facing)"]
        CLI["CLI<br/><code>_cli/</code>"]
        MCP["MCP Tools<br/><code>_mcp/</code>"]
        Web["Django Editor + Viewer<br/><code>_django/</code>"]
        Ports["Optional Bridges<br/><code>_ports/</code>"]
    end
    subgraph Engines["Engines (pure functions)"]
        Compile["Compile<br/><code>_compile/</code>"]
        Bib["Bibliography<br/><code>bib.py</code>"]
        Claim["Claims<br/><code>claim.py</code>"]
        Export["Export / arXiv<br/><code>export/</code>"]
        Migrate["Migration<br/><code>migration/</code>"]
    end
    subgraph Model["Project model (source of truth)"]
        DC["<code>_dataclasses/</code><br/>(immutable manuscript view)"]
        Proj["<code>_project/</code>"]
        Utils["<code>_utils/</code>"]
    end
    Surfaces --> Engines
    Engines --> Model
    Ports -.optional.-> Scholar["scitex-scholar<br/>(SCHOLAR_AVAILABLE)"]
    Ports -.optional.-> Figrecipe["figrecipe / clew / stats"]

scitex-writer is layered in three concentric rings:

RingModulesRole
Project model_dataclasses/, _project/, _utils/Immutable view of a manuscript's tree, config, and contents — the source of truth every other layer reads.
Engines_compile/, bib.py, claim.py, export/, migration/Pure functions that operate on the project model — LaTeX compilation, BibTeX ops, claim rendering, arXiv export. No UI, no I/O assumptions beyond paths.
Surfaces_cli/, _mcp/, _django/, _ports/Four user-facing interfaces (CLI, MCP tools for AI agents, Django web editor, optional bridges to scitex-scholar/figrecipe/clew). Each delegates to the engines; they never bypass them.

The _django editor + viewer ship the same code that runs locally and on scitex.ai/apps/writer/ (no separate cloud-side implementation). Optional sibling integrations (_ports/scholar.py, etc.) follow the *_AVAILABLE flag pattern from scitex-python — if the peer isn't installed, the bridge degrades silently.

See Four Interfaces below for usage details per surface.

Four Interfaces

InterfaceForDescription
Python APIHuman researchersimport scitex_writer as sw
Command-Line Interface (CLI) CommandsTerminal usersscitex-writer compile, scitex-writer bib
MCP ToolsAI agents44 tools for Claude/GPT integration
SkillsAI agent discoveryWorkflow guides for capabilities and patterns
Python API

Compile — Build PDFs

import scitex_writer as sw

sw.compile.manuscript("./my-paper")                    # Full compile
sw.compile.manuscript("./my-paper", draft=True)       # Fast draft mode
sw.compile.supplementary("./my-paper")
sw.compile.revision("./my-paper", track_changes=True)

Export — arXiv Submission

sw.export.manuscript("./my-paper")                     # arXiv-ready tarball
sw.export.manuscript("./my-paper", output_dir="/tmp")  # Custom output dir

Tables/Figures/Bib — Create, Read, Update, Delete (CRUD) Operations

# Tables
sw.tables.list("./my-paper")
sw.tables.add("./my-paper", "results", "a,b\n1,2", "Results summary")
sw.tables.remove("./my-paper", "results")

# Figures
sw.figures.list("./my-paper")
sw.figures.add("./my-paper", "fig01", "./plot.png", "My figure")
sw.figures.remove("./my-paper", "fig01")

# Bibliography
sw.bib.list_files("./my-paper")
sw.bib.add("./my-paper", "@article{Smith2024, title={...}}")
sw.bib.merge("./my-paper")  # Merge + deduplicate

Guidelines — Introduction, Methods, Results, and Discussion (IMRAD) Writing Tips

sw.guidelines.get("abstract")
sw.guidelines.build("abstract", draft="Your draft...")
sw.guidelines.list_sections()  # ['abstract', 'introduction', 'methods', 'discussion', 'proofread']

Prompts — AI2 Asta

from scitex_writer import generate_asta
result = generate_asta("./my-paper", search_type="related")

GUI — Browser-based Editor

sw.gui("./my-paper")                              # Launch editor
sw.gui("./my-paper", port=8080, dark_mode=True)  # Custom options
CLI Commands
scitex-writer --help                           # Show all commands

# Compile - Build PDFs
scitex-writer compile manuscript               # Compile manuscript
scitex-writer compile manuscript --draft       # Fast single-pass
scitex-writer compile supplementary            # Compile supplementary
scitex-writer compile revision                 # Compile revision letter

# Export - arXiv submission
scitex-writer export manuscript               # Package for arXiv upload

# Checks - Pre-submission validation
scitex-writer check-references                 # Cross-refs, citations, labels, duplicate headings
scitex-writer check-limits                     # Section word limits + reference cap (config-driven)

# Update - Sync engine files from the template
scitex-writer update-project                   # Preview drifted engine files (safe; pass --yes to apply)

# Bibliography - Reference management
scitex-writer bib list-files                   # List .bib files
scitex-writer bib list-entries                 # List all entries
scitex-writer bib get Smith2024                # Get specific entry
scitex-writer bib add '@article{...}'          # Add entry
scitex-writer bib remove Smith2024             # Remove entry
scitex-writer bib merge                        # Merge and deduplicate

# Tables - CSV to LaTeX management
scitex-writer tables list                      # List tables
scitex-writer tables add results data.csv "Caption"
scitex-writer tables remove results

# Figures - Image management
scitex-writer figures list                     # List figures
scitex-writer figures add fig01 plot.png "Caption"
scitex-writer figures remove fig01

# Guidelines - IMRAD writing tips
scitex-writer guidelines list                  # List available sections
scitex-writer guidelines abstract              # Get abstract guidelines
scitex-writer guidelines abstract -d draft.tex # Build prompt with draft

# Prompts - AI2 Asta integration
scitex-writer prompts asta                     # Generate related papers prompt
scitex-writer prompts asta -t coauthors        # Find collaborators

# MCP server management
scitex-writer mcp list-tools                   # List all MCP tools (markdown)
scitex-writer mcp doctor                       # Check server health
scitex-writer mcp install                     # Show Claude Desktop config
scitex-writer mcp start                        # Start MCP server

# GUI - Browser-based editor
scitex-writer gui                              # Launch editor (current dir)
scitex-writer gui ./my-paper                   # Open specific project
scitex-writer gui --port 8080 --no-browser     # Custom port, no auto-open
MCP Tools — 44 tools for AI Agents

Turn AI agents into autonomous manuscript compilers.

CategoryToolsDescription
project4Clone, info, PDF paths, document types
compile4Manuscript, supplementary, revision, content
tables6CSV to LaTeX, list/add/remove, archive
figures6Convert, render PDF, list/add/remove, archive
bib6List files/entries, CRUD, merge/dedupe
guidelines3List, get, build with draft
prompts1AI2 Asta prompt generation
export1arXiv-ready tarball packaging
claim6Traceable scientific assertions
migration2Overleaf import/export
checks2Reference integrity, float order
skills2List and retrieve skill pages
update1Engine-file sync with drift detection

Claude Desktop (~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "scitex-writer": {
      "command": "scitex-writer",
      "args": ["mcp", "start"]
    }
  }
}

Full MCP tool reference

Skills — for AI Agent Discovery

Skills provide workflow-oriented guides that AI agents query to discover capabilities and usage patterns.

scitex-writer skills list              # List available skill pages
scitex-writer skills get SKILL         # Show main skill page
scitex-dev skills export --package scitex-writer  # Export to Claude Code
SkillContent
quick-startBasic manuscript workflow
compilationCompile manuscript, supplementary, revision
bibliographyBibTeX management, enrichment
figures-and-tablesFigure/table insertion and conversion
claimsClaim tracking and rendering
cli-referenceCLI commands
mcp-toolsMCP tools for AI agents
writing-attitudeEvidence requirements, scientific standards
writing-figures-statsFigure rules, statistical reporting
writing-proofreadingProofreading corrections, language rules
writing-abstractAbstract template with 7-section structure
writing-introductionIntroduction template with 8-section structure
writing-methodsMethods template with reproducibility guidelines
writing-discussionDiscussion template with 5-section structure
audit-paperComprehensive pre-submission manuscript audit
Additional Interfaces

Shell Scripts / Make — Direct compilation without Python.

make manuscript              # Compile manuscript
make supplementary           # Compile supplementary
make revision                # Compile revision
make all                     # Compile all documents
make manuscript-export       # Package for arXiv submission
make clean                   # Remove build artifacts
./compile.sh manuscript --draft       # Fast single-pass
./compile.sh manuscript --no-figs     # Skip figures
./compile.sh manuscript --dark-mode   # Dark mode (Monaco theme)
./compile.sh manuscript --watch       # Hot-reload
SCITEX_WRITER_DARK_MODE=true make manuscript

GUI Editor — Standalone browser-based editor with file tree, PDF preview, and compilation controls.

GUI Light Mode    GUI Dark Mode

uv pip install 'scitex-writer[all]'
scitex-writer gui                    # Current directory
scitex-writer gui ./my-paper         # Specific project
scitex-writer gui --port 8080        # Custom port
Output Structure
./scitex-writer/
├── 00_shared/                  # Shared resources across all documents
│   ├── title.tex / authors.tex / keywords.tex / journal_name.tex
│   ├── bib_files/              # Multiple .bib files (auto-merged and deduplicated)
│   ├── latex_styles/           # Common LaTeX configurations
│   └── templates/              # LaTeX document templates
├── 01_manuscript/              # Main manuscript
│   ├── contents/               # abstract, introduction, methods, results, discussion
│   │   ├── figures/            # Figure captions + media
│   │   └── tables/             # Table captions + CSV data
│   ├── archive/                # Version history (gitignored)
│   ├── manuscript.tex          # Compiled LaTeX
│   ├── manuscript_diff.tex     # Change-tracked version
│   └── manuscript.pdf          # Output PDF
├── 02_supplementary/           # Supplementary materials (same structure)
├── 03_revision/                # Revision response letter
│   └── contents/               # editor/, reviewer1/, reviewer2/
├── config/                     # config_manuscript.yaml
└── scripts/                    # containers, installation, shell, python

Features

Details
FeatureDescription
Separated FilesModular sections (abstract, intro, methods, results, discussion)
Built-in TemplatesPre-configured manuscript, supplementary materials, and revision
BibliographyMulti-file with auto-deduplication, 20+ citation styles
AssetsParallel figure/table processing (PNG, PDF, SVG, Mermaid, CSV)
GUI EditorBrowser-based editor with PDF preview (scitex-writer gui)
Dark ModeMonaco/VS Code dark theme for comfortable reading (--dark-mode)
Section LimitsWord caps per IMRAD section + reference cap, checked before compile
Multi-EngineAuto-selects best engine (Tectonic 1-3s, latexmk 3-6s, 3-pass 12-18s)
Cross-PlatformLinux, macOS, WSL2, Docker, Singularity, HPC clusters

Usage

PDF Compilation
# Basic compilation
./scripts/shell/compile_manuscript.sh          # Manuscript
./scripts/shell/compile_supplementary.sh       # Supplementary
./scripts/shell/compile_revision.sh            # Revision letter

# Performance options
./scripts/shell/compile_manuscript.sh --draft      # Fast single-pass
./scripts/shell/compile_manuscript.sh --no-figs    # Skip figures
./scripts/shell/compile_manuscript.sh --no-tables  # Skip tables
./scripts/shell/compile_manuscript.sh --no-diff    # Skip diff generation

# Engine selection
./scripts/shell/compile_manuscript.sh --engine tectonic  # Fastest
./scripts/shell/compile_manuscript.sh --engine latexmk   # Standard
./scripts/shell/compile_manuscript.sh --engine 3pass     # Most compatible

# Development
./scripts/shell/compile_manuscript.sh --watch  # Hot-reload on file changes
./scripts/shell/compile_manuscript.sh --clean  # Remove cache
Figures
  1. Place media files in 01_manuscript/contents/figures/caption_and_media/:

    01_example_figure.png
    01_example_figure.tex  # Caption file
    
  2. Caption file format (01_example_figure.tex):

    %% Figure caption
    \caption{Your figure caption here. Explain panels (A, B, C) if applicable.}
    \label{fig:example_figure_01}
    
  3. Supported formats: PNG, JPEG, PDF, SVG, TIFF, Mermaid (.mmd)

  4. Figures auto-compile and include in FINAL.tex

Tables
  1. Place CSV + caption in 01_manuscript/contents/tables/caption_and_media/:

    01_example_table.csv
    01_example_table.tex  # Caption file
    
  2. CSV auto-converts to LaTeX table format

  3. Caption file format (01_example_table.tex):

    %% Table caption
    \caption{Your table caption. Define abbreviations used.}
    \label{tab:example_table_01}
    
References

Organize references in multiple .bib files - they auto-merge with deduplication:

00_shared/bib_files/
├── methods_refs.bib      # Method-related references
├── field_background.bib  # Background literature
└── my_papers.bib         # Your own publications

Change citation style in config/config_manuscript.yaml:

  • unsrtnat (numbered, order of citation)
  • plainnat (numbered, alphabetical)
  • apalike (author-year, APA style)
  • IEEEtran (IEEE format)
  • naturemag (Nature style)

Documentation

Details
GuideDescription
InstallationSetup for all environments
Quick StartCommon workflows
Content CreationWriting manuscripts
BibliographyReference management
ArchitectureTechnical details

SciTeX
AGPL-3.0