Skip to main content

A tool for building LaTeX documents with Git integration and diff generation

Project description

LaTeX Builder

A Python tool for building LaTeX documents with Git version management and automatic diff generation.

Features

  • Git Integration: Automatic detection of current commit, branch, and tag information
  • LaTeX Compilation: Complete compilation workflow using XeLaTeX and BibTeX
  • Diff Generation: Create visual differences between Git versions using latexdiff
  • Version Management: Generate version information files for LaTeX documents
  • Clear Logging: Beautiful command-line interface with clear progress indicators
  • GoReleaser-like Versioning: Smart version naming based on Git tags and working tree status

Version Naming Logic

The tool uses GoReleaser-like version naming:

  • Tag commits: {tag}-{commit} (e.g., v1.2.3-a1b2c3d)
  • Non-tag commits: {next_version}-snapshot-{commit} (e.g., v1.2.4-snapshot-a1b2c3d)
  • Dirty working tree: {version}-dirty-{commit} (e.g., v1.2.4-dirty-a1b2c3d)

Where {next_version} is the patch-bumped version of the latest semantic version tag.

Usage

Command Line

# Basic usage (in Git repository containing main.tex)
pipx run latex-builder

# Specify LaTeX file
pipx run latex-builder -t document.tex

# Specify output directory
pipx run latex-builder -o build_output

# Enable verbose output
pipx run latex-builder -v

# Full options
pipx run latex-builder -t main.tex -r misc/revision.tex -o output -b build -v

Generate Only revision.tex

# Generate revision.tex only (no build or diff)
pipx run latex-builder revision

# Specify output path for revision.tex
pipx run latex-builder revision --revision-file misc/revision.tex

Python API

from latex_builder import Config, LatexDiffTool
from pathlib import Path

# Create configuration
config = Config(
    tex_file="main.tex",
    revision_path="misc/revision.tex",
    output_folder=Path("output"),
    build_dir=Path("build"),
    verbose=True
)

# Run tool
tool = LatexDiffTool(config)
exit_code = tool.run()

Package Structure

latex_builder/
├── cli/                    # Command line interface
│   ├── main.py            # Main application class
│   └── parser.py          # Command line argument parsing
├── config/                # Configuration management
│   └── settings.py        # Configuration data classes
├── diff/                  # Diff generation
│   └── generator.py       # LaTeX diff operations
├── git/                   # Git operations
│   ├── repository.py      # Git repository handling
│   └── revision.py        # Git version data structures
├── latex/                 # LaTeX processing
│   └── processor.py       # LaTeX compilation
└── utils/                 # Shared utilities
    ├── command.py         # Command execution
    └── logging.py         # Logging setup

Configuration Options

  • tex_file: Main LaTeX file to compile (default: "main.tex")
  • revision_path: Path to revision.tex file (default: "variables/revision.tex")
  • verbose: Enable debug logging (default: False)
  • output_folder: Output files directory (default: "output")
  • build_dir: Temporary build files directory (default: "build")

Output Files

The tool generates the following output files:

  • Current Version PDF: {version-name}.pdf
  • Diff PDFs:
    • diff/since-last-commit-{hash}.pdf
    • diff/since-last-tag-{tag}.pdf
  • Metadata: metadata.json containing version information
  • Version File: revision.tex containing version macros for LaTeX

Requirements

  • Python 3.11+
  • Git repository
  • LaTeX installation including:
    • XeLaTeX
    • BibTeX
    • latexdiff

Example

# In a Git repository containing LaTeX project
cd my-latex-project

# Install package
uv pip install -e /path/to/latex-builder

# Build current version and generate diffs
uv run latex-builder -v

This will:

  1. Analyze current Git state
  2. Generate version information files
  3. Compile current version PDF
  4. Generate diff documents with previous commit and previous tag
  5. Output all files to output/ directory

Architecture

The package uses a modular architecture with clear separation of concerns:

  • CLI Layer: Handles command line interaction
  • Core Logic: Git operations, LaTeX processing, diff generation
  • Configuration: Centralized settings management
  • Utilities: Shared functionality for logging and command execution

Each module can be tested independently, following Python best practices.

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

latex_builder-0.0.11.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

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

latex_builder-0.0.11-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file latex_builder-0.0.11.tar.gz.

File metadata

  • Download URL: latex_builder-0.0.11.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.5

File hashes

Hashes for latex_builder-0.0.11.tar.gz
Algorithm Hash digest
SHA256 1cbfcf8ffb96fc15ae776563c4564a44165756d35889b5887db53fde2c21780f
MD5 763daffc80b451edc3585f992a516b07
BLAKE2b-256 299f7808fb5d33e2c6d85202c0ef21186f5dae347989042fb7d3473498c1e054

See more details on using hashes here.

File details

Details for the file latex_builder-0.0.11-py3-none-any.whl.

File metadata

File hashes

Hashes for latex_builder-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 8701a6beab87e37b78be0b110731bcd41e917ad9a6d373f86a080b3f0d6da799
MD5 6bdadcee12ed25221ec6149b0b25a720
BLAKE2b-256 c94308319c54016630b8d5b288464faf747bbbb19a21bd410e90bc017621e21b

See more details on using hashes here.

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