Skip to content
 
 

Latest commit

 

History

260 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

geneve_1564 — typeset Bible editions

A LaTeX/Python toolkit that builds beautifully typeset PDF Bibles in the visual tradition of the Geneva Bible of 1564, set in EB Garamond with LuaLaTeX and the scripture package.

This is a fork of raphink/geneve_1564, whose original goal was a faithful facsimile of the 17th-century French Geneva Bible. It has been extended into a general pipeline that fetches modern English translations (ESV and NET) from their APIs and renders them as several distinct, print-ready editions — while preserving the Geneva aesthetic: centered chapter headings, decorative drop-cap initials, running heads, and marginal/footnote apparatus.

The direct inspiration for this project was David Purton's scripture LaTeX package (CTAN). Discovering a package purpose-built for typesetting scripture — chapter/verse markup, poetry, running-head marks, footnotes — is what prompted building these editions around it; scripture does all of the biblical text layout here.

Editions

Each edition is a top-level <name>.tex document that \inputs generated per-book files. All are two-column KOMA scrbook on a 179 × 239 mm page unless noted. Every book opens with a period woodcut headpiece assigned by canonical division (Law/History/Wisdom/Prophets/Gospels/Epistles/Revelation); see images/headings/SOURCES.md.

Edition Build target Text Distinctive layout Pages
ESV make esvesv_bible.tex ESV Red-letter (Words of Christ), drop-cap lettrines, footnotes in the outer margin ~1350
KJV make kjvkjv_bible.tex KJV (public domain) Same reading layout as ESV; LORD in small caps; no red-letter (KJV has no quotation marks). A rendered example is committed: output/kjv_bible.pdf ~1280
NET reading make net-readingnet_reading.tex NET Clean two-column reading layout ~1375
NET notes make net-notesnet_notes.tex NET Single column with a wide (55 mm) right gutter ruled for handwritten/digital notes ~2265
Geneva make genevageneva_bible.tex NET NET text + the 1599 Geneva Study Bible marginal annotations (~15.5k notes; overflow rendered as lettered footnotes), 13 pt ~2436
Geneva 1564 make geneve-1564geneve_1564.tex French (original) The upstream French facsimile reproduction

geneve_1564_modern.tex is a compact A6 modern-French variant carried over from upstream. Compiled PDFs are written to output/ (the KJV example is the only one committed; build the rest with make <edition>).

How it works

Text is fetched from external APIs, cached locally as JSON, converted to scripture-package LaTeX, then compiled with LuaLaTeX.

  • Fetchersesv_fetcher.py (api.esv.org, token auth), bible_fetcher.py (labs.bible.org, for NET), kjv_fetcher.py (aruljohn/Bible-kjv, public-domain KJV), annotation_fetcher.py (Geneva Study Bible notes from StudyLight), build_red_letter_data.py (Words-of-Christ spans derived from WEB USFM \wj markup, since NET has none).
  • Generatorsesv_latex_generator.py and latex_generator.py turn cached HTML/JSON into per-book .tex. build_annotated.py injects Geneva annotations and runs overlap_detector.py, an anchor-based pass that demotes margin notes to footnotes when the margin can't hold them (the Geneva density needs it — see docs/plans/).
  • Unified entry pointscripts/generate.py --edition esv|net|geneva|kjv|all regenerates an edition's book files from the existing caches (offline).

Shared assets: hand-crafted per-edition editions/<name>/cover.tex and color_index.tex; fonts in fonts/; a locally vendored scripture.sty.

Daily Bible reading plan

The NET editions (NET reading, NET notes, and Geneva) embed a 2-year, weekday-paced reading plan, parsed from 2-Year-Bible-Reading-Plan_LisaNotes.com_.pdf (LisaNotes.com) by scripts/reading_plan_parser.py. Each reading is assigned to a calendar date, automatically skipping weekends and US federal holidays (including the day after Thanksgiving).

It surfaces in two places:

  • A dated schedule table (reading_plan.tex, generated per edition), reachable from the 📖 icon in the page footer.
  • In the reading/notes editions, inline day markers — each day's reading ends at an rp-<date> anchor in the text, so you can jump from the schedule to exactly where a day's reading stops.

Setting personal parameters

Two things are meant to be personalized before you generate:

  • Start date — day 1 of the plan. Default 2026-03-02. Set it with the standalone NET generator:

    python3 scripts/generate_bible.py --start-date 2026-09-01 --output-dir livres_net

    (The unified scripts/generate.py uses the default start date; change the run_net(...) call there, or use generate_bible.py directly, to override it.)

  • Personal skip dates — recurring days to leave unscheduled (birthdays, anniversaries, travel). Edit the _PERSONAL_SKIPS set in scripts/reading_plan_parser.py; entries are (month, day) tuples applied every year:

    _PERSONAL_SKIPS = {(2, 24), (2, 27), (3, 6), (6, 23)}

After changing either, regenerate the edition and recompile (make net-reading, etc.) so the new dates flow into both the schedule table and the inline markers.

Building

Requirements:

  • LuaLaTeX (TeX Live / TinyTeX) — LuaLaTeX specifically; XeLaTeX's macOS AAT renderer breaks the EB Garamond Initials font.
  • Python 3 with scripts/requirements.txt (requests, python-dotenv, pdfplumber).
  • For ESV: an ESV API key in a .env file at the project root as ESV_API_KEY=.... (NET via labs.bible.org needs no key.)
pip install -r scripts/requirements.txt

# regenerate book files for an edition (offline, from cache)
python3 scripts/generate.py --edition esv        # or net / geneva / all

# compile a single edition (two LuaLaTeX passes)
make esv                # esv / net-reading / net-notes / geneva / geneve-1564
make all-editions       # build every edition

Compiled PDFs land at <name>.pdf in the project root. make clean removes build artifacts.

Text sources & licensing

The ESV and NET translations are copyrighted; this repository contains tooling, not the licensed text (generated livres_*/ book files and the API caches carry their respective publishers' terms). Respect the ESV API and labs.bible.org terms of use, and the Crossway / NET Bible copyright and quotation limits, for any PDFs you produce or distribute — which is why only the KJV example PDF is committed here.

The KJV (Authorized Version, 1611) is public domain in the United States and most of the world; in the United Kingdom rights are vested in the Crown (administered by Cambridge University Press). Its example render is committed as output/kjv_bible.pdf. The headpiece artwork is public domain (see images/headings/SOURCES.md); EB Garamond is under the SIL Open Font License.

Credits

  • David Purton's scripture LaTeX package (CTAN) — the inspiration for this project and the engine behind all scripture typesetting (chapters, verses, poetry, running-head marks, footnotes).
  • Raphaël Pinson — the original geneve_1564 project and the French Geneva 1564 reproduction this repository forks.
  • Georg Duffner's EB Garamond — the typeface (SIL Open Font License).

About

eReader-ready PDF Bibles (ESV & NET) typeset in the Geneva 1564 tradition with LuaLaTeX and the scripture package — multiple editions, Geneva Study Bible notes, and a 2-year reading plan.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages