Can you give me information abt folic acid’s source form’s symptoms
| Form | Description |
|---|---|
| Folic acid | Synthetic monoglutamate; used in supplements and food fortification |
| Folinic acid (leucovorin) | Synthetic active form; used clinically to "rescue" cells from methotrexate toxicity |
| Levomefolic acid (5-MTHF) | Synthetic reduced form; directly active, no conversion needed |
| Dietary folates | Naturally occurring polyglutamate form found in food |
Important: Folate is heat-sensitive - 10-15 minutes of cooking can destroy a significant amount of it. - Robbins & Kumar Basic Pathology

⚠️ Important clinical warning: Giving folic acid alone to a patient who is actually B12-deficient will correct the anemia (masking the B12 deficiency) but allow the neurologic damage from B12 deficiency to silently progress. Always rule out B12 deficiency before treating with folic acid alone. - Robbins & Kumar Basic Pathology; The Washington Manual of Medical Therapeutics
| Group | RDA |
|---|---|
| Adult male/female | 400 µg/day (dietary folate equivalents) |
| Pregnancy | 600 µg/day |
| Breastfeeding | 500 µg/day |
Construct answer according to rafi
What do you mean by 'construct answer according to rafi'?
Biochemistry
| Form | Description |
|---|---|
| Folic acid | Synthetic form; used in supplements and food fortification |
| Folate | Natural form found in foods (polyglutamate) |
| Tetrahydrofolate (THF) | Active coenzyme form (reduced form); the biologically functional molecule |
| Folinic acid (5-formyl THF) | More stable synthetic form; used pharmaceutically (leucovorin) |
| 5-methyl THF | Major circulating form in blood; required for homocysteine remethylation |
| Methylene-THF | Key intermediate; donates one-carbon unit for TMP synthesis |
Folic acid and folate differ in glutamate residue count. Food folates have up to 7 glutamate residues linked by γ-peptide bonds and must be hydrolyzed to monoglutamates before absorption.
Note: Folate is heat-labile - significant loss occurs during cooking.


