Hanging from latest fmt textbook

Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Loading Image
I now have comprehensive content. Let me compile the full answer.

Hanging

Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026)

Definition

Hanging is a violent form of mechanical asphyxia caused by suspension of the body by a ligature which encircles the neck, the constricting force being the weight of the body itself.
"Hanging is always suicidal in nature, unless otherwise the contrary is proved beyond reasonable doubt."

Classification

I. By Degree of Suspension

TypeDescription
Complete hangingBody fully suspended without any part touching the ground
Partial hangingBody partly suspended - toes/feet touch the ground, or body in sitting/kneeling/lying/prone posture with only head and chest off the ground. The weight of head (5-6 kg), chest and arms acts as constricting force. Only a comparatively slight force is enough to cause death.

II. By Position of the Knot

TypeDescription
Typical hangingKnot over the central back of neck (occipital region); ligature runs symmetrically upward from midline above thyroid cartilage
Atypical hangingKnot on right side, left side, or front of the neck (anywhere except the occiput)

Ligature

A suicide uses any readily available article: rope, cord, metallic chains/wires, leather strap, belt, bed sheet, scarf, dhoti, saree, turban, sacred thread, etc.
The doctor must note:
  • Whether the mark on the neck corresponds with the material used
  • If it is strong enough to bear the weight/jerk of the body
  • Texture, length, width, mode of application, location and type of knot
  • Before removing the ligature, it must be photographed and fully described

Symptoms of Hanging

  1. Loss of power; subjective sensations - flashes of light, ringing/hissing noises in ears
  2. Intense mental confusion; loss of logical thought
  3. Loss of consciousness (within 15 seconds when a thin rope is used) - hence regarded as a painless death
  4. Stage of convulsions - face distorted, livid; eyes prominent; violent struggling
  5. Respiration stops before the heart, which may continue beating for 10-15 minutes

Cause of Death in Hanging

MechanismDetails
(1) AsphyxiaLigature compresses laryngeal/tracheal lumina; root of tongue is forced against posterior pharyngeal wall; epiglottis folds over larynx entrance. A tension of 15 kg blocks the trachea. Marked asphyxia signs present.
(2) Venous congestionKnot in chin area blocks jugular veins (compression of 2 kg sufficient) but arterial flow may continue, leading to cerebral venous congestion and unconsciousness.
(3) Combined asphyxia + venous congestionCommonest cause
(4) Cerebral anemiaKnot at nape of neck: both arterial and venous flow cut off. Pressure on carotid arteries → cerebral anemia and coma in 10-15 seconds. Death slow; asphyxial features less marked. A tension of 4-5 kg blocks carotid arteries; 20 kg blocks vertebral arteries.
(5) Reflex vagal inhibitionPressure on vagal sheath or carotid bodies. Fear, apprehension, alcohol heighten sensitivity. Release of catecholamines may sensitize myocardium to neurogenic stimulation.
(6) Cervical vertebral fracture/dislocationOccurs with free fall + sudden jerk (e.g., judicial hanging).

Fatal Period

  • Immediate - if cervical vertebrae fractured or heart inhibited
  • Rapid - if asphyxia is the cause
  • Least rapidly - if coma is responsible
  • Usual period: 3 to 5 minutes
  • Most hangings cause gradual, subtle and painless death

Delayed Deaths (after rescue from hanging)

  1. Aspiration pneumonia
  2. Oedema of lungs
  3. Oedema of larynx
  4. Hypoxic encephalopathy
  5. Infarction of brain
  6. Abscess of brain
  7. Cerebral softening
Secondary effects in persons who recover: hemiplegia, decubitus ulcer, anemia, hypoproteinemia, epileptiform convulsions, amnesia, dementia, cervical cellulitis, parotitis, retropharyngeal abscess.

Postmortem Appearances

External

The Ligature Mark (most important finding)

Ligature mark of hanging
Fig. 13.9: Ligature mark of hanging
Characteristics of the groove:
  • Oblique, running upward from front toward the side of knot
  • Deepest part at the point of maximum pressure (opposite side to knot)
  • Has the classic inverted-V configuration
  • Suspension peak/point - where the noose meets the vertical rope; no mark is left here (distinguishes hanging from ligature strangulation)
  • Along edges: narrow zone of congestion/hemorrhage (due to lateral blood displacement, not vital reaction)
  • Blisters containing serum may form from friction of a tight noose
  • Abrasions with hemorrhage are strongly suggestive of antemortem suspension
Level of ligature mark (relation to thyroid cartilage):
  • Above the level of thyroid cartilage: 80% of cases
  • At the level of cartilage: ~15%
  • Below the cartilage: ~5% (especially partial suspension)
