CTAN Comprehensive TeX Archive Network

Directory macros/unicodetex/latex/hadith

README.md

hadith — An easy way to typeset Hadith in

بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ

Version 1.1.0 (2025-01-15)

Author: Nibras Abo Alzahab <nibras.abo.alzahab@gmail.com>

A package for typesetting Hadith from the Seven Canonical Books (Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud, Jami at-Tirmidhi, Sunan an-Nasa'i, Sunan Ibn Majah, Muwatta Malik) in /Lua documents.

Overview

The hadith package provides macros for typesetting Hadith text (with Arabic diacritics/tashkeel) from the canonical collections of Islamic tradition. It is modeled after the quran package and follows the same architecture: text data in .def files, macros in .sty.

Features

  • On-demand loading: Chapter files are loaded only when a hadith from that chapter is requested, avoiding memory limits
  • Seven Canonical Books: 7 collections included (36,390 hadiths total)
  • English translations: Built-in translations (enable with showtrans option)
  • Hadith grades: Authenticity grades from scholars (enable with showgrade option)
  • Case-insensitive: Collection names work in any case (bukhari, Bukhari, BUKHARI)
  • Arabic text with full diacritics (tashkeel)

Requirements

  • or Lua (not pdf — requires Unicode and RTL support)
  • bidi package (for right-to-left text)
  • polyglossia package (for Arabic language support)
  • Arabic Unicode font (Amiri, Scheherazade, or KFGQPC Uthmanic)
  • xkeyval, xparse, xstring packages

Installation

Local installation (for testing)

Copy the files from tex/ to your tree or set TEXINPUTS:

# Linux/macOS
export TEXINPUTS=/path/to/hadith_package/tex:$TEXINPUTS

# Windows PowerShell
$env:TEXINPUTS = "C:\path\to\hadith_package\tex;" + $env:TEXINPUTS

CTAN installation (future)

tlmgr install hadith    # TeX Live
mpm --install=hadith    # MiKTeX

Usage

Basic example

% !TEX program = xelatex
\documentclass[12pt,a4paper]{article}

\usepackage{bidi}
\usepackage[no-math]{fontspec}
\usepackage[quiet]{polyglossia}

\setmainfont[Scale=1]{Amiri-Regular.ttf}
\newfontfamily\arabicfont[Script=Arabic]{Amiri-Regular.ttf}
\setdefaultlanguage[calendar=gregorian]{arabic}
\setotherlanguage[variant=british]{english}

% Load hadith package with all available books, grades, and translations
\usepackage[bukhari,muslim,abudawud,tirmidhi,nasai,ibnmajah,malik,showgrade,showtrans]{hadith}

\usepackage[breaklinks,hidelinks]{hyperref}

\begin{document}

% Typeset hadith #1 from Sahih al-Bukhari (with grade + translation)
\hadith[bukhari][1]

% Case-insensitive collection names
\hadith[Bukhari][8]
\hadith[BUKHARI][7000]

% Shortcut commands
\hadithmuslim{1}

% Citation (inline)
قال النبي ﷺ: \hadithcite[bukhari][1]

% Collection name
\hadithname{bukhari}

\end{document}

Package options

Option Description
bukhari Load Sahih al-Bukhari
muslim Load Sahih Muslim
abudawud Load Sunan Abi Dawud
tirmidhi Load Jami at-Tirmidhi
nasai Load Sunan an-Nasa'i
ibnmajah Load Sunan Ibn Majah
malik Load Muwatta Malik
ahmad Load Musnad Ahmad (not yet available)
darimi Load Sunan al-Darimi (not yet available)
sixbooks Load the Six Canonical Books (default)
all Load all 7 available collections
nonumber Hide hadith numbers
ornbraces Use ornamental brackets ﴿ ﴾ for numbers
compact Compact formatting
showgrade Show hadith grades (default: on)
showtrans Show English translations (default: off)

Commands

Command Description
\hadith[collection][number] Typeset a specific hadith
\hadith*[collection][number] Typeset with paragraph break
\hadithrange[collection][start-end] Typeset a range of hadiths
\hadithbukhari{number} Shortcut for \hadith[bukhari][number]
\hadithmuslim{number} Shortcut for \hadith[muslim][number]
\hadithabudawud{number} Shortcut for \hadith[abudawud][number]
\hadithtirmidhi{number} Shortcut for \hadith[tirmidhi][number]
\hadithnasai{number} Shortcut for \hadith[nasai][number]
\hadithibnmajah{number} Shortcut for \hadith[ibnmajah][number]
\hadithmalik{number} Shortcut for \hadith[malik][number]
\hadithcite[collection][number] Inline citation
\hadithname{collection} Get collection display name
\hadithsection{collection}{number} Get section/chapter name

Collection names

Collection names are case-insensitive: bukhari, Bukhari, BUKHARI all work.

Available collections: bukhari, muslim, abudawud, tirmidhi, nasai, ibnmajah, malik.

Data Source

Hadith text is sourced from fawazahmed0/hadith-api (public domain / The Unlicense).

  • Arabic text with full diacritics (tashkeel)
  • 7 canonical collections
  • 36,390 hadiths total
  • English translations included

Collection sizes




Collection Hadiths Chapters
Sahih al-Bukhari 7,589 98
Sahih Muslim 7,563 57
Sunan Abi Dawud 5,274 43
Jami at-Tirmidhi 3,998 49
Sunan an-Nasa'i 5,765 52
Sunan Ibn Majah 4,343 38
Muwatta Malik 1,858 62
Total 36,390 399
Note: The traditional "Nine Books" (الكتب التسعة) also include Musnad Ahmad and Sunan al-Darimi, but these are not available in the data source (fawazahmed0/hadith-api). The package code includes options for ahmad and darimi for future expansion when data becomes available.

On-Demand Loading

The package uses on-demand loading to avoid memory limits. Only the metadata (index) files are loaded at package initialization. Chapter text files are loaded automatically when a hadith from that chapter is first requested. This keeps memory usage low even with 36,390 hadiths across 7 collections.

Building from source

Prerequisites

  • Python 3.x

Generate .def files from JSON

python source/tools/generate_def.py data/ara-bukhari.json tex/bukhari bukhari --trans data/eng-bukhari.json

Test compilation

xelatex test_hadith.tex

License

  • Package code (.sty, documentation): LPPL 1.3c
  • Hadith text data (.def files): Public domain (source: The Unlicense)
  • Hadith text itself: Classical works, centuries old, public domain

Download the contents of this package in one zip archive (12.2M).

hadith – An easy way to typeset Hadith text using or Lua

This package provides an easy way to typeset Hadith text (with full Arabic diacritics/tashkeel) from the canonical collections of Islamic tradition in or Lua documents. It is modeled after the quran package and follows the same architecture: text data in .def files, macros in .sty.

The package currently includes seven collections (36,390 hadiths total): Sahih al-Bukhari, Sahih Muslim, Sunan Abi Dawud, Jami at-Tirmidhi, Sunan an-Nasa’i, Sunan Ibn Majah, and Muwatta Malik. English translations and hadith authenticity grades are included.

Key features include on-demand chapter loading to avoid memory limits, case-insensitive collection names, inline citation commands, and metadata commands for section/chapter names.

Packagehadith
Version1.1.0
LicensesThe Project Public License 1.3c
Public Domain Software
Copyright2025 Nibras Abo Alzahab
MaintainerNibras Abo Alzahab
Contained inTeX Live as hadith
TopicsArabic
Macro support
...
Guest Book Sitemap Contact Contact Author