| Group | Requirement |
|---|---|
| Adult | 400 µg/day |
| Pregnancy | 600 µg/day |
| Lactation | 500 µg/day |
| Previous NTD pregnancy | 4,000 µg/day (4 mg/day) |
Can you illustrate according to this book
Rafi MD Textbook of Biochemistry 5th edition folic acid sources forms deficiency symptoms
Rafi Textbook Biochemistry folic acid folate chapter NMC CBME curriculum
https://www.scribd.com/document/696123990/MD-Rafi-Biochemist…
| Form | Description |
|---|---|
| Folic acid | Synthetic, oxidized form; used in supplements & fortified foods |
| Folate | Natural polyglutamate form found in food |
| Dihydrofolate (DHF) | Partially reduced intermediate |
| Tetrahydrofolate (THF / THFA) | Active coenzyme form (fully reduced by DHFR) |
| N5-methyl THF | Main transport/storage form in blood |
| N5,N10-methylene THF | Donates one-carbon for TMP (thymidine) synthesis |
| Folinic acid (5-formyl THF / Leucovorin) | Stable pharmaceutical form; used as "rescue" after methotrexate |
Remember: Folic acid → (DHFR) → DHF → (DHFR) → THF (active form)
Note: Folate is destroyed by prolonged cooking (heat-labile). Raw vegetables preserve folate best.
| Group | RDA |
|---|---|
| Adults | 200 µg/day |
| Pregnancy | 400-800 µg/day |
| Lactation | 300 µg/day |
| Previous NTD pregnancy | 4000 µg/day (4 mg/day) |
⚠️ Key point: Unlike Vitamin B12 deficiency, folate deficiency does NOT cause subacute combined degeneration of the spinal cord (no neuropathy, no dementia)
| Drug | Mechanism | Use |
|---|---|---|
| Methotrexate | Inhibits DHFR (human) | Cancer chemotherapy |
| Trimethoprim | Inhibits DHFR (bacterial) | Antibiotic |
| Pyrimethamine | Inhibits DHFR (parasite) | Antimalarial |
| Leucovorin (folinic acid) | Bypasses DHFR block | Rescue after methotrexate |
Folic acid in pregnancy: All women planning pregnancy should take 400 µg/day of folic acid starting at least 1 month before conception and through the first trimester to prevent neural tube defects. If a previous pregnancy was affected, the dose is 4 mg/day.
Masking B12 deficiency: Giving folic acid alone to a B12-deficient patient corrects the anemia but allows neurological damage to progress silently. Always rule out B12 deficiency first.
FIGLU excretion test: In folate deficiency, histidine metabolism is blocked at the FIGLU step (THF unavailable) → FIGLU excreted in urine → used as a diagnostic test for folate deficiency.
Generate a PDF summary with key points and diagrams
mkdir -p /tmp/workspace/folic-acid-pdf/assets && cd /tmp/workspace/folic-acid-pdf/assets && curl -s -o anemia_classification.png "https://cdn.orris.care/cdss_images/95c8fc145821694d699368e3da24916fc3b0547af3dc034c58b559d2d88d1f50.png" && curl -s -o one_carbon_metabolism.png "https://cdn.orris.care/cdss_images/25024ea44425323befeb96a60d350238996f64bc6cc83169333b5365c1957de0.png" && curl -s -o folate_deficiency_causes.png "https://cdn.orris.care/cdss_images/fbb03f3cccb8bf9723d6b33c569c6c3bd6efae54074ec74bbdf22357fa269309.png" && curl -s -o bone_marrow.png "https://cdn.orris.care/cdss_images/10a9c871ea6b7a1513a9b74be715e5ad7838cd0334eb1babc59e56321ddec138.png" && ls -lh
~/folic-acid-pdf/generate_pdf.py
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, Image, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import HRFlowable
import os
ASSETS = "/tmp/workspace/folic-acid-pdf/assets"
OUT = "/tmp/workspace/folic-acid-pdf/Folic_Acid_Summary_Rafi.pdf"
# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2e6da4")
LIGHT_BLUE = colors.HexColor("#d6e8f7")
ACCENT = colors.HexColor("#e07b00") # orange (like Rafi cover)
BOX_BG = colors.HexColor("#fff8f0")
WARN_BG = colors.HexColor("#fff3cd")
WARN_BORDER = colors.HexColor("#ffc107")
GREEN_BG = colors.HexColor("#e8f5e9")
RED_BG = colors.HexColor("#fce4ec")
GREY_LINE = colors.HexColor("#cccccc")
WHITE = colors.white
BLACK = colors.black
doc = SimpleDocTemplate(
OUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Folic Acid – Biochemistry Summary",
author="Rafi MD Style | Textbook of Biochemistry 5th Ed."
)
W, H = A4
CONTENT_W = W - 3.6*cm
styles = getSampleStyleSheet()
# Custom styles
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CoverTitle", fontSize=28, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=34)
cover_sub = S("CoverSub", fontSize=14, textColor=colors.HexColor("#ffd580"),
fontName="Helvetica-BoldOblique", alignment=TA_CENTER, leading=20)
cover_meta = S("CoverMeta", fontSize=10, textColor=colors.HexColor("#ccddee"),
fontName="Helvetica", alignment=TA_CENTER, leading=14)
sec_hd = S("SecHead", fontSize=13, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=17,
backColor=DARK_BLUE, leftIndent=-6, rightIndent=-6,
spaceBefore=10, spaceAfter=4,
borderPadding=(4,6,4,6))
sub_hd = S("SubHead", fontSize=11, textColor=DARK_BLUE,
fontName="Helvetica-Bold", alignment=TA_LEFT, leading=15,
spaceBefore=8, spaceAfter=3)
body = S("Body", fontSize=9.5, textColor=BLACK,
fontName="Helvetica", alignment=TA_JUSTIFY, leading=14,
spaceAfter=3)
bullet = S("Bullet", fontSize=9.5, textColor=BLACK,
fontName="Helvetica", leftIndent=14, firstLineIndent=-10,
leading=14, spaceAfter=2)
remember= S("Remember", fontSize=9, textColor=colors.HexColor("#7b3f00"),
fontName="Helvetica-BoldOblique", leading=13,
backColor=BOX_BG, borderPadding=(4,8,4,8),
leftIndent=8, rightIndent=8, spaceAfter=4)
warn = S("Warn", fontSize=9, textColor=colors.HexColor("#856404"),
fontName="Helvetica-Bold", leading=13,
backColor=WARN_BG, borderPadding=(4,8,4,8),
leftIndent=8, rightIndent=8, spaceAfter=4)
caption = S("Caption", fontSize=8, textColor=colors.HexColor("#444444"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11,
spaceAfter=6)
footer_s= S("Footer", fontSize=7.5, textColor=colors.HexColor("#888888"),
fontName="Helvetica", alignment=TA_CENTER)
# ── Helper builders ──────────────────────────────────────────────────────────
def section(title):
"""Dark blue full-width section header."""
tbl = Table([[Paragraph(title, sec_hd)]], colWidths=[CONTENT_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("ROUNDEDCORNERS", [4]),
]))
return tbl
def key_box(text, bg=LIGHT_BLUE, border=MID_BLUE):
tbl = Table([[Paragraph(text, body)]], colWidths=[CONTENT_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("BOX", (0,0),(-1,-1), 1, border),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("ROUNDEDCORNERS",[4]),
]))
return tbl
def img_block(fname, w_cm, cap):
path = os.path.join(ASSETS, fname)
try:
im = Image(path, width=w_cm*cm, kind='proportional')
im.hAlign = "CENTER"
return [im, Paragraph(cap, caption)]
except Exception as e:
return [Paragraph(f"[Image: {cap}]", caption)]
def bullet_list(items):
return [Paragraph(f"• {i}", bullet) for i in items]
def make_table(header, rows, col_widths, header_bg=DARK_BLUE, alt_bg=LIGHT_BLUE):
data = [header] + rows
n = len(data)
tbl = Table(data, colWidths=col_widths)
ts = [
("BACKGROUND", (0,0),(-1,0), header_bg),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("GRID", (0,0),(-1,-1), 0.4, GREY_LINE),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, alt_bg]),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("WORDWRAP", (0,0),(-1,-1), True),
]
tbl.setStyle(TableStyle(ts))
return tbl
# ── Cover page ───────────────────────────────────────────────────────────────
def cover_page():
elems = []
# top colour block
cover_tbl = Table(
[[
Paragraph("FOLIC ACID", cover_title),
],
[
Paragraph("Vitamin B9 / Folate", cover_sub),
],
[
Paragraph("Biochemistry Summary • NMC/CBME Curriculum", cover_meta),
],
[
Paragraph("Based on: Textbook of Biochemistry 5th Ed. – Rafi MD", cover_meta),
]],
colWidths=[CONTENT_W]
)
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARK_BLUE),
("LEFTPADDING", (0,0),(-1,-1), 20),
("RIGHTPADDING", (0,0),(-1,-1), 20),
("TOPPADDING", (0,0),(0,0), 30),
("BOTTOMPADDING", (0,3),(-1,-1), 30),
("TOPPADDING", (0,1),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,2), 4),
]))
elems.append(cover_tbl)
elems.append(Spacer(1, 0.5*cm))
# quick-reference highlight strip
qr = [
["TOPIC", "KEY FACT"],
["Active form", "Tetrahydrofolate (THF)"],
["Main function", "One-carbon (1C) unit transfer"],
["Best dietary source", "Green leafy vegetables"],
["Deficiency hallmark", "Megaloblastic (macrocytic) anemia"],
["Unique: NO neurological deficit", "Unlike Vitamin B12 deficiency"],
["NTD prevention dose", "400 µg/day before conception"],
]
qr_tbl = Table(qr, colWidths=[CONTENT_W*0.48, CONTENT_W*0.52])
qr_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), ACCENT),
("TEXTCOLOR", (0,0),(-1,0), WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("GRID", (0,0),(-1,-1), 0.5, GREY_LINE),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE, BOX_BG]),
("LEFTPADDING", (0,0),(-1,-1), 8),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING",(0,0),(-1,-1), 4),
]))
elems.append(qr_tbl)
elems.append(Spacer(1, 0.4*cm))
# anemia classification diagram
elems += img_block("anemia_classification.png", 8,
"Fig 1. Classification of Nutritional Anemias by RBC size (MCV)\n"
"Source: Lippincott Illustrated Reviews – Biochemistry 8th Ed.")
elems.append(PageBreak())
return elems
# ── Build story ──────────────────────────────────────────────────────────────
story = []
story += cover_page()
# ── 1. Chemistry & Forms ─────────────────────────────────────────────────────
story.append(section("1. Chemistry & Forms of Folic Acid"))
story.append(Spacer(1,4))
story.append(Paragraph(
"Folic acid (pteroylmonoglutamic acid) is a water-soluble B-complex vitamin. "
"It consists of three components:", body))
story += bullet_list([
"<b>Pteridine ring</b> – bicyclic nitrogen-containing ring",
"<b>Para-aminobenzoic acid (PABA)</b> – middle bridge",
"<b>Glutamic acid</b> – 1 residue in synthetic folic acid; up to 7 in dietary folates (polyglutamates)",
])
story.append(Spacer(1, 6))
forms_header = [
Paragraph("<b>Form</b>", body),
Paragraph("<b>Description</b>", body),
Paragraph("<b>Note</b>", body),
]
forms_rows = [
[Paragraph("Folic acid", body),
Paragraph("Synthetic oxidised form", body),
Paragraph("Supplements & fortified foods", body)],
[Paragraph("Dietary folate", body),
Paragraph("Natural polyglutamate form", body),
Paragraph("Food sources; heat-labile", body)],
[Paragraph("Dihydrofolate (DHF)", body),
Paragraph("Partially reduced intermediate", body),
Paragraph("Product of thymidylate synthase rxn", body)],
[Paragraph("<b>Tetrahydrofolate (THF)</b>", body),
Paragraph("<b>Active coenzyme form</b>", body),
Paragraph("Produced by DHFR; carries 1C units", body)],
[Paragraph("N⁵-methyl THF", body),
Paragraph("Main circulating blood form", body),
Paragraph("Donates –CH₃ to homocysteine (needs B12)", body)],
[Paragraph("N⁵,N¹⁰-methylene THF", body),
Paragraph("One-carbon donor for DNA synthesis", body),
Paragraph("Donates –CH₂ for TMP synthesis", body)],
[Paragraph("Folinic acid (5-formyl THF / Leucovorin)", body),
Paragraph("Stable pharmaceutical form", body),
Paragraph("Rescues cells after methotrexate toxicity", body)],
]
story.append(make_table(forms_header, forms_rows,
[CONTENT_W*0.25, CONTENT_W*0.35, CONTENT_W*0.40]))
story.append(Spacer(1, 6))
story.append(key_box(
"⬛ <b>Conversion:</b> Folic acid →<sup>(DHFR)</sup>→ DHF →<sup>(DHFR)</sup>→ <b>THF (active)</b> "
"| DHFR = dihydrofolate reductase (target of methotrexate & trimethoprim)",
bg=LIGHT_BLUE, border=MID_BLUE))
story.append(Spacer(1, 8))
# ── 2. Sources ───────────────────────────────────────────────────────────────
story.append(section("2. Dietary Sources"))
story.append(Spacer(1,4))
src_header = [Paragraph("<b>Source Type</b>", body), Paragraph("<b>Examples</b>", body),
Paragraph("<b>Folate Content</b>", body)]
src_rows = [
[Paragraph("Green leafy vegetables", body),
Paragraph("Spinach, cabbage, broccoli, fenugreek, lettuce", body),
Paragraph("⭐ Best natural source", body)],
[Paragraph("Organ meats", body),
Paragraph("Liver, kidney", body),
Paragraph("Very high", body)],
[Paragraph("Legumes", body),
Paragraph("Lentils, beans, chickpeas, peanuts", body),
Paragraph("High", body)],
[Paragraph("Fruits", body),
Paragraph("Citrus fruits, oranges, bananas", body),
Paragraph("Moderate", body)],
[Paragraph("Dairy / Eggs", body),
Paragraph("Milk, eggs", body),
Paragraph("Moderate", body)],
[Paragraph("Fortified grains ★", body),
Paragraph("Bread, cereals, pasta, rice (FDA-mandated 1998)", body),
Paragraph("Synthetic folic acid added", body)],
]
story.append(make_table(src_header, src_rows,
[CONTENT_W*0.28, CONTENT_W*0.45, CONTENT_W*0.27]))
story.append(Spacer(1,4))
story.append(key_box(
"⚠️ <b>Remember:</b> Folate is <b>heat-labile</b>. Prolonged cooking destroys significant folate. "
"Prefer lightly cooked or raw vegetables to preserve folate content.",
bg=WARN_BG, border=WARN_BORDER))
story.append(Spacer(1, 8))
# ── 3. Biochemical Function ──────────────────────────────────────────────────
story.append(section("3. Biochemical Functions – One-Carbon (1C) Metabolism"))
story.append(Spacer(1,4))
story.append(Paragraph(
"THF acts as a <b>carrier of one-carbon units</b> (–CH₃, –CHO, –CH₂–) in key biosynthetic reactions:", body))
story.append(Spacer(1,4))
fn_header = [Paragraph("<b>Reaction</b>", body), Paragraph("<b>THF Form Used</b>", body),
Paragraph("<b>Product / Significance</b>", body)]
fn_rows = [
[Paragraph("Purine synthesis", body),
Paragraph("N¹⁰-formyl THF", body),
Paragraph("C-2 and C-8 of purine ring; essential for DNA/RNA", body)],
[Paragraph("TMP synthesis (DNA)", body),
Paragraph("N⁵,N¹⁰-methylene THF", body),
Paragraph("Thymidine monophosphate (TMP/dTMP) for DNA; inhibited by methotrexate", body)],
[Paragraph("Serine ↔ Glycine", body),
Paragraph("N⁵,N¹⁰-methylene THF", body),
Paragraph("Amino acid interconversion; main 1C donor", body)],
[Paragraph("Methionine synthesis", body),
Paragraph("N⁵-methyl THF", body),
Paragraph("Homocysteine → Methionine (requires Vit B₁₂)", body)],
[Paragraph("Histidine catabolism", body),
Paragraph("THF accepts formimino group", body),
Paragraph("FIGLU → Glutamate; FIGLU excreted in deficiency (diagnostic test)", body)],
]
story.append(make_table(fn_header, fn_rows,
[CONTENT_W*0.25, CONTENT_W*0.28, CONTENT_W*0.47]))
story.append(Spacer(1, 6))
# one-carbon metabolism diagram
story += img_block("one_carbon_metabolism.png", 14,
"Fig 2. Sources and utilisation of one-carbon substituted folates\n"
"Source: Harper's Illustrated Biochemistry 32nd Ed.")
story.append(Spacer(1, 8))
# ── 4. RDA ───────────────────────────────────────────────────────────────────
story.append(section("4. Daily Requirements (RDA)"))
story.append(Spacer(1,4))
rda_header = [Paragraph("<b>Group</b>", body), Paragraph("<b>RDA</b>", body),
Paragraph("<b>Rationale</b>", body)]
rda_rows = [
[Paragraph("Adult male & female", body), Paragraph("200–400 µg/day", body),
Paragraph("Maintenance of normal 1C metabolism", body)],
[Paragraph("Pregnancy", body), Paragraph("<b>400–800 µg/day</b>", body),
Paragraph("Prevention of neural tube defects; increased cell division", body)],
[Paragraph("Lactation", body), Paragraph("300–500 µg/day", body),
Paragraph("Transfer in breast milk", body)],
[Paragraph("Previous NTD pregnancy", body), Paragraph("<b>4 mg/day (4000 µg)</b>", body),
Paragraph("High-risk; supplementation from 1 month pre-conception", body)],
]
story.append(make_table(rda_header, rda_rows,
[CONTENT_W*0.3, CONTENT_W*0.22, CONTENT_W*0.48]))
story.append(Spacer(1, 8))
# ── 5. Deficiency – Causes ───────────────────────────────────────────────────
story.append(section("5. Folic Acid Deficiency – Causes"))
story.append(Spacer(1,4))
cause_header = [Paragraph("<b>#</b>", body), Paragraph("<b>Cause</b>", body),
Paragraph("<b>Examples / Mechanism</b>", body)]
cause_rows = [
[Paragraph("1", body), Paragraph("Inadequate dietary intake", body),
Paragraph("Poor diet, alcoholism, elderly, food insecurity", body)],
[Paragraph("2", body), Paragraph("Increased demand", body),
Paragraph("Pregnancy, lactation, haemolytic anaemias, malignancy, rapid growth", body)],
[Paragraph("3", body), Paragraph("Malabsorption", body),
Paragraph("Coeliac disease, Crohn's disease, tropical sprue (upper small intestine affected)", body)],
[Paragraph("4", body), Paragraph("Drug-induced", body),
Paragraph("Methotrexate / Trimethoprim → inhibit DHFR\n"
"Phenytoin, phenobarbital → impair absorption\n"
"Oral contraceptives → impair absorption\n"
"Azathioprine, Zidovudine → inhibit DNA synthesis", body)],
[Paragraph("5", body), Paragraph("Vitamin B₁₂ deficiency", body),
Paragraph('"Folate Trap" – see Section 7', body)],
]
story.append(make_table(cause_header, cause_rows,
[CONTENT_W*0.05, CONTENT_W*0.28, CONTENT_W*0.67]))
story.append(Spacer(1, 6))
# causes diagram
story += img_block("folate_deficiency_causes.png", 7,
"Fig 3. Causes and consequences of folic acid depletion → Megaloblastic Anaemia\n"
"Source: Lippincott Illustrated Reviews – Pharmacology")
story.append(Spacer(1, 8))
# ── 6. Deficiency – Symptoms ─────────────────────────────────────────────────
story.append(section("6. Deficiency – Clinical Features (Symptoms)"))
story.append(Spacer(1,4))
story.append(Paragraph("<b>A. Megaloblastic (Macrocytic) Anaemia</b> — Hallmark", sub_hd))
story += bullet_list([
"↓ TMP synthesis → ↓ DNA replication → RBC precursors cannot divide → <b>megaloblasts</b> accumulate in bone marrow",
"<b>MCV > 100 fL</b> (macrocytic anaemia)",
"<b>Hypersegmented neutrophils</b> on peripheral blood smear (≥5 lobes, or ≥1 six-lobed neutrophil)",
"Symptoms: <b>fatigue, weakness, pallor, breathlessness, palpitations, dizziness</b>",
"Onset is insidious (weeks to months)",
])
story.append(Spacer(1, 4))
# bone marrow image
story += img_block("bone_marrow.png", 10,
"Fig 4. Bone marrow histology: Normal (left) vs. Megaloblastic/Folate-deficient (right)\n"
"Source: Lippincott Illustrated Reviews – Biochemistry 8th Ed.")
story.append(Spacer(1, 6))
story.append(Paragraph("<b>B. Gastrointestinal Manifestations</b>", sub_hd))
story += bullet_list([
"<b>Glossitis</b> – sore, smooth, red, beefy tongue",
"<b>Stomatitis</b> – painful mouth ulcers",
"Anorexia, nausea, diarrhoea",
"(GI lining cells also divide rapidly → affected early)",
])
story.append(Spacer(1, 4))
story.append(Paragraph("<b>C. Neural Tube Defects (in pregnancy)</b>", sub_hd))
story += bullet_list([
"<b>Spina bifida</b> – failure of spinal cord/vertebral arch closure",
"<b>Anencephaly</b> – absence of brain development (lethal)",
"Both are preventable with <b>periconceptional folic acid supplementation</b>",
])
story.append(Spacer(1, 4))
story.append(Paragraph("<b>D. Hyperhomocysteinaemia</b>", sub_hd))
story += bullet_list([
"↓ Folate → ↓ remethylation of homocysteine → <b>↑ plasma homocysteine</b>",
"Risk factor for: <b>atherosclerosis, coronary artery disease, thrombosis, hypertension</b>",
])
story.append(Spacer(1, 6))
story.append(key_box(
"⭐ <b>KEY EXAM POINT – NO Neurological Symptoms:</b> "
"Unlike Vitamin B₁₂ deficiency, folic acid deficiency does <b>NOT</b> cause "
"subacute combined degeneration of the spinal cord. There is no peripheral neuropathy, "
"no ataxia, no dementia. This is a classic distinguishing feature in MCQs.",
bg=GREEN_BG, border=colors.HexColor("#388e3c")))
story.append(Spacer(1, 8))
# ── 7. Folate Trap ───────────────────────────────────────────────────────────
story.append(section("7. The 'Folate Trap' (Vitamin B₁₂ Connection)"))
story.append(Spacer(1,4))
story += bullet_list([
"Circulating form of folate = <b>N⁵-methyl THF</b>",
"To release THF, the methyl group must be transferred to homocysteine → methionine",
"This reaction is catalysed by <b>methionine synthase</b>, which requires <b>Vitamin B₁₂</b> as cofactor",
"In <b>B₁₂ deficiency</b> → methionine synthase is non-functional",
"→ Folate remains trapped as N⁵-methyl THF and <b>cannot be converted back to free THF</b>",
"→ <b>Functional folate deficiency</b> develops even with normal dietary folate intake",
"→ Result: <b>Megaloblastic anaemia in Vitamin B₁₂ deficiency</b> (identical blood picture to folate deficiency)",
])
story.append(Spacer(1, 6))
story.append(key_box(
"⚠️ <b>Clinical Warning:</b> Treating a B₁₂-deficient patient with folic acid alone "
"will correct the megaloblastic anaemia (masking the deficiency) but will allow "
"<b>neurological damage to progress silently and irreversibly</b>. "
"Always rule out B₁₂ deficiency before prescribing folic acid alone.",
bg=WARN_BG, border=WARN_BORDER))
story.append(Spacer(1, 8))
# ── 8. Drug Targets ──────────────────────────────────────────────────────────
story.append(section("8. Drug Inhibitors of Folate Metabolism"))
story.append(Spacer(1,4))
drug_header = [Paragraph("<b>Drug</b>", body), Paragraph("<b>Target</b>", body),
Paragraph("<b>Use</b>", body), Paragraph("<b>Note</b>", body)]
drug_rows = [
[Paragraph("Methotrexate", body), Paragraph("Human DHFR", body),
Paragraph("Cancer chemotherapy, RA, psoriasis", body),
Paragraph("Leucovorin (folinic acid) used as rescue", body)],
[Paragraph("Trimethoprim", body), Paragraph("Bacterial DHFR", body),
Paragraph("Antibiotic (UTI, PCP)", body),
Paragraph("Selective – higher affinity for bacterial enzyme", body)],
[Paragraph("Pyrimethamine", body), Paragraph("Parasite DHFR", body),
Paragraph("Antimalarial, toxoplasmosis", body),
Paragraph("Combined with sulfadoxine", body)],
[Paragraph("Leucovorin\n(folinic acid)", body), Paragraph("Bypasses DHFR", body),
Paragraph("Rescue after methotrexate", body),
Paragraph("5-formyl THF – directly active; does not need DHFR", body)],
]
story.append(make_table(drug_header, drug_rows,
[CONTENT_W*0.2, CONTENT_W*0.2, CONTENT_W*0.3, CONTENT_W*0.3]))
story.append(Spacer(1, 8))
# ── 9. FIGLU Test ────────────────────────────────────────────────────────────
story.append(section("9. FIGLU Excretion Test (Diagnostic Test for Folate Deficiency)"))
story.append(Spacer(1,4))
story += bullet_list([
"Histidine is catabolised via <b>formiminoglutamate (FIGLU)</b>",
"THF accepts the formimino group from FIGLU → Glutamate",
"In folate deficiency → THF unavailable → <b>FIGLU accumulates and is excreted in urine</b>",
"Test: Patient given oral histidine load → urine collected → FIGLU measured",
"<b>Increased urinary FIGLU = positive test = folate deficiency</b>",
])
story.append(Spacer(1, 8))
# ── 10. Clinical Correlations ────────────────────────────────────────────────
story.append(section("10. Clinical Correlations (Rafi-style)"))
story.append(Spacer(1,4))
cc_items = [
("<b>Folic acid in pregnancy:</b>",
"All women of childbearing age should take 400 µg/day folic acid starting at least "
"1 month BEFORE conception and through the first trimester. If a previous NTD-affected "
"pregnancy: 4 mg/day."),
("<b>Alcohol and folate:</b>",
"Alcoholism → ↓ dietary intake + ↓ intestinal absorption + ↓ hepatic storage + "
"↑ renal excretion → commonest cause of folate deficiency in developed countries."),
("<b>Folate and cancer:</b>",
"Low folate → impaired methylation of CpG islands in DNA → may increase risk of "
"colorectal and other cancers. However, paradoxically, high folate may accelerate "
"transformation of existing preneoplastic polyps."),
("<b>Masking B₁₂ deficiency:</b>",
"Folic acid corrects megaloblastic anaemia in B₁₂ deficiency but does NOT prevent "
"irreversible neurological damage (subacute combined degeneration). Always check B₁₂ first."),
("<b>Anticonvulsants and folate:</b>",
"Phenytoin and phenobarbital interfere with folate absorption and may precipitate "
"deficiency in epileptic patients on long-term therapy."),
]
for title_text, detail_text in cc_items:
row_data = [[
Paragraph(title_text, body),
Paragraph(detail_text, body)
]]
cc_tbl = Table(row_data, colWidths=[CONTENT_W*0.3, CONTENT_W*0.7])
cc_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,-1), LIGHT_BLUE),
("BACKGROUND", (1,0),(1,-1), WHITE),
("BOX", (0,0),(-1,-1), 0.5, MID_BLUE),
("INNERGRID", (0,0),(-1,-1), 0.3, GREY_LINE),
("LEFTPADDING", (0,0),(-1,-1), 8),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(cc_tbl)
story.append(Spacer(1, 3))
story.append(Spacer(1, 8))
# ── 11. Quick Revision Box ───────────────────────────────────────────────────
story.append(section("11. Quick Revision – High-Yield MCQ Points"))
story.append(Spacer(1,4))
hiyield = [
"Active form of folic acid = <b>Tetrahydrofolate (THF)</b>",
"Enzyme that converts folic acid → THF = <b>Dihydrofolate reductase (DHFR)</b>",
"One-carbon donor for TMP synthesis = <b>N⁵,N¹⁰-methylene THF</b>",
"Folate deficiency → <b>Macrocytic megaloblastic anaemia</b> (MCV > 100)",
"Blood smear finding = <b>Hypersegmented neutrophils</b>",
"NO neurological symptoms in folate deficiency (unlike B₁₂)",
"Folate trap = B₁₂ deficiency → folate stuck as N⁵-methyl THF",
"Drug that inhibits DHFR = <b>Methotrexate</b>; antidote = <b>Leucovorin</b>",
"Diagnostic test = <b>FIGLU excretion test</b> (↑ urinary FIGLU after histidine load)",
"NTD prevention: <b>400 µg/day folic acid</b> periconceptionally",
"Best dietary source = <b>green leafy vegetables</b>; destroyed by cooking",
]
for pt in hiyield:
row_tbl = Table([[Paragraph(f"✔ {pt}", body)]], colWidths=[CONTENT_W])
row_tbl.setStyle(TableStyle([
("LEFTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING",(0,0),(-1,-1), 3),
("ROWBACKGROUNDS",(0,0),(-1,-1), [colors.HexColor("#f0f7ff"), WHITE]),
("BOX", (0,0),(-1,-1), 0.3, GREY_LINE),
]))
story.append(row_tbl)
story.append(Spacer(1, 10))
story.append(HRFlowable(width="100%", thickness=1, color=GREY_LINE))
story.append(Spacer(1, 4))
story.append(Paragraph(
"Summary prepared from: Textbook of Biochemistry 5th Ed. – Rafi MD (Universities Press, NMC/CBME) | "
"Lippincott Illustrated Reviews: Biochemistry 8th Ed. | Harper's Illustrated Biochemistry 32nd Ed.",
footer_s))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUT}")
cd /tmp/workspace/folic-acid-pdf && python generate_pdf.py 2>&1
kind='proportional' parameter needs both width and height. Let me fix the image block function.~/folic-acid-pdf/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/folic-acid-pdf/generate_pdf.py'
cd /tmp/workspace/folic-acid-pdf && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/folic-acid-pdf/Folic_Acid_Summary_Rafi.pdf
Folic Acid Summary Rafi
PDF Document · PDF
| Section | Content |
|---|---|
| Cover page | Title banner + Quick-reference table + Anemia classification diagram |
| 1. Chemistry & Forms | All 7 forms of folate in a colour table with DHFR conversion pathway |
| 2. Dietary Sources | Table of natural & fortified sources; heat-lability warning box |
| 3. Biochemical Functions | One-carbon metabolism table + Fig 2 pathway diagram (THF forms) |
| 4. RDA | Adult / pregnancy / lactation / NTD-history doses |
| 5. Deficiency Causes | Numbered table (diet, demand, malabsorption, drugs, folate trap) + Fig 3 causes flowchart |
| 6. Clinical Features | Megaloblastic anaemia + Fig 4 bone marrow histology + GI + NTD + Hyperhomocysteinaemia + NO neuro symptoms key point box |
| 7. Folate Trap | B12 connection explained with clinical warning box |
| 8. Drug Inhibitors | Methotrexate / Trimethoprim / Pyrimethamine / Leucovorin table |
| 9. FIGLU Test | Diagnostic test for folate deficiency |
| 10. Clinical Correlations | 5 Rafi-style clinical boxes |
| 11. Quick Revision | 11 high-yield MCQ bullet points |
Construct median nerve answer according to vishram singh
median nerve anatomy origin course branches hand forearm