Horizontal ligature mark is seen when:
  1. A running noose is applied (noose tightens horizontally due to body weight)
  2. Hanging from a low point of suspension
  3. Partial hanging with body leaning forward
Width of groove: About equal to, or slightly less than, the width of the ligature.
Histological examination: Tissues under the mark are dry, white and glistening. The absence of tissue reaction does not exclude antemortem hanging (Gordon et al.). Presence of tissue reaction indicates antemortem hanging. Fabric ligature marks may show textile pattern impressions.
Postmortem lividity: Purple/bluish-red, present in face, neck, forearms and hands (below the level of the ligature). If suspended >4-6 hours, lividity shifts to dependent parts of limbs and external genitalia. Penile turgidity (apparent engorgement) may appear in males.
Other external findings:
  • Face: pale or congested, cyanosed
  • Tongue: may protrude between teeth
  • Eyes: may be open or closed, congested
  • Seminal fluid may ooze at the time of death
  • Urination/defecation may occur (loss of sphincter control)

Internal Findings

Neck dissection (must be done after brain and viscera removal):
StructureFindings
Underlying skin layersSmall hemorrhages from direct pressure
Strap musclesHemorrhages in ~25%
Platysma/sternomastoidRuptured in 5-10% (with significant violence)
Carotid arteriesTransverse intimal splits in 5-10% (ipsilateral to knot location); indicates victim was alive at time of hanging. Several horizontal tears at different levels seen with long-drop hanging
Vertebral arteriesRupture, intimal tears, subintimal hemorrhages (some cases)
TracheaUsually congested; injury unusual
Epiglottis/larynx/tracheaPetechial hemorrhages
Base of tongue deep musclesBruising from crushing against hard palate
Lymph nodes above/below ligatureCongested
LungsCongested, oedematous; exude bloody serum (constriction at end of expiration) - OR pale (constriction at end of inspiration); subpleural ecchymoses possible
BrainUsually normal; may be pale or congested
Subarachnoid spaceEffusions common
Lumbar vertebraeSimon's hemorrhages - bleeding into outer layers of intervertebral discs (red stripes between vertebral bodies) - seen in bodies suspended for a long time
Abdominal organsUsually congested

Medico-legal Classification

Suicidal Hanging

  • Most common form; most common method of suicide
  • Hanging is presumed suicidal unless contrary is proved beyond reasonable doubt
  • Only slight force required; partial hanging is still effective
  • Ligature mark is antemortem

Accidental Hanging

  1. Children during play imitating judicial hanging
  2. Athletes exhibiting hanging stunts (padding between ligature and neck suggests accident)
  3. Workmen falling from scaffolding and becoming entangled in ropes
  4. Boys climbing trees/railings - garment caught by branch/bar and drawn tight around neck
  5. Infants in restraining apparatus wriggling partly out and catching neck

Homicidal Hanging

  • Rare; practically impossible in an adult unless the person is overpowered, drugged, or unconscious
  • More feasible in children or helpless individuals
  • Must be differentiated from postmortem suspension of a murdered body (to simulate suicide)

Treatment (If Alive)

  1. Cut the ligature to remove neck constriction
  2. Artificial respiration
  3. Stimulants

Key Distinguishing Features: Hanging vs. Ligature Strangulation

FeatureHangingLigature Strangulation
Ligature mark directionOblique, upward toward knotHorizontal
Suspension peakPresent (no mark at knot junction)Absent
LevelUsually above thyroid cartilageUsually at/below thyroid cartilage
Depth of grooveLess deep (broader ligature)May be deeper
MannerUsually suicidalUsually homicidal

- The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026), Chapter 13: Asphyxia, pp. 334-342

Create a summary PDF guide on forensic findings in hanging cases

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || echo "workspace does not exist"

Running Command

mkdir -p /tmp/workspace/hanging-pdf && python3 -c "from reportlab.lib import colors; print('reportlab ok')"

Writing File

~/hanging-pdf/build_pdf.py

"""
Forensic Findings in Hanging – Summary PDF Guide
Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026)
"""

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# ── colour palette ──────────────────────────────────────────────────────────
C_DARK    = colors.HexColor("#1a1a2e")   # dark navy
C_MID     = colors.HexColor("#16213e")   # medium navy
C_ACCENT  = colors.HexColor("#b5451b")   # deep red/crimson
C_LIGHT   = colors.HexColor("#e94560")   # bright red highlight
C_BG      = colors.HexColor("#f5f5f5")   # light grey bg for tables
C_HDR     = colors.HexColor("#1a1a2e")   # table header navy
C_ROW1    = colors.HexColor("#ffffff")
C_ROW2    = colors.HexColor("#eef0f6")
C_WHITE   = colors.white
C_BORDER  = colors.HexColor("#c0c4d0")

