diff2latex
A simple utility that produces github-styled diffs in a synthesizable LaTeX format.
Requirements
lualatexfor pdf generation (optional, only needed for PDF output)python3.7+
Installation
From PyPI (recommended)
pip install diff2latex
From source
- Clone this repository
git clone https://github.com/divadiahim/diff2latex.git cd diff2latex
- Install dependencies and build the package
pip install -r requirements.txt pip install -e .
Usage
Command Line Interface
- Grab 2 files that you want to diff and generate a plain diff
diff -u file_1 file_2 > example.diff. - To generate a LaTeX diff run
diff2latex --highlight="default" build example.diff output. This will create a directory namedoutputcontainingexample.tex. - To additionally generate a pdf pass the
--pdf-outputflag.
Library Usage
You can also use diff2latex as a Python library for programmatic diff processing:
Simple Usage
import diff2latex
# Convert diff content to LaTeX
diff_content = """--- old.py
+++ new.py
@@ -1,2 +1,2 @@
-print("Hello")
+print("Hello, World!")
"""
latex_output = diff2latex.diff_to_latex(
diff_content,
highlight_style="github",
file_extension=".py"
)
# Save to file
with open("output.tex", "w") as f:
f.write(latex_output)
# Or create PDF directly
diff2latex.create_diff_pdf(diff_content, "output.pdf", highlight_style="github")
Class-based Processing
from diff2latex import DiffProcessor
# Create processor with default settings
processor = DiffProcessor(
font_family="Monaco",
highlight_style="monokai",
file_extension=".cpp"
)
# Process multiple diffs with consistent styling
latex1 = processor.process(diff_content1)
latex2 = processor.process(diff_content2)
# Create PDFs
processor.create_pdf(diff_content1, "diff1.pdf")
processor.create_pdf(diff_content2, "diff2.pdf")
Advanced Usage
from diff2latex import Diff2Latex, CharColorizer
from io import StringIO
# Use core classes directly
colorizer = CharColorizer(style_name="github", ext=".py")
diff_io = StringIO(diff_content)
differ = Diff2Latex.build(diff_io, colorizer=colorizer)
latex_lines = differ.to_latex()
Available Functions
diff2latex.diff_to_latex(content, **kwargs)- Convert diff string to LaTeXdiff2latex.diff_file_to_latex(file_path, **kwargs)- Convert diff file to LaTeXdiff2latex.create_diff_pdf(content, output_path, **kwargs)- Create PDF directlydiff2latex.DiffProcessor(**kwargs)- Class-based processor for multiple diffs
Available Classes
All core classes are importable for advanced usage:
Diff2Latex- Main diff processing classCharColorizer- Syntax highlightingColorMap- Color mapping utilitiesCodeBlock,Cell,Line- Data models
See examples.py for more detailed usage examples.
Development
Setting up development environment
# Clone the repository
git clone https://github.com/divadiahim/diff2latex.git
cd diff2latex
# Run the development setup script
./setup_dev.sh
# Or manually:
pip install -e .
pip install -r requirements.txt
Testing
Run the smoke tests to ensure everything works:
python test_package.py
Publishing
- Update the version in
diff2latex/__init__.py - Build and check the package:
./publish.sh
- Upload to PyPI:
# Test on TestPyPI first (recommended) python -m twine upload --repository testpypi dist/* # Then upload to PyPI python -m twine upload dist/*
TODOs
- Add a horizontal diff style.
- Add comprehensive unit tests
- Add GitHub Actions CI/CD
- Add documentation with examples
Metadata
Release files for diff2latex 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| diff2latex-0.1.0.tar.gz | 40.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| diff2latex-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.9 kB
Release files / diff2latex-0.1.0.tar.gz
| Download URL | diff2latex-0.1.0.tar.gz |
|---|---|
| Size | 40.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
970358dd6238d479389fc0a03d77c07595e84d86d1d2f920b9f39adddb522d1e
|
|
BLAKE2b-256 checksum How to use checksums |
8235f08ebba8673b830281ad10c6c3b1cd757338394c99c658885b4ce66ad606
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / diff2latex-0.1.0-py3-none-any.whl
| Download URL | diff2latex-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6d508893a62a2d89345857dee8dd272a3ddc0db4c14df08eed73cfceea50b2d0
|
|
BLAKE2b-256 checksum How to use checksums |
2d57e2354c4a0b02c2abb4fcd5da5783291d980faf446ac3199bd249febe3300
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|