This clinical photograph displays a cadaveric dissection of a human right upper limb, focusing on an anatomical variation of the arterial supply in the forearm. The primary structure highlighted is a brachioradial artery (labeled '1'), which is shown being manipulated by surgical forceps at its proximal origin. The artery follows a superficial course along the anterior compartment of the forearm. During its descent, it gives off a small muscular branch (labeled '2'). Distally, near the wrist region, the vessel bifurcates into two distinct terminal branches (labeled '3'), which correspond to the ramus carpalis palmaris and the ramus palmaris superficialis. This image is an educational tool for gross anatomy and vascular surgery, illustrating a high-origin radial artery variation where the vessel arises from the brachial artery and descends superficially to the median nerve. Such variations are clinically significant for arterial cannulation, flap harvesting, and avoiding iatrogenic injury during orthopedic or plastic surgery procedures in the forearm and hand.

Anatomical diagram of the human hand and distal forearm in a palmar view, illustrating peripheral nerve anatomy and muscle transposition for pronator quadratus opponensplasty. The diagram features color-coded structures overlaid on a skeletal and soft tissue outline. Major peripheral nerves, including the median and ulnar nerves, are highlighted in yellow, showing their proximal courses and distal branching into digital nerves. The recipient anterior interosseous nerve (AIN) motor branch is highlighted in red, indicating its path toward the transposed muscle. The donor recurrent median nerve and donor deep ulnar nerve branches are highlighted in green, demonstrating potential donor sites for nerve coaptation to restore thenar function. The pronator quadratus muscle is shaded in red, shown in a transposed position toward the thumb (thenar eminence) to simulate its role as an opponens substitute. This illustration is designed for surgical planning in cases of chronic carpal tunnel syndrome or atrophic thenar muscle dysfunction, focusing on the spatial relationships required for effective nerve transfer and muscle mobilization.

A clinical photograph of the palmar aspect of a human hand and wrist, annotated to demonstrate the surface anatomy relevant to ultrasound-guided procedures of the carpal tunnel. The image identifies key anatomical landmarks for a median nerve block. Colored overlays depict the longitudinal course of three critical structures in the distal forearm: the palmaris longus tendon (orange box), the median nerve (yellow box), and the flexor carpi radialis tendon (red box). The spatial arrangement shows the median nerve situated between the more medial palmaris longus and the more lateral flexor carpi radialis. A pink horizontal box represents the transverse placement of an ultrasound probe proximal to the wrist crease, while a blue circle indicates the optimal needle insertion site on the radial aspect. This visual aid is designed for medical education regarding regional anesthesia and the diagnosis of carpal tunnel syndrome, emphasizing the surface projection of the median nerve in relation to palpable tendons.

Anatomical dissection of a left distal forearm and hand in anterior view, demonstrating a bifid median nerve (BMN) and a persistent median artery (PMA). The image illustrates the median nerve bifurcating into medial and lateral branches (indicated by yellow stars) proximal to the carpal tunnel. The persistent median artery (red arrow) is seen coursing centrally between these two nerve branches as it passes deep to the flexor retinaculum (blue circle) into the palm. Within the hand, the PMA follows a radial trajectory, contributing to an incomplete superficial palmar arch and supplying the thumb, index, and middle fingers. A palmar branch of the median nerve (green star) is also visible. This photograph highlights a significant anatomical variation where the PMA and BMN coexist, which is clinically relevant for procedures such as carpal tunnel release, as the presence of these structures increases the risk of inadvertent neurovascular injury.