W, H = A4

# ── document ─────────────────────────────────────────────────────────────────
OUTPUT = "/tmp/workspace/hanging-pdf/Forensic_Findings_Hanging.pdf"
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    leftMargin=2*cm, rightMargin=2*cm,
    topMargin=2.5*cm, bottomMargin=2*cm,
    title="Forensic Findings in Hanging – Summary Guide",
    author="Orris Medical AI",
    subject="Forensic Medicine & Toxicology"
)

styles = getSampleStyleSheet()

# ── custom styles ─────────────────────────────────────────────────────────────
def make_styles():
    s = {}
    s["cover_title"] = ParagraphStyle("cover_title",
        fontSize=28, leading=34, textColor=C_WHITE,
        fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=6)
    s["cover_sub"] = ParagraphStyle("cover_sub",
        fontSize=13, leading=18, textColor=colors.HexColor("#dddddd"),
        fontName="Helvetica", alignment=TA_CENTER, spaceAfter=4)
    s["cover_src"] = ParagraphStyle("cover_src",
        fontSize=9, leading=13, textColor=colors.HexColor("#aaaacc"),
        fontName="Helvetica-Oblique", alignment=TA_CENTER)

    s["section"] = ParagraphStyle("section",
        fontSize=13, leading=17, textColor=C_WHITE,
        fontName="Helvetica-Bold", alignment=TA_LEFT,
        spaceBefore=14, spaceAfter=6,
        backColor=C_ACCENT,
        leftIndent=-8, rightIndent=-8,
        borderPad=(4, 8, 4, 8))

    s["subsection"] = ParagraphStyle("subsection",
        fontSize=11, leading=15, textColor=C_MID,
        fontName="Helvetica-Bold", alignment=TA_LEFT,
        spaceBefore=10, spaceAfter=4,
        borderPadding=(0, 0, 2, 0))

    s["body"] = ParagraphStyle("body",
        fontSize=9.5, leading=14, textColor=colors.HexColor("#222222"),
        fontName="Helvetica", alignment=TA_JUSTIFY,
        spaceBefore=3, spaceAfter=3)

    s["bullet"] = ParagraphStyle("bullet",
        fontSize=9.5, leading=14, textColor=colors.HexColor("#222222"),
        fontName="Helvetica", alignment=TA_LEFT,
        spaceBefore=2, spaceAfter=2,
        leftIndent=14, bulletIndent=4)

    s["note"] = ParagraphStyle("note",
        fontSize=8.5, leading=12, textColor=colors.HexColor("#555555"),
        fontName="Helvetica-Oblique", alignment=TA_LEFT,
        spaceBefore=4, spaceAfter=4, leftIndent=10)

    s["quote"] = ParagraphStyle("quote",
        fontSize=10, leading=15, textColor=C_ACCENT,
        fontName="Helvetica-BoldOblique", alignment=TA_CENTER,
        spaceBefore=6, spaceAfter=6, leftIndent=20, rightIndent=20)

    s["footer"] = ParagraphStyle("footer",
        fontSize=7.5, leading=10, textColor=colors.HexColor("#888888"),
        fontName="Helvetica", alignment=TA_CENTER)

    s["toc_item"] = ParagraphStyle("toc_item",
        fontSize=10, leading=16, textColor=C_MID,
        fontName="Helvetica", alignment=TA_LEFT,
        leftIndent=10)

    return s

S = make_styles()

# ── helper: section header banner ────────────────────────────────────────────
def sec_header(text):
    return [
        Spacer(1, 6),
        Table([[Paragraph(f"  {text}", S["section"])]],
              colWidths=[W - 4*cm],
              style=TableStyle([
                  ("BACKGROUND", (0,0), (-1,-1), C_ACCENT),
                  ("ROUNDEDCORNERS", [4]),
                  ("TOPPADDING", (0,0), (-1,-1), 6),
                  ("BOTTOMPADDING", (0,0), (-1,-1), 6),
                  ("LEFTPADDING", (0,0), (-1,-1), 10),
              ])),
        Spacer(1, 4),
    ]

def subsec(text):
    return [Paragraph(text, S["subsection"]),
            HRFlowable(width="100%", thickness=0.6, color=C_BORDER, spaceAfter=4)]

def body(text):
    return Paragraph(text, S["body"])

def bul(text):
    return Paragraph(f"• {text}", S["bullet"])

def note(text):
    return Paragraph(f"ℹ  {text}", S["note"])

