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.10.tar.gz (17.0 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.10-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for latex_builder-0.0.10.tar.gz
Algorithm Hash digest
SHA256 d74febb0c7a2e94c40eb31aeaf03290ac3aabd49401402d572a84b8ee3ff0658
MD5 5cad46a5e3e9c9ea0613f7f13fe876ce
BLAKE2b-256 ccc1f80b7d2d338f6444cd384def64e0e8c28f8df96a0b8a127ca5dec07f45e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for latex_builder-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 e6b958579bb9df9478b3446c9f5436dc81e27e455b7859f457d59267ed6e770a
MD5 84ca3369d813c67af333644a416d3b43
BLAKE2b-256 401ed5d3077845c7ac448fc4782797d781ca7cd53c3312105865b8b2aa641eac

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