This clinical photograph displays a specialized anatomical dissection of the human forearm in two panels (A and B), focusing on vascular and neural variations. Panel A shows a right forearm (R) demonstrating an antebrachial-type persistent median artery (PMAat). The PMA is seen in an anterior position relative to the median nerve superficial branch (MNSB). Key structures identified include the radial artery (RA), ulnar artery (UA), and the division of the median nerve (MN) into superficial and deep branches (MNDB). Panel B illustrates a left forearm (L) with a palmar-type persistent median artery (PMA). This dissection highlights the relationship between the PMA, the ulnar artery, and the anterior interosseous artery (AIA). The AIA is shown penetrating the deep muscle surface of the pronator quadratus (noted by a small asterisk). These images illustrate the surgical anatomy and common variations of the persistent median artery, which are clinically significant for hand surgeons, particularly concerning carpal tunnel syndrome and vascular procedures in the upper limb.

This clinical photograph displays a high-resolution cadaveric dissection of the ulnar nerve and its branching patterns within the hand, specifically focused on the distal forearm and palmar regions. The image serves as an anatomical diagram of the peripheral nervous system, illustrating the ulnar nerve bifurcating into its primary deep and superficial branches. Key anatomical landmarks identified through labeling include the cutaneous branch, the muscular branch to the palmaris brevis, and the medial palmar digital nerve to the 5th finger. Of particular educational significance is the visualization of the common palmar digital nerve to the 4th and 5th fingers and a notable anastomosis connecting the ulnar digital branches to the median nerve. This image is essential for understanding the neuroanatomy of the hand, Guyon's canal variations, and clinical scenarios involving ulnar nerve entrapment or surgical decompression. The content is suitable for medical students and surgical residents studying upper extremity anatomy and peripheral nerve variations.
median nerve carpal tunnel hand of benediction ape hand deformity

This clinical photograph displays the right hand of a patient, demonstrating a deficit in the digital pollicis pincer grasp. The hand is positioned on a blue sterile drape. Key findings include visible atrophy of the thenar eminence and a characteristic 'ape hand' deformity, where the thumb is adducted and lacks the ability to oppose the other digits effectively. The thumb and index finger are held in a restricted, partially flexed posture with limited range of motion. There is subtle discoloration and swelling noted at the base of the thumb and the distal aspect of the index finger, consistent with chronic median nerve compression. These findings are clinically relevant to Mucopolysaccharidosis (MPS) type 1, which often presents with carpal tunnel syndrome, joint stiffness, and secondary muscular amyotrophy. This image serves as a teaching tool for recognizing the musculoskeletal manifestations of lysosomal storage diseases and secondary median nerve dysfunction.

An intra-operative clinical photograph showing a neurolysis of the median nerve at the right wrist. The image reveals a longitudinal incision through the skin and subcutaneous tissue, held open by a metal retractor and forceps to provide a clear view of the carpal tunnel structures. The median nerve is visible as a central, cord-like structure with a glistening surface and longitudinal striations. A notable pathological finding is the constricted, shrunken appearance of the nerve distal to the transverse carpal ligament, exhibiting a distinct bluish-pale discoloration compared to the surrounding pinkish connective tissue. This finding is consistent with chronic compression and hourglass deformity often seen in severe carpal tunnel syndrome, specifically associated here with Mucopolysaccharidosis (MPS) Type 1. The anatomical region focuses on the volar aspect of the wrist and palm, demonstrating the surgical exposure and pathological nerve morphology for educational purposes in orthopedics, hand surgery, and pediatric metabolic diseases.

This clinical photograph captures an intraoperative view of a pediatric carpal tunnel release, highlighting severe median nerve compression. The open surgical field at the volar aspect of the wrist reveals a yellowish-white, cord-like median nerve. A hallmark 'hourglass' deformity is clearly visible, where the nerve exhibits a significant, localized narrowing (constriction) at the site of the former transverse carpal ligament, with proximal and distal swelling. The surrounding anatomy includes exposed flexor tendons and subcutaneous fat. Surgical instruments, including a multi-pronged rake retractor and forceps, are positioned to maintain the surgical window. Blue surgical marking ink is visible on the skin edges. The image serves as a classic educational example of chronic nerve entrapment pathology, demonstrating the macroscopic morphological changes resulting from prolonged mechanical compression within the carpal tunnel.

This clinical photograph captures an intraoperative view of a carpal tunnel decompression surgery, focusing on the median nerve. The image illustrates classic pathological changes associated with chronic nerve compression: a proximal bulbous swelling (pseudoneuroma) of the nerve followed by significant distal thinning (hourglass deformity) beneath the site of the flexor retinaculum. The median nerve appears pale and glistening, while the surrounding surgical field shows signs of inflammation, hemorrhage, and extensive fibrosis. Retractors are positioned to expose the nerve and underlying flexor tendons, which appear infiltrated by scar tissue and thickened subsynovial connective tissue. This visual serves as an educational example of severe carpal tunnel syndrome and the anatomical landmarks encountered during surgical release, including the relationship between the nerve, tendons, and surrounding fibrotic changes.


| Branch | Muscles Supplied |
|---|---|
| Branches near elbow | Pronator teres, Flexor carpi radialis, Palmaris longus, Flexor digitorum superficialis |
| Anterior interosseous nerve (AIN) - largest branch | Flexor pollicis longus, Lateral half of flexor digitorum profundus (index + middle fingers), Pronator quadratus |
| Palmar cutaneous branch (just proximal to wrist) | Skin over base and central palm (NOT affected in CTS) |
| Branch | Supply |
|---|---|
| Recurrent (thenar) branch | Abductor pollicis brevis, Opponens pollicis, Flexor pollicis brevis (superficial head) |
| Palmar digital nerves | Skin of palmar surface of lateral 3½ digits + dorsal nail beds of same; Lateral two lumbrical muscles |
| Level of Injury | Deformity / Loss |
|---|---|
| At/above elbow | "Hand of Benediction" + all forearm flexors lost except FCU and medial FDP |
| At wrist (in/above carpal tunnel) | "Ape hand" (thenar wasting + adducted thumb) - forearm muscles spared |
| Carpal Tunnel Syndrome (CTS) | Palmar cutaneous branch spared (central palm sensation preserved), thenar wasting, numbness in lateral 3½ digits |