# ── table builder ─────────────────────────────────────────────────────────────
def make_table(headers, rows, col_widths=None):
    table_data = []
    # header row
    hdr_row = [Paragraph(f"<b>{h}</b>", ParagraphStyle("th",
                  fontSize=9, leading=12, textColor=C_WHITE,
                  fontName="Helvetica-Bold", alignment=TA_LEFT))
               for h in headers]
    table_data.append(hdr_row)
    for i, row in enumerate(rows):
        styled = [Paragraph(str(cell), ParagraphStyle("td",
                      fontSize=9, leading=13, textColor=colors.HexColor("#222222"),
                      fontName="Helvetica", alignment=TA_LEFT))
                  for cell in row]
        table_data.append(styled)

    if col_widths is None:
        cw = (W - 4*cm) / len(headers)
        col_widths = [cw] * len(headers)

    tbl = Table(table_data, colWidths=col_widths, repeatRows=1)
    row_colors = []
    for i in range(1, len(table_data)):
        bg = C_ROW1 if i % 2 == 1 else C_ROW2
        row_colors.append(("BACKGROUND", (0, i), (-1, i), bg))

    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, 0), C_HDR),
        ("TEXTCOLOR",  (0, 0), (-1, 0), C_WHITE),
        ("TOPPADDING",    (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING",   (0, 0), (-1, -1), 6),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 6),
        ("GRID", (0, 0), (-1, -1), 0.4, C_BORDER),
        ("ROWBACKGROUNDS", (0, 1), (-1, -1), [C_ROW1, C_ROW2]),
        ("VALIGN", (0, 0), (-1, -1), "TOP"),
    ] + row_colors))
    return tbl

# ── page templates (header/footer) ───────────────────────────────────────────
def on_page(canvas, doc):
    canvas.saveState()
    # header bar
    canvas.setFillColor(C_DARK)
    canvas.rect(0, H - 1.4*cm, W, 1.4*cm, fill=1, stroke=0)
    canvas.setFont("Helvetica-Bold", 9)
    canvas.setFillColor(C_WHITE)
    canvas.drawString(2*cm, H - 0.9*cm, "FORENSIC FINDINGS IN HANGING")
    canvas.setFont("Helvetica", 8)
    canvas.setFillColor(colors.HexColor("#aaaacc"))
    canvas.drawRightString(W - 2*cm, H - 0.9*cm,
        "Essentials of FMT, 36th Ed. (2026)")
    # footer
    canvas.setFillColor(colors.HexColor("#666666"))
    canvas.setFont("Helvetica", 7.5)
    canvas.drawCentredString(W/2, 1.2*cm, f"Page {doc.page}")
    canvas.setFillColor(C_ACCENT)
    canvas.rect(2*cm, 1.05*cm, W - 4*cm, 0.05*cm, fill=1, stroke=0)
    canvas.restoreState()

def on_first_page(canvas, doc):
    # no header/footer on cover
    pass

# ══════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ══════════════════════════════════════════════════════════════════════════════
story = []

# ── COVER PAGE ───────────────────────────────────────────────────────────────
# Background
from reportlab.platypus import Flowable

class ColorRect(Flowable):
    def __init__(self, w, h, color):
        super().__init__()
        self.w, self.h, self.color = w, h, color
    def draw(self):
        self.canv.setFillColor(self.color)
        self.canv.rect(-2*cm, -2*cm, self.w + 4*cm, self.h + 2*cm, fill=1, stroke=0)

# Cover content as a table spanning the page
cover_content = [
    Spacer(1, 3.5*cm),
    Table([[Paragraph("FORENSIC FINDINGS IN", S["cover_title"])]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK),
                             ("TOPPADDING", (0,0), (-1,-1), 2),
                             ("BOTTOMPADDING", (0,0), (-1,-1), 2)])),
    Spacer(1, 0.1*cm),
    Table([[Paragraph("HANGING", ParagraphStyle("big",
              fontSize=52, leading=58, textColor=C_ACCENT,
              fontName="Helvetica-Bold", alignment=TA_CENTER))]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK),
                             ("TOPPADDING", (0,0), (-1,-1), 0),
                             ("BOTTOMPADDING", (0,0), (-1,-1), 0)])),
    Spacer(1, 0.3*cm),
    Table([[Paragraph("A Comprehensive Summary Guide", S["cover_sub"])]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK)])),
    Spacer(1, 0.8*cm),
    HRFlowable(width="60%", thickness=1.5, color=C_ACCENT,
               hAlign="CENTER", spaceAfter=10),
    Spacer(1, 0.4*cm),
    Table([[Paragraph(
        "Source: The Essentials of Forensic Medicine and Toxicology<br/>"
        "<b>36th Edition (2026)</b> — Chapter 13: Asphyxia", S["cover_src"])]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK)])),
    Spacer(1, 0.3*cm),
    Table([[Paragraph("For Medical Students & Postgraduates", ParagraphStyle("sub2",
              fontSize=10, textColor=colors.HexColor("#8888aa"),
              fontName="Helvetica-Oblique", alignment=TA_CENTER))]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK)])),
    Spacer(1, 3*cm),
    Table([[Paragraph("Compiled by Orris Medical AI  •  July 2026", ParagraphStyle("byline",
              fontSize=8.5, textColor=colors.HexColor("#666688"),
              fontName="Helvetica", alignment=TA_CENTER))]],
          colWidths=[W - 4*cm],
          style=TableStyle([("BACKGROUND", (0,0), (-1,-1), C_DARK)])),
]

# Wrap entire cover in a dark background table
cover_table = Table(
    [[item] for item in cover_content],
    colWidths=[W - 4*cm]
)
cover_table.setStyle(TableStyle([
    ("BACKGROUND", (0, 0), (-1, -1), C_DARK),
    ("TOPPADDING", (0, 0), (-1, -1), 0),
    ("BOTTOMPADDING", (0, 0), (-1, -1), 0),
    ("LEFTPADDING", (0, 0), (-1, -1), 0),
    ("RIGHTPADDING", (0, 0), (-1, -1), 0),
]))

story.append(cover_table)
story.append(PageBreak())

# ── PAGE 2: DEFINITION & CLASSIFICATION ──────────────────────────────────────
story += sec_header("1. DEFINITION")
story.append(body(
    "<b>Hanging</b> is a <b>violent form of mechanical asphyxia</b> caused by "
    "suspension of the body by a ligature which encircles the neck, the "
    "<b>constricting force being the weight of the body</b> itself."
))
story.append(Spacer(1, 4))
story.append(Paragraph(
    '"Hanging is always suicidal in nature, unless otherwise the contrary is '
    'proved beyond reasonable doubt."',
    S["quote"]
))
story.append(Spacer(1, 6))

story += sec_header("2. CLASSIFICATION")
story += subsec("A. By Degree of Suspension")
tbl1 = make_table(
    ["Type", "Description"],
    [
        ["Complete Hanging",
         "Body fully suspended without any part touching the ground."],
        ["Partial Hanging",
         "Body partly suspended — toes/feet touch ground, or body in sitting/kneeling/"
         "lying/prone posture with only head and chest off ground. Weight of head (5–6 kg), "
         "chest and arms acts as the constricting force. Only slight force is needed to cause death."],
    ],
    col_widths=[4.5*cm, 12.5*cm]
)
story.append(tbl1)
story.append(Spacer(1, 8))

story += subsec("B. By Position of the Knot")
tbl2 = make_table(
    ["Type", "Knot Location", "Description"],
    [
        ["Typical Hanging", "Occipital (back of neck)",
         "Ligature runs symmetrically upward from midline above thyroid cartilage."],
        ["Atypical Hanging", "Right side, left side, or front of neck",
         "Knot anywhere except on the occiput."],
    ],
    col_widths=[4*cm, 5*cm, 8*cm]
)
story.append(tbl2)
story.append(PageBreak())

# ── PAGE 3: SYMPTOMS & CAUSE OF DEATH ────────────────────────────────────────
story += sec_header("3. SYMPTOMS OF HANGING")
symptoms = [
    "Loss of power; flashes of light, ringing/hissing noises in ears",
    "Intense mental confusion; loss of logical thought",
    "Loss of consciousness within <b>15 seconds</b> (thin rope) — regarded as a <b>painless death</b>",
    "Stage of convulsions — face distorted, livid; eyes prominent; violent struggling",
    "Respiration stops before the heart (heart continues for <b>10–15 minutes</b>)",
]
for s in symptoms:
    story.append(bul(s))
story.append(Spacer(1, 8))

story += sec_header("4. CAUSE OF DEATH — MECHANISMS")
tbl3 = make_table(
    ["No.", "Mechanism", "Details", "Pressure Required"],
    [
        ["1", "Asphyxia",
         "Ligature compresses laryngeal/tracheal lumina; root of tongue forced against "
         "posterior pharyngeal wall; epiglottis folds over larynx. Struggle = 'air hunger'.",
         "15 kg to block trachea"],
        ["2", "Venous Congestion",
         "Knot in chin area blocks jugular veins but arterial flow continues → cerebral "
         "venous congestion → unconsciousness.",
         "2 kg to close jugular veins"],
        ["3", "Combined (Asphyxia + Venous Congestion)",
         "<b>COMMONEST cause</b> of death in hanging.",
         "—"],
        ["4", "Cerebral Anemia",
         "Knot at nape of neck compresses both arterial + venous flow. Coma in 10–15 sec; "
         "death slow; fewer asphyxia signs. Cord sinks deeply into tissues.",
         "4–5 kg (carotids); 20 kg (vertebrals)"],
        ["5", "Reflex Vagal Inhibition",
         "Pressure on vagal sheath/carotid bodies → cardiac arrest. Fear, alcohol, "
         "catecholamines heighten sensitivity.",
         "—"],
        ["6", "Cervical Fracture/Dislocation",
         "Free fall + sudden jerk (judicial hanging). Immediate death.",
         "—"],
    ],
    col_widths=[0.8*cm, 4*cm, 9.2*cm, 3*cm]
)
story.append(tbl3)
story.append(Spacer(1, 8))