Create a PDF summary of the median nerve with anatomy diagrams
mkdir -p /tmp/workspace/median-nerve-pdf/assets && cd /tmp/workspace/median-nerve-pdf/assets && curl -s -o forearm_nerves.png "https://cdn.orris.care/cdss_images/393a0f391a06be8521caf4466389fe8d8541a12da755cd90896d2f5b1eecf494.png" && curl -s -o hand_median.png "https://cdn.orris.care/cdss_images/2955c2dad2037ab7ca6f9789504c6aafbe335a8bad0ac7e1a727b4015b802333.png" && curl -s -o ape_hand.jpg "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0cd2cf3757620c74e9075e3ebafe4423861eaf2bfe1568a92f5bf12fa451e490.jpg" && curl -s -o carpal_tunnel.jpg "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_c551ac089c5ebe823be89e3e3e791afda08529ebb6a8b73086959f267e51cd3d.jpg" && ls -lh
~/median-nerve-pdf/generate_pdf.py
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, Image, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from PIL import Image as PILImage
import os
ASSETS = "/tmp/workspace/median-nerve-pdf/assets"
OUT = "/tmp/workspace/median-nerve-pdf/Median_Nerve_Summary.pdf"
W, H = A4
LM = RM = 1.8 * cm
CONTENT_W = W - LM - RM
# ── Palette ──────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0d2b4e")
DARK_BLUE = colors.HexColor("#1a4a7a")
MID_BLUE = colors.HexColor("#2e6da4")
LIGHT_BLUE = colors.HexColor("#d6e8f7")
SKY = colors.HexColor("#eaf4fb")
ORANGE = colors.HexColor("#e07b00")
GOLD = colors.HexColor("#ffd580")
WARN_BG = colors.HexColor("#fff8e1")
WARN_BORDER = colors.HexColor("#f9a825")
GREEN_BG = colors.HexColor("#e8f5e9")
GREEN_BD = colors.HexColor("#388e3c")
RED_BG = colors.HexColor("#fce4ec")
RED_BD = colors.HexColor("#c62828")
GREY = colors.HexColor("#cccccc")
DARK_GREY = colors.HexColor("#444444")
WHITE = colors.white
BLACK = colors.black
# ── Styles ───────────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CoverTitle", fontSize=30, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=36)
cover_sub = S("CoverSub", fontSize=14, textColor=GOLD,
fontName="Helvetica-BoldOblique", alignment=TA_CENTER, leading=20)
cover_meta = S("CoverMeta", fontSize=9.5, textColor=colors.HexColor("#b0c8e8"),
fontName="Helvetica", alignment=TA_CENTER, leading=14)
sec_hd_s = S("SecHd", fontSize=12, textColor=WHITE,
fontName="Helvetica-Bold", leading=16)
sub_hd_s = S("SubHd", fontSize=10.5, textColor=DARK_BLUE,
fontName="Helvetica-Bold", leading=15, spaceBefore=6, spaceAfter=2)
body_s = S("Body", fontSize=9.5, textColor=BLACK,
fontName="Helvetica", leading=14, spaceAfter=2, alignment=TA_JUSTIFY)
bullet_s = S("Bul", fontSize=9.5, textColor=BLACK,
fontName="Helvetica", leading=14, spaceAfter=2,
leftIndent=14, firstLineIndent=-10)
caption_s= S("Cap", fontSize=8, textColor=DARK_GREY,
fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11, spaceAfter=5)
footer_s = S("Foot", fontSize=7.5, textColor=colors.HexColor("#888888"),
fontName="Helvetica", alignment=TA_CENTER)
tag_s = S("Tag", fontSize=8.5, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER)
key_s = S("Key", fontSize=9, textColor=colors.HexColor("#1a3a5c"),
fontName="Helvetica-Bold", leading=13, alignment=TA_JUSTIFY)
# ── Helpers ──────────────────────────────────────────────────────────────────
def section(title, bg=DARK_BLUE):
tbl = Table([[Paragraph(title, sec_hd_s)]], colWidths=[CONTENT_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
]))
return tbl
def box(text, bg=SKY, border=MID_BLUE, style=None):
st = style or body_s
tbl = Table([[Paragraph(text, st)]], colWidths=[CONTENT_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("BOX", (0,0),(-1,-1), 1, border),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
]))
return tbl
def bullets(items, style=bullet_s):
return [Paragraph(f"• {i}", style) for i in items]
def img(fname, w_cm, cap=""):
path = os.path.join(ASSETS, fname)
try:
with PILImage.open(path) as p:
iw, ih = p.size
tw = w_cm * cm
th = tw * ih / iw
im = Image(path, width=tw, height=th)
im.hAlign = "CENTER"
elems = [im]
if cap:
elems.append(Paragraph(cap, caption_s))
return elems
except Exception as e:
return [Paragraph(f"[Image: {fname}] ({e})", caption_s)]
def two_col_img(f1, w1, cap1, f2, w2, cap2):
"""Side-by-side images in a two-column table."""
col1 = img(f1, w1, cap1)
col2 = img(f2, w2, cap2)
from reportlab.platypus import KeepInFrame
half = CONTENT_W / 2 - 4
tbl = Table([[col1, col2]], colWidths=[half, half])
tbl.setStyle(TableStyle([
("VALIGN", (0,0),(-1,-1), "TOP"),
("ALIGN", (0,0),(-1,-1), "CENTER"),
("LEFTPADDING", (0,0),(-1,-1), 2),
("RIGHTPADDING", (0,0),(-1,-1), 2),
]))
return tbl
def make_table(header, rows, widths, hbg=DARK_BLUE, alt=LIGHT_BLUE):
data = [header] + rows
tbl = Table(data, colWidths=widths, repeatRows=1)
ts = [
("BACKGROUND", (0,0),(-1, 0), hbg),
("TEXTCOLOR", (0,0),(-1, 0), WHITE),
("FONTNAME", (0,0),(-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("GRID", (0,0),(-1,-1), 0.4, GREY),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, alt]),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("VALIGN", (0,0),(-1,-1), "TOP"),
]
tbl.setStyle(TableStyle(ts))
return tbl
def sp(h=6): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=GREY, spaceAfter=4)
# ── Document ─────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUT, pagesize=A4,
leftMargin=LM, rightMargin=RM,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="Median Nerve – Anatomy Summary",
author="Vishram Singh Style | Gray's Anatomy for Students"
)
story = []
# ═══════════════════════════════════════════════════════════════════
# COVER
# ═══════════════════════════════════════════════════════════════════
def cover():
elems = []
# Title block
cv = Table(
[[Paragraph("MEDIAN NERVE", cover_title)],
[Paragraph("Complete Anatomy Summary", cover_sub)],
[Paragraph("Vishram Singh Style • Regional Anatomy Format", cover_meta)],
[Paragraph("Based on: Gray's Anatomy for Students | Bradley & Daroff's Neurology", cover_meta)]],
colWidths=[CONTENT_W])
cv.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), NAVY),
("LEFTPADDING", (0,0),(-1,-1), 20),
("RIGHTPADDING", (0,0),(-1,-1), 20),
("TOPPADDING", (0,0),(0,0), 28),
("BOTTOMPADDING", (0,3),(-1,-1), 28),
("TOPPADDING", (0,1),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,2), 5),
]))
elems.append(cv)
elems.append(sp(10))
# Quick-ref strip
qr = [
[Paragraph("<b>FEATURE</b>", tag_s), Paragraph("<b>DETAIL</b>", tag_s)],
[Paragraph("Root value", body_s), Paragraph("<b>C6, C7, C8, T1</b>", body_s)],
[Paragraph("Origin", body_s), Paragraph("Lateral + Medial cords of brachial plexus", body_s)],
[Paragraph("Type", body_s), Paragraph("Mixed (motor + sensory)", body_s)],
[Paragraph("Branches in arm", body_s), Paragraph("<b>None</b> (occasionally tiny branch to pronator teres)", body_s)],
[Paragraph("Key branch in forearm", body_s), Paragraph("Anterior Interosseous Nerve (AIN)", body_s)],
[Paragraph("Enters palm via", body_s), Paragraph("<b>Carpal tunnel</b> (deep to flexor retinaculum)", body_s)],
[Paragraph("Intrinsic muscles (LOAF)", body_s), Paragraph("Lumbricals 1&2, Opponens pollicis, Abductor pollicis brevis, Flexor pollicis brevis", body_s)],
[Paragraph("High injury deformity", body_s), Paragraph("<b>Hand of Benediction</b>", body_s)],
[Paragraph("Low injury deformity", body_s), Paragraph("<b>Ape Hand</b>", body_s)],
]
qr_tbl = Table(qr, colWidths=[CONTENT_W*0.35, CONTENT_W*0.65])
qr_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1, 0), ORANGE),
("TEXTCOLOR", (0,0),(-1, 0), WHITE),
("FONTNAME", (0,0),(-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 8.5),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("GRID", (0,0),(-1,-1), 0.4, GREY),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, SKY]),
("LEFTPADDING", (0,0),(-1,-1), 7),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
elems.append(qr_tbl)
elems.append(sp(10))
# side-by-side diagrams on cover
tbl = two_col_img(
"forearm_nerves.png", 7.5,
"Fig 1. Nerves of the Anterior Forearm\n(Gray's Anatomy for Students)",
"hand_median.png", 7.5,
"Fig 2. Median Nerve Branches in the Hand – Palmar & Dorsal cutaneous distribution\n(Gray's Anatomy for Students)"
)
elems.append(tbl)
elems.append(PageBreak())
return elems
story += cover()
# ═══════════════════════════════════════════════════════════════════
# 1. ROOT VALUE & ORIGIN
# ═══════════════════════════════════════════════════════════════════
story.append(section("1. Root Value & Origin"))
story.append(sp(5))
story.append(Paragraph("<b>Root Value:</b> C6, C7, C8, T1", body_s))
story.append(sp(4))
origin_rows = [
[Paragraph("<b>Root</b>", body_s), Paragraph("<b>Cord</b>", body_s), Paragraph("<b>Contribution</b>", body_s)],
[Paragraph("C6, C7", body_s), Paragraph("Lateral cord", body_s), Paragraph("Lateral root of median nerve", body_s)],
[Paragraph("C8, T1", body_s), Paragraph("Medial cord", body_s), Paragraph("Medial root of median nerve", body_s)],
]
story.append(make_table(origin_rows[0:1], origin_rows[1:],
[CONTENT_W*0.2, CONTENT_W*0.3, CONTENT_W*0.5]))
story.append(sp(5))
story.append(box(
"⚠️ The two roots unite in front of the <b>3rd part of the axillary artery</b>, "
"forming an inverted 'V' or 'M' shape. This is a common exam question.",
bg=WARN_BG, border=WARN_BORDER))
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 2. COURSE & RELATIONS
# ═══════════════════════════════════════════════════════════════════
story.append(section("2. Course & Relations (Region by Region)"))
story.append(sp(5))
# Axilla
story.append(Paragraph("<b>A. In the Axilla</b>", sub_hd_s))
story += bullets([
"Formed in front of the axillary artery",
"Runs along the lateral wall of the axilla",
"<b>No branches</b> in the axilla",
])
story.append(sp(6))
# Arm
story.append(Paragraph("<b>B. In the Arm</b>", sub_hd_s))
story += bullets([
"Enters the arm at the inferior margin of <b>teres major</b>",
"Runs in the <b>anterior compartment</b> along the medial side",
"Closely related to the <b>brachial artery</b> throughout:",
])
rel_rows = [
[Paragraph("<b>Region</b>", body_s), Paragraph("<b>Relation to Brachial Artery</b>", body_s)],
[Paragraph("Proximal arm", body_s), Paragraph("Lateral to the brachial artery", body_s)],
[Paragraph("Distal arm / elbow", body_s), Paragraph("Crosses anterior → lies medial to the artery", body_s)],
]
story.append(make_table(rel_rows[0:1], rel_rows[1:],
[CONTENT_W*0.35, CONTENT_W*0.65]))
story += bullets([
"Passes <b>anterior to the elbow joint</b>",
"<b>No major branches in the arm</b> (occasionally small branch to pronator teres just proximal to elbow)",
])
story.append(sp(6))
# Forearm
story.append(Paragraph("<b>C. In the Forearm (Anterior Compartment)</b>", sub_hd_s))
story += bullets([
"Enters forearm by passing <b>between two heads of pronator teres</b> (humeral & ulnar heads)",
"Passes deep to the fibrous arch between the humero-ulnar and radial heads of <b>FDS</b>",
"Runs distally in fascia on the <b>deep surface of FDS</b>",
"Just proximal to wrist: moves laterally, becomes superficial between <b>palmaris longus (medial)</b> and <b>FCR (lateral)</b>",
"Enters palm through <b>carpal tunnel</b>, deep to flexor retinaculum",
])
story.append(sp(6))
# Wrist
story.append(Paragraph("<b>D. At the Wrist / Carpal Tunnel</b>", sub_hd_s))
story += bullets([
"Passes through carpal tunnel deep to flexor retinaculum",
"<b>Palmar cutaneous branch</b> arises just proximal to the retinaculum and passes <b>superficial</b> to it",
"Therefore palmar cutaneous branch is <b>SPARED in carpal tunnel syndrome</b>",
])
story.append(sp(6))
# Hand
story.append(Paragraph("<b>E. In the Palm / Hand</b>", sub_hd_s))
story += bullets([
"Emerges distal to flexor retinaculum",
"Divides into <b>recurrent (thenar) branch</b> and <b>palmar digital branches</b>",
"Palmar digital nerves pass deep to palmar aponeurosis and superficial palmar arch",
])
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 3. BRANCHES
# ═══════════════════════════════════════════════════════════════════
story.append(section("3. Branches"))
story.append(sp(5))
story.append(Paragraph("<b>A. In the Forearm</b>", sub_hd_s))
br_rows = [
[Paragraph("<b>Branch</b>", body_s), Paragraph("<b>Muscles / Structures Supplied</b>", body_s)],
[Paragraph("Muscular branches\n(near elbow)", body_s),
Paragraph("Pronator teres, Flexor carpi radialis (FCR), Palmaris longus, "
"Flexor digitorum superficialis (FDS) – all 4 fingers", body_s)],
[Paragraph("<b>Anterior Interosseous\nNerve (AIN)</b>\n[largest branch]", body_s),
Paragraph("• Flexor pollicis longus (FPL)\n"
"• Lateral half of FDP (index + middle fingers)\n"
"• Pronator quadratus\n"
"• Articular branches to distal radio-ulnar & wrist joints", body_s)],
[Paragraph("Palmar cutaneous branch\n(just proximal to wrist)", body_s),
Paragraph("Skin over base and central palm\n"
"(passes SUPERFICIAL to flexor retinaculum → spared in CTS)", body_s)],
]
story.append(make_table(br_rows[0:1], br_rows[1:],
[CONTENT_W*0.3, CONTENT_W*0.7]))
story.append(sp(8))
story.append(Paragraph("<b>B. In the Hand</b>", sub_hd_s))
hand_rows = [
[Paragraph("<b>Branch</b>", body_s), Paragraph("<b>Course</b>", body_s), Paragraph("<b>Supply</b>", body_s)],
[Paragraph("<b>Recurrent (thenar) branch</b>", body_s),
Paragraph("Curves laterally around distal margin of retinaculum, passes proximally over FPB", body_s),
Paragraph("Abductor pollicis brevis (APB)\nOpponens pollicis\nFlexor pollicis brevis – superficial head (FPB)", body_s)],
[Paragraph("<b>Palmar digital nerves</b>", body_s),
Paragraph("Cross palm deep to palmar aponeurosis and superficial palmar arch", body_s),
Paragraph("Skin: palmar surface of lateral 3½ digits + dorsal nail beds of same\n"
"Lateral two lumbrical muscles (1st & 2nd)", body_s)],
]
story.append(make_table(hand_rows[0:1], hand_rows[1:],
[CONTENT_W*0.25, CONTENT_W*0.37, CONTENT_W*0.38]))
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# FOREARM DIAGRAM (full width)
# ═══════════════════════════════════════════════════════════════════
story.append(section("Diagram 1 – Nerves of the Anterior Forearm", bg=MID_BLUE))
story.append(sp(6))
story += img("forearm_nerves.png", 10,
"Fig 1. Median nerve in the forearm: origin between heads of pronator teres, course of AIN, palmar cutaneous branch\n"
"Source: Gray's Anatomy for Students")
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 4. MOTOR SUPPLY
# ═══════════════════════════════════════════════════════════════════
story.append(section("4. Motor Supply"))
story.append(sp(5))
story.append(Paragraph("<b>A. Forearm Muscles</b> (all anterior compartment EXCEPT FCU and medial FDP)", sub_hd_s))
fm_rows = [
[Paragraph("<b>Layer</b>", body_s), Paragraph("<b>Muscle</b>", body_s), Paragraph("<b>Action</b>", body_s)],
[Paragraph("Superficial", body_s), Paragraph("Pronator teres", body_s), Paragraph("Pronation of forearm", body_s)],
[Paragraph("Superficial", body_s), Paragraph("Flexor carpi radialis (FCR)", body_s), Paragraph("Wrist flexion + radial deviation", body_s)],
[Paragraph("Superficial", body_s), Paragraph("Palmaris longus", body_s), Paragraph("Wrist flexion (absent in ~14%)", body_s)],
[Paragraph("Intermediate", body_s), Paragraph("FDS – all 4 fingers", body_s), Paragraph("Flex PIP joints", body_s)],
[Paragraph("Deep (via AIN)", body_s), Paragraph("Flexor pollicis longus (FPL)", body_s), Paragraph("Flex IP joint of thumb", body_s)],
[Paragraph("Deep (via AIN)", body_s), Paragraph("FDP – lateral half (index + middle)", body_s), Paragraph("Flex DIP joints of index & middle", body_s)],
[Paragraph("Deep (via AIN)", body_s), Paragraph("Pronator quadratus", body_s), Paragraph("Pronation of forearm (main pronator)", body_s)],
]
story.append(make_table(fm_rows[0:1], fm_rows[1:],
[CONTENT_W*0.22, CONTENT_W*0.38, CONTENT_W*0.4]))
story.append(sp(6))
story.append(Paragraph("<b>B. Hand Muscles – LOAF</b> (mnemonic)", sub_hd_s))
story.append(box(
" <b>L</b> – Lateral two Lumbricals (1st & 2nd) → flex MCP, extend IP joints of index & middle\n"
" <b>O</b> – Opponens pollicis → opposes thumb (draws it across palm)\n"
" <b>A</b> – Abductor pollicis brevis (APB) → abducts thumb at right angles to palm\n"
" <b>F</b> – Flexor pollicis brevis (FPB) – superficial head → flexes MCP joint of thumb",
bg=LIGHT_BLUE, border=MID_BLUE))
story.append(sp(6))
story.append(box(
"⚠️ <b>NOT supplied by median nerve:</b> "
"Flexor carpi ulnaris (FCU) and medial half of FDP (ring & little fingers) → <b>Ulnar nerve</b>",
bg=WARN_BG, border=WARN_BORDER))
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 5. SENSORY SUPPLY
# ═══════════════════════════════════════════════════════════════════
story.append(section("5. Sensory Supply"))
story.append(sp(5))
story += bullets([
"<b>Palmar surface</b> of lateral 3½ digits (thumb, index, middle, lateral half of ring finger)",
"<b>Dorsal surface</b> of distal phalanges (nail beds) of same lateral 3½ digits",
"<b>Lateral (radial) palm</b> – via palmar cutaneous branch (arising above wrist, <b>NOT via carpal tunnel</b>)",
])
story.append(sp(5))
story.append(box(
"⭐ The median nerve is called the <b>'Eye of the Hand'</b> or <b>'Nerve of Precision Grip'</b> — "
"it provides the most important sensory supply for fine touch, two-point discrimination, "
"and positioning during pinch.",
bg=GREEN_BG, border=GREEN_BD, style=key_s))
story.append(sp(10))
# HAND DIAGRAM
story.append(section("Diagram 2 – Median Nerve in the Hand & Cutaneous Distribution", bg=MID_BLUE))
story.append(sp(6))
story += img("hand_median.png", 13,
"Fig 2. Median nerve branches in the hand: recurrent thenar branch, digital nerves, lumbrical supply.\n"
"Cutaneous distribution (green) shown on palmar and dorsal views.\n"
"Source: Gray's Anatomy for Students")
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 6. APPLIED ANATOMY
# ═══════════════════════════════════════════════════════════════════
story.append(section("6. Applied Anatomy – Injuries & Clinical Conditions"))
story.append(sp(5))
# Injury levels table
story.append(Paragraph("<b>A. Effects of Injury at Different Levels</b>", sub_hd_s))
inj_rows = [
[Paragraph("<b>Level</b>", body_s), Paragraph("<b>Motor Loss</b>", body_s),
Paragraph("<b>Sensory Loss</b>", body_s), Paragraph("<b>Deformity</b>", body_s)],
[Paragraph("Above elbow\n(high)", body_s),
Paragraph("All forearm flexors (except FCU + medial FDP) + LOAF muscles", body_s),
Paragraph("Lateral 3½ digits + lateral palm", body_s),
Paragraph("<b>Hand of\nBenediction</b>", body_s)],
[Paragraph("At/above wrist\n(low)", body_s),
Paragraph("LOAF muscles only (forearm muscles intact)", body_s),
Paragraph("Lateral 3½ digits + lateral palm", body_s),
Paragraph("<b>Ape Hand</b>", body_s)],
[Paragraph("Carpal tunnel\n(CTS)", body_s),
Paragraph("LOAF muscles (late); thenar wasting", body_s),
Paragraph("Lateral 3½ digits ONLY\n(central palm SPARED)", body_s),
Paragraph("Thenar\nwasting", body_s)],
[Paragraph("Anterior\ninterosseous\nnerve (AIN)", body_s),
Paragraph("FPL + lateral FDP (index, middle) + pronator quadratus", body_s),
Paragraph("<b>No sensory loss</b>\n(purely motor nerve)", body_s),
Paragraph("Cannot make\n'OK sign'", body_s)],
]
story.append(make_table(inj_rows[0:1], inj_rows[1:],
[CONTENT_W*0.17, CONTENT_W*0.33, CONTENT_W*0.28, CONTENT_W*0.22]))
story.append(sp(8))
# Hand of benediction
story.append(Paragraph("<b>B. Hand of Benediction (High Median Nerve Injury)</b>", sub_hd_s))
story += bullets([
"Seen when patient attempts to make a fist after a <b>high (above elbow)</b> injury",
"Index and middle fingers remain <b>extended</b> – FDP to these fingers is paralysed",
"Ring and little fingers flex normally – their FDP is supplied by the ulnar nerve (intact)",
"Resembles the gesture of a bishop giving a blessing",
"Common cause: supracondylar fracture of humerus in children",
])
story.append(sp(8))
# Ape hand
story.append(Paragraph("<b>C. Ape Hand Deformity (Low Median Nerve Injury)</b>", sub_hd_s))
story += bullets([
"Seen in <b>low (at wrist)</b> injury – forearm muscles are intact",
"Thenar muscles paralysed → thumb adducted, falls back in the plane of the palm",
"Cannot oppose thumb (opponens pollicis lost)",
"Thenar eminence flattened/wasted",
"No benediction posture because FDP (index, middle) still intact",
])
story.append(sp(6))
# Side-by-side clinical photos
tbl2 = two_col_img(
"ape_hand.jpg", 6.5,
"Fig 3. Ape hand deformity – thenar wasting and adducted thumb\n(low/wrist-level median nerve injury)",
"carpal_tunnel.jpg", 6.5,
"Fig 4. Surface anatomy of carpal tunnel – median nerve between\npalmaris longus and FCR tendons at wrist"
)
story.append(tbl2)
story.append(sp(8))
# CTS
story.append(Paragraph("<b>D. Carpal Tunnel Syndrome (CTS)</b> – Commonest Entrapment Neuropathy", sub_hd_s))
story += bullets([
"Median nerve compressed under <b>flexor retinaculum</b> at the wrist",
"<b>Causes:</b> pregnancy, hypothyroidism, rheumatoid arthritis, acromegaly, obesity, repetitive wrist use, diabetes",
"<b>Features:</b> night pain, tingling/numbness in lateral 3½ digits, thenar wasting (late)",
"<b>Central palm sensation PRESERVED</b> – palmar cutaneous branch passes superficial to retinaculum",
"<b>Tinel's sign:</b> tapping over carpal tunnel reproduces tingling distally",
"<b>Phalen's test:</b> sustained wrist flexion (60 sec) reproduces symptoms",
"<b>Treatment:</b> wrist splinting, corticosteroid injection, surgical carpal tunnel release",
])
story.append(sp(8))
# AIN palsy
story.append(Paragraph("<b>E. Anterior Interosseous Nerve (AIN) Palsy</b>", sub_hd_s))
story += bullets([
"AIN is a <b>purely motor</b> branch – no sensory loss",
"Supplies: FPL, lateral FDP (index, middle), pronator quadratus",
"Cannot flex IP joint of thumb and DIP joint of index finger",
"Cannot make the <b>'OK sign'</b> (pinch test positive)",
"Causes: forearm fractures, penetrating injuries, tight cast, spontaneous (Parsonage-Turner)",
])
story.append(sp(8))
# Pronator syndrome
story.append(Paragraph("<b>F. Pronator Syndrome</b>", sub_hd_s))
story += bullets([
"Median nerve compressed at <b>pronator teres</b> in the forearm",
"Unlike CTS: <b>central palm IS affected</b> (palmar cutaneous branch arises above the compression site)",
"Aching forearm pain worsened by resisted pronation",
"Tinel's sign over pronator teres (not carpal tunnel)",
])
story.append(sp(10))
# ═══════════════════════════════════════════════════════════════════
# 7. QUICK REVISION
# ═══════════════════════════════════════════════════════════════════
story.append(section("7. Quick Revision – High-Yield Exam Points"))
story.append(sp(5))
hiyield = [
"Root value: <b>C6, C7, C8, T1</b> – formed from lateral + medial cords of brachial plexus",
"Only nerve to enter palm through the <b>carpal tunnel</b> (deep to flexor retinaculum)",
"<b>No branches in axilla or arm</b> (except sometimes a tiny branch to pronator teres)",
"AIN = largest branch; purely motor; supplies <b>FPL, lateral FDP, pronator quadratus</b>",
"Palmar cutaneous branch = spared in CTS (arises above wrist, passes superficial to retinaculum)",
"LOAF = <b>L</b>umbricals 1&2, <b>O</b>pponens pollicis, <b>A</b>bductor pollicis brevis, <b>F</b>lexor pollicis brevis",
"High injury → <b>Hand of Benediction</b> (index + middle extended on making fist)",
"Low injury (wrist) → <b>Ape Hand</b> (thumb adducted, thenar wasted, no opposition)",
"CTS: central palm OK + thenar wasting + positive Tinel's + positive Phalen's",
"AIN palsy: cannot make OK sign; <b>no sensory loss</b>",
"'<b>Eye of the hand</b>' – most important sensory nerve for fine touch and precision pinch",
"Cannot supply: <b>FCU</b> and <b>medial FDP</b> (ring + little) → these are ulnar nerve",
]
for i, pt in enumerate(hiyield):
row_bg = SKY if i % 2 == 0 else WHITE
tbl = Table([[Paragraph(f"✔ {pt}", body_s)]], colWidths=[CONTENT_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), row_bg),
("BOX", (0,0),(-1,-1), 0.3, GREY),
("LEFTPADDING", (0,0),(-1,-1), 10),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
]))
story.append(tbl)
story.append(sp(10))
story.append(hr())
story.append(sp(4))
story.append(Paragraph(
"Sources: Gray's Anatomy for Students (Elsevier) | Bradley & Daroff's Neurology in Clinical Practice | "
"Vishram Singh – Textbook of Clinical Anatomy (Regional & Applied)",
footer_s))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUT}")
cd /tmp/workspace/median-nerve-pdf && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/median-nerve-pdf/Median_Nerve_Summary.pdf
Median Nerve Summary
PDF Document · PDF
| Page / Section | Content |
|---|---|
| Cover | Title banner + Quick-reference table + two side-by-side anatomy diagrams (forearm nerves + hand distribution) |
| 1. Root Value & Origin | C6-T1 roots, lateral/medial cord contributions, formation in front of 3rd part of axillary artery |
| 2. Course & Relations | Region-by-region: Axilla → Arm → Forearm → Wrist → Hand with relation to brachial artery |
| Diagram 1 | Full-width forearm nerve diagram (median, AIN, palmar branch, pronator teres relationship) |
| 3. Branches | Forearm branches table + Hand branches table (recurrent thenar, digital nerves) |
| 4. Motor Supply | Forearm muscles table (by layer) + LOAF mnemonic box |
| 5. Sensory Supply | Digit-by-digit sensory territory + "Eye of the Hand" key point |
| Diagram 2 | Full-width hand diagram with palmar/dorsal cutaneous distribution |
| 6. Applied Anatomy | Injury level comparison table + Hand of Benediction + Ape Hand (clinical photos) + CTS + AIN palsy + Pronator Syndrome |
| 7. Quick Revision | 12 high-yield MCQ bullet points (colour-alternating rows) |