story += sec_header("5. FATAL PERIOD")
fatal = [
    "<b>Immediate</b> — cervical vertebrae fractured or heart inhibited",
    "<b>Rapid</b> — asphyxia is the primary cause",
    "<b>Least rapid</b> — coma is responsible",
    "<b>Usual period: 3 to 5 minutes</b>",
]
for f in fatal:
    story.append(bul(f))
story.append(PageBreak())

# ── PAGE 4: POSTMORTEM APPEARANCES — EXTERNAL ────────────────────────────────
story += sec_header("6. POSTMORTEM APPEARANCES — EXTERNAL")

story += subsec("A. Ligature Mark on the Neck (Most Important Finding)")
ligature_rows = [
    ["Direction", "Oblique, running upward toward the knot — classic INVERTED-V configuration"],
    ["Deepest point", "Opposite side to the knot (maximum pressure area)"],
    ["Suspension peak/point", "Junction of noose + vertical rope — NO mark left here. KEY feature distinguishing hanging from ligature strangulation."],
    ["Width", "Approximately equal to, or slightly less than, the width of the ligature"],
    ["Level (re: thyroid cartilage)", "ABOVE thyroid cartilage: 80% | AT level: ~15% | BELOW: ~5% (esp. partial suspension)"],
    ["Edges", "Narrow zone of congestion/hemorrhage (blood displaced laterally, NOT vital reaction)"],
    ["Lower margin", "May be pale; upper margin red from postmortem vessel distension"],
    ["Blisters", "May form from friction of tight noose (contain serum)"],
    ["Ecchymoses alone", "No significance for antemortem vs. postmortem hanging"],
    ["Abrasions + hemorrhage", "Strongly suggestive of antemortem suspension"],
    ["Tissue reaction (histology)", "Presence = antemortem hanging; Absence does NOT exclude antemortem hanging (Gordon et al.)"],
]
tbl4 = make_table(["Feature", "Details"], ligature_rows, col_widths=[5*cm, 12*cm])
story.append(tbl4)
story.append(Spacer(1, 8))

story += subsec("B. Horizontal Ligature Mark — When Seen")
horiz = [
    "Running noose applied — weight causes noose to tighten mainly horizontally",
    "Hanging from a low point of suspension",
    "Partial hanging with body leaning forward",
]
for h in horiz:
    story.append(bul(h))

story += subsec("C. Postmortem Lividity (Hypostasis)")
lividity_rows = [
    [
        "Early",
        "Purple/bluish-red discoloration of face, neck, forearms, and hands (below ligature)"
    ],
    [
        "After 4–6 hours",
        "Fluid gravitates to dependent parts of upper + lower limbs, and external genitalia"
    ],
    [
        "Penile turgidity",
        "Apparent engorgement of penis in males due to long suspension"
    ],
]
tbl5 = make_table(["Timing", "Finding"], lividity_rows, col_widths=[3.5*cm, 13.5*cm])
story.append(tbl5)

story += subsec("D. Other External Findings")
ext_other = [
    "Face: pale or congested, cyanosed",
    "Tongue: may protrude between teeth",
    "Eyes: may be open or closed; conjunctival congestion",
    "Seminal fluid may ooze at time of death",
    "Urination/defecation from loss of sphincter control",
]
for e in ext_other:
    story.append(bul(e))
story.append(PageBreak())

# ── PAGE 5: POSTMORTEM — INTERNAL ────────────────────────────────────────────
story += sec_header("7. POSTMORTEM APPEARANCES — INTERNAL")
story.append(note("Neck must be examined AFTER removal of brain and viscera from chest and abdominal cavities."))
story.append(Spacer(1, 4))

internal_rows = [
    ["Underlying skin/tissue", "Small hemorrhages from direct pressure; no tissue reaction (dry, white, glistening with occasional ecchymoses)"],
    ["Strap muscles of neck", "Hemorrhages in ~25% of cases"],
    ["Platysma / Sternomastoid", "Rupture in 5–10% (with considerable violence)"],
    ["Carotid arteries", "Transverse intimal splits in 5–10% (ipsilateral to knot); indicates victim was alive. Multiple horizontal tears at different levels = long-drop hanging. Open to level of mandible to demonstrate tears."],
    ["Vertebral arteries", "Rupture, intimal tears, subintimal hemorrhages (some cases)"],
    ["Trachea", "Usually congested; injury unusual"],
    ["Epiglottis/Larynx/Trachea", "Petechial hemorrhages"],
    ["Base of tongue (deep muscles)", "Bruising from crushing against hard palate by upward push of ligature"],
    ["Lymph nodes", "Congested above and below the ligature mark"],
    ["Lungs", "Congested, oedematous, exude bloody serum (constriction at end of EXPIRATION)\nPale (constriction at end of INSPIRATION)\nSubpleural ecchymoses possible"],
    ["Brain", "Usually normal; may be pale or congested by mode of death"],
    ["Subarachnoid space", "Effusions common"],
    ["Simon's Hemorrhages", "Bleeding into outer layers of intervertebral discs of lumbar vertebrae (red stripes between vertebral bodies) — seen in bodies suspended for a long time"],
    ["Abdominal organs", "Usually congested"],
]
tbl6 = make_table(["Structure", "Findings"], internal_rows, col_widths=[5*cm, 12*cm])
story.append(tbl6)
story.append(PageBreak())

# ── PAGE 6: MEDICOLEGAL TYPES ─────────────────────────────────────────────────
story += sec_header("8. MEDICOLEGAL CLASSIFICATION OF HANGING")

story += subsec("A. Suicidal Hanging (Most Common)")
suicide_pts = [
    "Most common method of suicide; hanging is <b>presumed suicidal</b> unless contrary proved",
    "Only slight force required — partial hanging is still lethal",
    "Ligature mark is antemortem",
    "Ligature: rope, cord, saree, dhoti, belt, bed sheet, chain — anything readily available",
    "Double suicide (pact), family pacts have been documented",
]
for p in suicide_pts:
    story.append(bul(p))

story += subsec("B. Accidental Hanging")
accidental = [
    "Children during play imitating judicial hanging; some padding between ligature and neck suggests accident",
    "Workmen falling from scaffolding entangled in ropes",
    "Boys climbing trees/railings — garment caught by branch/bar drawn tight around neck",
    "Infants in restraining apparatus wriggling out and neck becomes caught",
    "Athletes exhibiting hanging stunts",
]
for a in accidental:
    story.append(bul(a))

story += subsec("C. Homicidal Hanging")
homicidal = [
    "Rare; practically impossible in a conscious, non-intoxicated adult",
    "More feasible in children or helpless/drugged/unconscious individuals",
    "Must be differentiated from postmortem suspension (body hanged after murder to simulate suicide)",
    "Key: look for other injuries, ligature mark characteristics, hypostasis pattern",
]
for h in homicidal:
    story.append(bul(h))
story.append(Spacer(1, 8))

story += sec_header("9. DELAYED DEATHS AFTER RESCUE")
delayed = [
    ("Aspiration pneumonia", "Common cause of delayed death"),
    ("Oedema of lungs", "—"),
    ("Oedema of larynx", "Can cause airway compromise"),
    ("Hypoxic encephalopathy", "From prolonged cerebral hypoxia"),
    ("Infarction of brain", "Vascular compromise"),
    ("Abscess / Cerebral softening", "Secondary infection or ischemia"),
]
tbl7 = make_table(["Cause", "Note"], delayed, col_widths=[6*cm, 11*cm])
story.append(tbl7)
story.append(Spacer(1, 6))
story.append(note(
    "Secondary effects in survivors: hemiplegia, epileptiform convulsions, amnesia, dementia, "
    "decubitus ulcer, anemia, hypoproteinemia, cervical cellulitis, parotitis, retropharyngeal abscess."
))
story.append(PageBreak())

# ── PAGE 7: HANGING vs STRANGULATION ─────────────────────────────────────────
story += sec_header("10. HANGING vs. LIGATURE STRANGULATION — KEY DIFFERENCES")
comparison = [
    ["Ligature mark direction", "Oblique, upward toward knot (inverted-V)", "Horizontal"],
    ["Suspension peak", "PRESENT — no mark at knot junction", "ABSENT"],
    ["Level relative to thyroid", "Usually ABOVE thyroid cartilage (80%)", "Usually at/below thyroid cartilage"],
    ["Constricting force", "Weight of body", "External force applied by another person"],
    ["Depth of groove", "Less deep with broad ligature; deeper with thin cord", "Usually deeper, uniform"],
    ["Face appearance", "Less marked congestion (venous + arterial both compressed)", "Marked congestion (venous blocked, arterial open)"],
    ["Petechiae", "Less common", "More common (classic feature)"],
    ["Manner of death", "Usually SUICIDAL", "Usually HOMICIDAL"],
    ["Knot", "Usually present; tied by deceased", "May not have a knot; continuous pull"],
    ["Carotid intimal tears", "Present (antemortem indicator)", "Less common"],
]
tbl8 = make_table(
    ["Feature", "HANGING", "LIGATURE STRANGULATION"],
    comparison,
    col_widths=[5*cm, 7.5*cm, 4.5*cm]
)
story.append(tbl8)
story.append(Spacer(1, 10))

story += sec_header("11. LIGATURE EXAMINATION — DOCTOR'S CHECKLIST")
checklist = [
    "Note nature and composition of ligature material",
    "Measure width and assess if strong enough to bear weight + jerk",
    "Describe texture, length, mode of application",
    "Record location and type of knot",
    "<b>Photograph before removing</b> the ligature from the neck",
    "Assess whether the mark on neck corresponds with the ligature alleged to have been used",
    "Note if rope broke/detached — victim may be found on ground with ligature still around neck",
]
for c in checklist:
    story.append(bul(c))
story.append(PageBreak())

# ── PAGE 8: TREATMENT & QUICK REFERENCE ──────────────────────────────────────
story += sec_header("12. TREATMENT (PERSON RESCUED FROM HANGING)")
treatment = [
    "<b>Step 1:</b> Cut the ligature immediately to remove neck constriction",
    "<b>Step 2:</b> Artificial respiration (CPR if required)",
    "<b>Step 3:</b> Stimulants as clinically indicated",
    "<b>Step 4:</b> Monitor for delayed complications (see Section 9)",
]
for t in treatment:
    story.append(bul(t))
story.append(Spacer(1, 8))

story += sec_header("13. QUICK REFERENCE — KEY NUMBERS TO REMEMBER")
numbers = [
    ["2 kg", "Closes jugular veins"],
    ["4–5 kg", "Blocks carotid arteries"],
    ["15 kg", "Blocks the trachea"],
    ["20 kg", "Blocks vertebral arteries"],
    ["5–6 kg", "Approximate weight of the head (acts as constricting force in partial hanging)"],
    ["15 seconds", "Time to loss of consciousness with thin rope"],
    ["10–15 min", "Heart may continue to beat after respiration stops"],
    ["3–5 minutes", "Usual fatal period"],
    ["80%", "Ligature mark found ABOVE level of thyroid cartilage"],
    ["~15%", "Ligature mark AT level of thyroid cartilage"],
    ["~5%", "Ligature mark BELOW thyroid cartilage (esp. partial suspension)"],
    ["25%", "Hemorrhages in strap muscles"],
    ["5–10%", "Platysma/sternomastoid rupture; carotid intimal splits"],
]
tbl9 = make_table(["Value", "Significance"], numbers, col_widths=[3.5*cm, 13.5*cm])
story.append(tbl9)
story.append(Spacer(1, 8))

story.append(Paragraph(
    "Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026) — "
    "Chapter 13: Asphyxia, pp. 334–342  •  Compiled by Orris Medical AI, July 2026",
    S["footer"]
))

# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story,
          onFirstPage=on_first_page,
          onLaterPages=on_page)

print(f"PDF saved to: {OUTPUT}")
Running Command

cd /tmp/workspace/hanging-pdf && python3 build_pdf.py 2>&1

Running Command

python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/hanging-pdf/Forensic_Findings_Hanging.pdf') print(f'Pages: {len(r.pages)}') import os sz = os.path.getsize('/tmp/workspace/hanging-pdf/Forensic_Findings_Hanging.pdf') print(f'Size: {sz/1024:.1f} KB') "

Your PDF is ready - 9 pages, clean and structured.

Forensic Findings Hanging

PDF Document · PDF


What's inside (9 pages):
SectionContent
CoverDark-themed cover with title, edition, and date
1. DefinitionDefinition + classic medicolegal quote
2. ClassificationComplete/partial hanging; typical/atypical (with tables)
3. SymptomsChronological sequence of events
4. Cause of DeathAll 6 mechanisms with pressure values required
5. Fatal PeriodTiming by mechanism
6. PM Appearances — ExternalLigature mark features, lividity, penile turgidity
7. PM Appearances — InternalNeck dissection findings, Simon's hemorrhages
8. Medicolegal ClassificationSuicidal / Accidental / Homicidal with differentiating points
9. Delayed DeathsPost-rescue complications and sequelae
10. Hanging vs. Ligature Strangulation10-point comparison table
11. Ligature Examination ChecklistStep-by-step doctor's checklist
12. Treatment4-step immediate management
13. Quick Reference NumbersAll key values (pressures, %, timings) in one table
Source: The Essentials of Forensic Medicine and Toxicology, 36th Edition (2026)
This is a shared conversation. Sign in to Orris to start your own chat.