All muscles origin, insertion, action Innervation, Blood and nerve supply with diagram A4 size pdf Reff Book BDC Chaurasia

Reading File
Asking for Preferences
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Searching Images

upper limb muscles origin insertion diagram anatomy

Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"

Running Command

mkdir -p /tmp/workspace/upper-limb-muscles && python3 << 'PYEOF' 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, Table, TableStyle, Spacer, HRFlowable, PageBreak, KeepTogether ) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus.flowables import HRFlowable import urllib.request import os # ── colour palette ────────────────────────────────────────────────────────── DARK_BLUE = colors.HexColor("#0D2B55") MID_BLUE = colors.HexColor("#1A4A8A") LIGHT_BLUE = colors.HexColor("#D6E8FF") ACCENT = colors.HexColor("#E8630A") ROW_ALT = colors.HexColor("#F0F6FF") WHITE = colors.white GREY_BORDER = colors.HexColor("#AAAAAA") LIGHT_GREY = colors.HexColor("#F5F5F5") PAGE_W, PAGE_H = A4 MARGIN = 1.8*cm # ── doc ────────────────────────────────────────────────────────────────────── out_path = "/tmp/workspace/upper-limb-muscles/Upper_Limb_Muscles_BDC.pdf" doc = SimpleDocTemplate( out_path, pagesize=A4, leftMargin=MARGIN, rightMargin=MARGIN, topMargin=2*cm, bottomMargin=2*cm, title="Upper Limb Muscles – BDC Chaurasia Reference" ) styles = getSampleStyleSheet() usable_w = PAGE_W - 2*MARGIN # ── custom styles ───────────────────────────────────────────────────────────── H1 = ParagraphStyle("H1", parent=styles["Heading1"], fontSize=22, textColor=WHITE, spaceAfter=4, spaceBefore=0, fontName="Helvetica-Bold", backColor=DARK_BLUE, borderPad=6, leftIndent=-4) H2 = ParagraphStyle("H2", parent=styles["Heading2"], fontSize=14, textColor=WHITE, spaceAfter=4, spaceBefore=8, fontName="Helvetica-Bold", backColor=MID_BLUE, borderPad=4, leftIndent=-4) H3 = ParagraphStyle("H3", parent=styles["Heading3"], fontSize=11, textColor=DARK_BLUE, spaceAfter=2, spaceBefore=6, fontName="Helvetica-Bold") BODY = ParagraphStyle("BODY", parent=styles["Normal"], fontSize=9, leading=13, spaceAfter=3, fontName="Helvetica", textColor=colors.HexColor("#222222")) NOTE = ParagraphStyle("NOTE", parent=BODY, fontSize=8.5, textColor=colors.HexColor("#444444"), leftIndent=10, bulletIndent=5, leading=12) CELL = ParagraphStyle("CELL", parent=BODY, fontSize=8, leading=11, spaceAfter=0) HDR_CELL = ParagraphStyle("HDR_CELL", parent=CELL, fontName="Helvetica-Bold", textColor=WHITE, fontSize=8.5) # ── table builder ───────────────────────────────────────────────────────────── def muscle_table(rows): """rows = list of (Muscle, Origin, Insertion, Action, Nerve, Blood)""" col_w = [usable_w * f for f in [0.14, 0.17, 0.17, 0.22, 0.17, 0.13]] headers = ["Muscle", "Origin", "Insertion", "Action(s)", "Nerve Supply", "Blood Supply"] header_row = [Paragraph(h, HDR_CELL) for h in headers] data = [header_row] for i, r in enumerate(rows): bg = ROW_ALT if i % 2 == 0 else WHITE data.append([Paragraph(str(c), CELL) for c in r]) t = Table(data, colWidths=col_w, repeatRows=1) row_bg = [ ("BACKGROUND", (0, 0), (-1, 0), MID_BLUE), ("GRID", (0, 0), (-1, -1), 0.4, GREY_BORDER), ("VALIGN", (0, 0), (-1, -1), "TOP"), ("ROWBACKGROUNDS", (0, 1), (-1, -1), [ROW_ALT, WHITE]), ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), ("TOPPADDING", (0, 0), (-1, -1), 3), ("BOTTOMPADDING", (0, 0), (-1, -1), 3), ("LEFTPADDING", (0, 0), (-1, -1), 4), ("RIGHTPADDING", (0, 0), (-1, -1), 4), ] t.setStyle(TableStyle(row_bg)) return t # ── cover page ──────────────────────────────────────────────────────────────── story = [] # Title block story.append(Spacer(1, 1.5*cm)) story.append(Paragraph("UPPER LIMB MUSCLES", H1)) story.append(Spacer(1, 0.3*cm)) cover_sub = ParagraphStyle("cover_sub", parent=BODY, fontSize=12, textColor=DARK_BLUE, fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=6) story.append(Paragraph("Origin · Insertion · Action · Nerve Supply · Blood Supply", cover_sub)) ref_style = ParagraphStyle("ref", parent=BODY, fontSize=10, textColor=MID_BLUE, alignment=TA_CENTER, spaceAfter=4) story.append(Paragraph("Reference: BD Chaurasia's Human Anatomy (Vol. 1) | THIEME Atlas of Anatomy", ref_style)) story.append(HRFlowable(width="100%", thickness=2, color=ACCENT, spaceAfter=8)) intro = ( "This document provides a systematic reference for all major muscles of the upper limb. " "Each muscle is described with its origin, insertion, action(s), nerve supply, and blood supply. " "The content is organised by anatomical region: Shoulder Girdle → Shoulder Joint → Arm → " "Forearm (Anterior/Posterior) → Hand. Diagrams are included where available." ) story.append(Paragraph(intro, BODY)) story.append(Spacer(1, 0.4*cm)) # TOC toc_data = [ [Paragraph("<b>Section</b>", CELL), Paragraph("<b>Muscles Covered</b>", CELL)], [Paragraph("1. Muscles of the Shoulder Girdle", CELL), Paragraph("Trapezius, SCM, Omohyoid, Levator Scapulae, Rhomboids, Subclavius, Pec Minor, Serratus Anterior", CELL)], [Paragraph("2. Muscles of the Shoulder Joint", CELL), Paragraph("Supraspinatus, Infraspinatus, Teres Minor, Subscapularis, Deltoid, Latissimus Dorsi, Teres Major, Pec Major, Coracobrachialis", CELL)], [Paragraph("3. Muscles of the Arm", CELL), Paragraph("Biceps Brachii, Brachialis, Triceps Brachii, Anconeus", CELL)], [Paragraph("4. Anterior Forearm Muscles", CELL), Paragraph("Pronator Teres, FCR, Palmaris Longus, FCU, FDS, FDP, FPL, Pronator Quadratus", CELL)], [Paragraph("5. Posterior Forearm Muscles", CELL), Paragraph("ECRL, ECRB, EDC, EDM, ECU, Supinator, APL, EPB, EPL, EIP", CELL)], [Paragraph("6. Hand Muscles", CELL), Paragraph("Thenar, Hypothenar, Lumbricals, Interossei", CELL)], ] toc_t = Table(toc_data, colWidths=[usable_w*0.35, usable_w*0.65]) toc_t.setStyle(TableStyle([ ("BACKGROUND", (0, 0), (-1, 0), DARK_BLUE), ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), ("TEXTCOLOR", (0, 0), (-1, 0), WHITE), ("ROWBACKGROUNDS", (0, 1), (-1, -1), [LIGHT_BLUE, WHITE]), ("GRID", (0, 0), (-1, -1), 0.4, GREY_BORDER), ("VALIGN", (0, 0), (-1, -1), "TOP"), ("TOPPADDING", (0, 0), (-1, -1), 4), ("BOTTOMPADDING", (0, 0), (-1, -1), 4), ("LEFTPADDING", (0, 0), (-1, -1), 5), ])) story.append(toc_t) story.append(PageBreak()) # ============================================================================= # ── SECTION 1: SHOULDER GIRDLE ─────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("1. Muscles of the Shoulder Girdle", H2)) story.append(Spacer(1, 0.2*cm)) sg_rows = [ ("Trapezius\n(Upper fibers)", "Occipital bone (superior nuchal line); ligamentum nuchae; spinous processes C1–C7", "Posterior border of lateral clavicle; acromion", "Elevates scapula; upward rotation of scapula; retracts scapula", "Accessory nerve CN XI; cervical plexus C3–C4", "Superficial cervical a.; dorsal scapular a."), ("Trapezius\n(Middle fibers)", "Spinous processes T1–T4", "Spine of scapula; acromion", "Retracts (adducts) scapula", "Accessory nerve CN XI; cervical plexus C3–C4", "Dorsal scapular a."), ("Trapezius\n(Lower fibers)", "Spinous processes T5–T12", "Medial end of scapular spine", "Depresses scapula; upward rotation", "Accessory nerve CN XI; cervical plexus C3–C4", "Dorsal scapular a."), ("Sternocleidomastoid", "Sternal head: Manubrium sterni\nClavicular head: Medial 1/3 of clavicle", "Mastoid process; superior nuchal line", "Unilateral: lateral flexion same side + rotation opposite side\nBilateral: flexion of neck; extension of head", "Accessory nerve CN XI; cervical plexus C2–C3", "Occipital a.; posterior auricular a.; superior thyroid a."), ("Omohyoid", "Superior border of scapula (medial to suprascapular notch)", "Body of hyoid bone", "Depresses hyoid; tenses cervical fascia; maintains IJV patency", "Ansa cervicalis C1–C3", "Superior thyroid a.; lingual a."), ("Levator Scapulae", "Transverse processes C1–C4", "Superior angle of scapula (medial border)", "Elevates scapula; rotates glenoid inferiorly; lateral flexion of neck (scapula fixed)", "Dorsal scapular nerve C3–C5; cervical spinal nerves C3–C4", "Dorsal scapular a.; ascending cervical a."), ("Rhomboid Minor", "Spinous processes C6–C7; lower ligamentum nuchae", "Medial border of scapula above scapular spine", "Retracts & elevates scapula; rotates glenoid inferiorly", "Dorsal scapular nerve C4–C5", "Dorsal scapular a."), ("Rhomboid Major", "Spinous processes T1–T4", "Medial border of scapula below scapular spine", "Retracts & elevates scapula; rotates glenoid inferiorly", "Dorsal scapular nerve C4–C5", "Dorsal scapular a."), ("Subclavius", "1st rib at junction with costal cartilage", "Inferior surface of middle 1/3 of clavicle", "Depresses clavicle; stabilises sternoclavicular joint; protects subclavian vessels", "Nerve to subclavius C5–C6", "Clavicular branch of thoracoacromial a."), ("Pectoralis Minor", "Outer surface of 3rd–5th ribs (near costal cartilages)", "Coracoid process of scapula", "Draws scapula anteroinferiorly; rotates glenoid inferiorly; assists respiration", "Medial pectoral nerve C8–T1", "Pectoral branch of thoracoacromial a.; lateral thoracic a."), ("Serratus Anterior", "Outer surfaces of upper 8–9 ribs (serrated)", "Anterior (costal) surface of medial border of scapula", "Protracts scapula; rotates scapula upward; holds scapula against thorax (\"boxer's muscle\")", "Long thoracic nerve C5–C7", "Lateral thoracic a.; thoracodorsal a."), ] story.append(muscle_table(sg_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Shoulder Girdle:</b>", H3)) notes_sg = [ "• <b>Trapezius paralysis</b> (CN XI injury): drooping shoulder, inability to shrug, winging of scapula.", "• <b>Serratus anterior paralysis</b> (long thoracic nerve C5–C7): classic <b>medial winging</b> of scapula, inability to raise arm above 90°.", "• <b>Rhomboid paralysis</b> (dorsal scapular nerve): <b>lateral winging</b> at rest, scapula drifts laterally.", "• <b>Accessory nerve (CN XI)</b> can be injured in posterior triangle neck dissection — assess shoulder shrug and head rotation.", "• <b>Blood supply mnemonic</b> for shoulder girdle: Dorsal Scapular Artery supplies rhomboids and levator scapulae; Thoracoacromial supplies pec minor and subclavius.", ] for n in notes_sg: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── SECTION 2: SHOULDER JOINT ──────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("2. Muscles of the Shoulder Joint", H2)) story.append(Spacer(1, 0.2*cm)) sj_rows = [ ("Supraspinatus", "Supraspinous fossa of scapula", "Superior facet of greater tubercle of humerus", "Initiates abduction (0–15°); stabilises glenohumeral joint (SITS)", "Suprascapular nerve C4–C6", "Suprascapular a.; dorsal scapular a."), ("Infraspinatus", "Infraspinous fossa of scapula", "Middle facet of greater tubercle of humerus", "Lateral (external) rotation; adduction; stabilises GHJ (SITS)", "Suprascapular nerve C5–C6", "Suprascapular a.; circumflex scapular a."), ("Teres Minor", "Upper 2/3 of lateral border of scapula", "Inferior facet of greater tubercle of humerus", "Lateral (external) rotation; adduction; stabilises GHJ (SITS)", "Axillary nerve C5–C6", "Posterior circumflex humeral a.; circumflex scapular a."), ("Subscapularis", "Subscapular fossa (anterior surface of scapula)", "Lesser tubercle of humerus; shoulder joint capsule", "Medial (internal) rotation; adduction; stabilises GHJ (SITS)", "Upper & lower subscapular nerves C5–C7", "Subscapular a.; anterior circumflex humeral a."), ("Deltoid\n(Anterior)", "Anterior border & upper surface of lateral clavicle", "Deltoid tuberosity of humerus", "Flexion; medial rotation; horizontal adduction", "Axillary nerve C5–C6", "Anterior circumflex humeral a.; deltoid branch of thoracoacromial a."), ("Deltoid\n(Middle)", "Lateral margin of acromion", "Deltoid tuberosity of humerus", "Abduction (main abductor 15–90°)", "Axillary nerve C5–C6", "Posterior circumflex humeral a."), ("Deltoid\n(Posterior)", "Spine of scapula (lower border)", "Deltoid tuberosity of humerus", "Extension; lateral rotation; horizontal abduction", "Axillary nerve C5–C6", "Posterior circumflex humeral a."), ("Latissimus Dorsi", "Spinous processes T7–T12; thoracolumbar fascia; iliac crest; lower 3–4 ribs; inferior angle of scapula", "Intertubercular groove (floor) of humerus — anterior surface", "Extension; adduction; medial rotation; depression of arm (\"swimmer's muscle\")", "Thoracodorsal nerve C6–C8", "Thoracodorsal a. (branch of subscapular a.)"), ("Teres Major", "Inferior angle of scapula (posterior surface)", "Crest of lesser tubercle of humerus (medial lip of intertubercular groove)", "Adduction; medial rotation; extension", "Lower subscapular nerve C5–C7", "Subscapular a.; posterior circumflex humeral a."), ("Pectoralis Major", "Clavicular part: medial half of clavicle\nSternocostal part: sternum, costal cartilages 1–6\nAbdominal part: anterior layer of rectus sheath", "Crest of greater tubercle of humerus (lateral lip of intertubercular groove)", "Adduction; medial rotation; flexion (clavicular part); extension (sternocostal part from flexed position); assists respiration", "Medial pectoral nerve C8–T1; lateral pectoral nerve C5–C7", "Pectoral branch of thoracoacromial a.; anterior intercostal aa.; lateral thoracic a."), ("Coracobrachialis", "Tip of coracoid process of scapula", "Medial surface of humeral shaft (opposite deltoid tuberosity)", "Flexion; adduction at shoulder; medial rotation", "Musculocutaneous nerve C5–C7 (pierces this muscle)", "Brachial a.; anterior circumflex humeral a."), ] story.append(muscle_table(sj_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Shoulder Joint:</b>", H3)) notes_sj = [ "• <b>SITS muscles</b> = Rotator Cuff: Supraspinatus, Infraspinatus, Teres minor, Subscapularis.", "• <b>Supraspinatus</b> is most commonly torn; impingement occurs under the coracoacromial arch.", "• <b>Axillary nerve</b> (C5–C6) winds around surgical neck of humerus — injured in shoulder dislocation / neck-of-humerus fracture → loss of deltoid + teres minor + loss of sensation over regimental badge area.", "• <b>Quadrangular space</b> boundaries: teres major (below), teres minor (above), long head of triceps (medial), surgical neck of humerus (lateral). Contains axillary nerve + posterior circumflex humeral a.", "• <b>Latissimus dorsi</b> is the prime mover in coughing and swimming (adduction + medial rotation + extension).", "• <b>Pectoralis major</b> loss (medial/lateral pectoral nerve injury): inability to adduct/medially rotate; loss of anterior axillary fold.", ] for n in notes_sj: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── SECTION 3: ARM ──────────────────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("3. Muscles of the Arm", H2)) story.append(Spacer(1, 0.2*cm)) arm_rows = [ ("Biceps Brachii\n(Long Head)", "Supraglenoid tubercle of scapula", "Radial tuberosity; bicipital aponeurosis (lacertus fibrosus) → deep fascia of forearm", "Forearm supination (main); elbow flexion; weak shoulder flexion", "Musculocutaneous nerve C5–C6", "Brachial a.; anterior circumflex humeral a."), ("Biceps Brachii\n(Short Head)", "Coracoid process of scapula (with coracobrachialis)", "Radial tuberosity; bicipital aponeurosis", "Elbow flexion; forearm supination; shoulder flexion", "Musculocutaneous nerve C5–C6", "Brachial a."), ("Brachialis", "Distal half of anterior surface of humerus (below deltoid insertion)", "Coronoid process and ulnar tuberosity", "Elbow flexion (most powerful flexor regardless of forearm position) — \"workhorse\"", "Musculocutaneous nerve C5–C6; small branch from radial nerve C7", "Brachial a.; radial recurrent a."), ("Triceps Brachii\n(Long Head)", "Infraglenoid tubercle of scapula", "Olecranon process of ulna (via common triceps tendon)", "Elbow extension; shoulder extension & adduction (long head)", "Radial nerve C7–C8", "Deep brachial a. (profunda brachii); posterior circumflex humeral a."), ("Triceps Brachii\n(Lateral Head)", "Posterior surface of humerus above spiral groove", "Olecranon process of ulna", "Elbow extension (strongest head in extension)", "Radial nerve C7–C8", "Deep brachial a."), ("Triceps Brachii\n(Medial Head)", "Posterior surface of humerus below spiral groove (medial to radial groove)", "Olecranon process of ulna", "Elbow extension", "Radial nerve C6–C8", "Deep brachial a."), ("Anconeus", "Lateral epicondyle of humerus (posterior surface)", "Posterior surface of olecranon; upper posterior surface of ulna", "Assists elbow extension; abducts ulna during pronation", "Radial nerve C7–C8", "Posterior interosseous a.; radial recurrent a."), ] story.append(muscle_table(arm_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Arm:</b>", H3)) notes_arm = [ "• <b>Musculocutaneous nerve</b> (C5–C7): pierces coracobrachialis, runs between biceps & brachialis. Injury → loss of elbow flexion + supination + lateral forearm sensation.", "• <b>Radial nerve</b> in spiral groove (humerus mid-shaft): damaged in \"Saturday night palsy\" or humeral shaft fracture → wrist drop (loss of extensors) + loss of sensation dorsal hand (first web space).", "• <b>Bicipital aponeurosis (lacertus fibrosus)</b>: clinically important — may protect brachial artery and median nerve during antecubital fossa procedures.", "• <b>Biceps brachii</b> is the most powerful supinator (best when elbow at 90°); brachialis is the most powerful pure elbow flexor.", "• <b>Cubital fossa</b> (lateral → medial): Biceps Tendon, Brachial Artery, Median Nerve (mnemonic: TAN).", ] for n in notes_arm: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── SECTION 4: ANTERIOR FOREARM ────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("4. Anterior Forearm Muscles", H2)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("<b>Superficial Layer</b>", H3)) ant_sup_rows = [ ("Pronator Teres\n(Humeral head)", "Medial epicondyle (common flexor origin)", "Middle 1/3 of lateral surface of radius", "Forearm pronation; assists elbow flexion", "Median nerve C6–C7", "Ulnar a.; radial a."), ("Pronator Teres\n(Ulnar head)", "Medial side of coronoid process of ulna", "Middle 1/3 of lateral surface of radius", "Forearm pronation", "Median nerve C6–C7", "Ulnar a.; radial a."), ("Flexor Carpi Radialis (FCR)", "Medial epicondyle (common flexor origin)", "Base of 2nd metacarpal (+ small slip to 3rd)", "Wrist flexion; radial deviation (abduction) of hand", "Median nerve C6–C7", "Radial a."), ("Palmaris Longus", "Medial epicondyle (common flexor origin)", "Palmar aponeurosis; flexor retinaculum", "Wrist flexion; tenses palmar aponeurosis (absent in ~15% population)", "Median nerve C7–C8", "Ulnar a."), ("Flexor Carpi Ulnaris (FCU)\n(Humeral head)", "Medial epicondyle (common flexor origin)", "Pisiform → hamate (pisohamate lig.) → 5th metacarpal base", "Wrist flexion; ulnar deviation (adduction) of hand", "Ulnar nerve C7–C8", "Posterior ulnar recurrent a.; ulnar a."), ("Flexor Carpi Ulnaris (FCU)\n(Ulnar head)", "Medial border of olecranon; posterior border of ulna", "Pisiform → 5th metacarpal (via pisohamate & pisometacarpal ligs.)", "Wrist flexion; ulnar deviation", "Ulnar nerve C7–C8", "Ulnar a."), ] story.append(muscle_table(ant_sup_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Intermediate Layer</b>", H3)) ant_mid_rows = [ ("Flexor Digitorum Superficialis (FDS)\n(Humeroulnar head)", "Medial epicondyle; ulnar collateral ligament; coronoid process", "Middle phalanges of 2nd–5th digits (splits to allow FDP through)", "Flexion of PIP joints 2–5; assists MCP and wrist flexion", "Median nerve C7–T1", "Ulnar a.; anterior ulnar recurrent a."), ("Flexor Digitorum Superficialis (FDS)\n(Radial head)", "Anterior oblique line of radius", "Middle phalanges of 2nd–5th digits", "Flexion of PIP joints; wrist flexion", "Median nerve C7–T1", "Radial a."), ] story.append(muscle_table(ant_mid_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Deep Layer</b>", H3)) ant_deep_rows = [ ("Flexor Digitorum Profundus (FDP)\nDigits 2–3", "Upper 3/4 of anterior & medial surfaces of ulna; interosseous membrane", "Distal phalanges of 2nd–5th digits (via FDS split)", "Flexion of DIP joints 2–5; assists PIP, MCP, and wrist flexion", "Median nerve (anterior interosseous branch) for digits 2–3; C8–T1", "Anterior interosseous a.; ulnar a."), ("Flexor Digitorum Profundus (FDP)\nDigits 4–5", "Upper 3/4 of anterior & medial surfaces of ulna; interosseous membrane", "Distal phalanges of 4th–5th digits", "Flexion of DIP joints 4–5", "Ulnar nerve C8–T1", "Ulnar a."), ("Flexor Pollicis Longus (FPL)", "Anterior surface of radius (below radial tuberosity); interosseous membrane", "Distal phalanx of thumb (palmar surface)", "Flexion of IP joint of thumb; assists MCP & CMC flexion of thumb", "Anterior interosseous nerve (branch of median nerve) C8–T1", "Anterior interosseous a.; radial a."), ("Pronator Quadratus", "Distal 1/4 of anterior surface of ulna", "Distal 1/4 of anterior surface of radius", "Forearm pronation (main pronator of distal radioulnar joint)", "Anterior interosseous nerve C7–C8", "Anterior interosseous a."), ] story.append(muscle_table(ant_deep_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Anterior Forearm:</b>", H3)) notes_af = [ "• <b>Median nerve (AIN branch)</b>: supplies FPL + FDP for digits 2–3 + pronator quadratus. AIN palsy → unable to make \"OK\" sign (no tip-to-tip pinch).", "• <b>Pronator syndrome</b>: median nerve compressed between 2 heads of pronator teres → similar to CTS + pain on resisted forearm pronation.", "• <b>FCU</b> is the only forearm flexor innervated by the <b>ulnar nerve</b>; all others are median nerve.", "• <b>Palmaris longus</b> tendon: useful graft for tendon repair; absent in ~15% population (test: appose thumb to little finger + flex wrist).", "• <b>Common flexor origin</b> (medial epicondyle): site of <b>golfer's elbow</b> (medial epicondylitis).", "• <b>FDS test</b>: hold adjacent fingers extended while testing the one in question — isolates FDS from FDP.", ] for n in notes_af: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── SECTION 5: POSTERIOR FOREARM ───────────────────────────────────────────── # ============================================================================= story.append(Paragraph("5. Posterior Forearm Muscles", H2)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("<b>Superficial Layer</b>", H3)) post_sup_rows = [ ("Brachioradialis", "Lateral supracondylar ridge of humerus (above lateral epicondyle)", "Styloid process of radius", "Elbow flexion (especially in mid-prone position); returns forearm to mid-prone position", "Radial nerve C5–C6", "Radial recurrent a.; radial a."), ("Extensor Carpi Radialis Longus (ECRL)", "Lateral supracondylar ridge of humerus", "Base of 2nd metacarpal (dorsal surface)", "Wrist extension; radial deviation", "Radial nerve C6–C7", "Radial recurrent a.; radial a."), ("Extensor Carpi Radialis Brevis (ECRB)", "Lateral epicondyle (common extensor origin)", "Base of 3rd metacarpal (dorsal surface)", "Wrist extension; assists radial deviation", "Deep branch of radial nerve / posterior interosseous nerve C7–C8", "Radial recurrent a.; radial a."), ("Extensor Digitorum Communis (EDC)", "Lateral epicondyle (common extensor origin)", "Dorsal digital expansion of 2nd–5th digits", "Extension of MCP, PIP, DIP joints 2–5; wrist extension", "Posterior interosseous nerve (radial) C7–C8", "Posterior interosseous a."), ("Extensor Digiti Minimi (EDM)", "Lateral epicondyle (common extensor origin)", "Dorsal digital expansion of 5th digit", "Extension of 5th digit; ulnar deviation", "Posterior interosseous nerve (radial) C7–C8", "Posterior interosseous a."), ("Extensor Carpi Ulnaris (ECU)", "Lateral epicondyle (common extensor origin); posterior surface of ulna", "Base of 5th metacarpal (dorsal surface)", "Wrist extension; ulnar deviation", "Posterior interosseous nerve (radial) C7–C8", "Posterior interosseous a.; ulnar a."), ] story.append(muscle_table(post_sup_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Deep Layer</b>", H3)) post_deep_rows = [ ("Supinator", "Lateral epicondyle of humerus; supinator crest of ulna; radial collateral lig.; annular lig.", "Anterolateral surface of upper radius (between radial tuberosity and pronator teres insertion)", "Forearm supination", "Posterior interosseous nerve (radial) C7–C8", "Posterior interosseous a.; radial recurrent a."), ("Abductor Pollicis Longus (APL)", "Posterior surfaces of radius & ulna; interosseous membrane", "Base of 1st metacarpal (radial side)", "Abduction of thumb; assists radial deviation of wrist; extends CMC joint of thumb", "Posterior interosseous nerve C7–C8", "Posterior interosseous a."), ("Extensor Pollicis Brevis (EPB)", "Posterior surface of radius; interosseous membrane (distal to APL)", "Base of proximal phalanx of thumb (dorsal surface)", "Extension of MCP joint of thumb; assists radial deviation", "Posterior interosseous nerve C7–C8", "Posterior interosseous a."), ("Extensor Pollicis Longus (EPL)", "Posterior surface of ulna (middle third); interosseous membrane", "Base of distal phalanx of thumb (dorsal surface)", "Extension of IP joint of thumb; extends MCP and CMC joints; assists radial deviation; retracts thumb", "Posterior interosseous nerve C7–C8", "Posterior interosseous a."), ("Extensor Indicis (EI)", "Posterior surface of ulna (distal to EPL); interosseous membrane", "Dorsal digital expansion of index finger (2nd digit)", "Extension of index finger independently; assists wrist extension", "Posterior interosseous nerve C7–C8", "Posterior interosseous a."), ] story.append(muscle_table(post_deep_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Posterior Forearm:</b>", H3)) notes_pf = [ "• All posterior forearm muscles are supplied by the <b>radial nerve</b> (superficial branch or deep/posterior interosseous branch).", "• <b>Anatomical snuffbox</b>: bounded by EPL (ulnar), APL + EPB (radial). Floor = scaphoid + radiotrapezial joint. Contents = radial artery + branches of radial nerve.", "• <b>Scaphoid fracture</b>: tenderness in anatomical snuffbox after FOOSH; supplied by branches of radial a. (risk of avascular necrosis).", "• <b>Common extensor origin</b> (lateral epicondyle): site of <b>tennis elbow</b> (lateral epicondylitis) — ECRB is most commonly involved tendon.", "• <b>Posterior interosseous nerve</b> passes through supinator (arcade of Frohse): entrapment causes finger drop without wrist drop (ECRL spared as it arises proximal to PIN).", "• <b>Radial tunnel syndrome</b> vs <b>PIN palsy</b>: same anatomy — former is pain only, latter is motor weakness.", ] for n in notes_pf: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── SECTION 6: HAND MUSCLES ─────────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("6. Hand Muscles", H2)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("<b>Thenar Muscles (Thumb)</b>", H3)) thenar_rows = [ ("Abductor Pollicis Brevis (APB)", "Flexor retinaculum; scaphoid tubercle; trapezium", "Radial side of base of proximal phalanx of thumb; extensor expansion", "Abduction of thumb (at CMC joint)", "Median nerve (recurrent branch) C8–T1", "Superficial palmar branch of radial a."), ("Flexor Pollicis Brevis (FPB)\n(Superficial head)", "Flexor retinaculum; trapezium", "Radial side of proximal phalanx of thumb", "Flexion of MCP joint of thumb", "Median nerve (recurrent branch) C8–T1", "Superficial palmar arch (radial a.)"), ("Flexor Pollicis Brevis (FPB)\n(Deep head)", "Trapezoid; capitate", "Ulnar side of proximal phalanx of thumb", "Flexion of MCP joint of thumb", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Opponens Pollicis", "Flexor retinaculum; trapezium tubercle", "Entire length of 1st metacarpal (radial border)", "Opposition of thumb (CMC joint) — combines flexion + medial rotation + abduction", "Median nerve (recurrent branch) C8–T1", "Superficial palmar branch of radial a."), ("Adductor Pollicis\n(Oblique head)", "Capitate; bases of 2nd & 3rd metacarpals; flexor retinaculum", "Ulnar sesamoid; ulnar side of proximal phalanx of thumb; extensor expansion", "Adduction of thumb; assists opposition", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Adductor Pollicis\n(Transverse head)", "Palmar surface of 3rd metacarpal (shaft)", "Ulnar sesamoid; ulnar side of proximal phalanx of thumb; extensor expansion", "Adduction of thumb at MCP joint", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ] story.append(muscle_table(thenar_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Hypothenar Muscles (Little Finger)</b>", H3)) hypo_rows = [ ("Palmaris Brevis", "Palmar aponeurosis; flexor retinaculum", "Skin of medial palm", "Wrinkles skin of hypothenar eminence; deepens hollow of palm; protects ulnar nerve at Guyon's canal", "Ulnar nerve (superficial branch) C8–T1", "Ulnar a."), ("Abductor Digiti Minimi (ADM)", "Pisiform bone; pisohamate ligament; FCU tendon", "Ulnar side of base of proximal phalanx of 5th digit", "Abduction of little finger; assists MCP flexion", "Ulnar nerve (deep branch) C8–T1", "Ulnar a."), ("Flexor Digiti Minimi Brevis (FDMB)", "Hook of hamate; flexor retinaculum", "Ulnar side of base of proximal phalanx of 5th digit", "Flexion of MCP joint of 5th digit", "Ulnar nerve (deep branch) C8–T1", "Ulnar a."), ("Opponens Digiti Minimi (ODM)", "Hook of hamate; flexor retinaculum", "Medial border of 5th metacarpal (entire length)", "Opposition of little finger; draws 5th metacarpal anteriorly + rotates it", "Ulnar nerve (deep branch) C8–T1", "Ulnar a."), ] story.append(muscle_table(hypo_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Lumbricals (4 muscles)</b>", H3)) lumb_rows = [ ("1st Lumbrical", "Lateral (radial) side of FDP tendon to index finger", "Radial side of dorsal digital expansion (index finger)", "MCP flexion; PIP & DIP extension of index finger", "Median nerve C8–T1", "Digital branches of superficial palmar arch"), ("2nd Lumbrical", "Lateral (radial) side of FDP tendon to middle finger", "Radial side of dorsal digital expansion (middle finger)", "MCP flexion; PIP & DIP extension of middle finger", "Median nerve C8–T1", "Digital branches of superficial palmar arch"), ("3rd Lumbrical", "Adjacent sides of FDP tendons to middle & ring fingers", "Radial side of dorsal digital expansion (ring finger)", "MCP flexion; PIP & DIP extension of ring finger", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("4th Lumbrical", "Adjacent sides of FDP tendons to ring & little fingers", "Radial side of dorsal digital expansion (little finger)", "MCP flexion; PIP & DIP extension of little finger", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ] story.append(muscle_table(lumb_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Interossei</b>", H3)) inter_rows = [ ("Palmar Interosseous 1", "Medial (ulnar) side of 2nd metacarpal", "Ulnar side of dorsal digital expansion of index finger", "Adducts index finger toward middle finger axis (PAD)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Palmar Interosseous 2", "Lateral (radial) side of 4th metacarpal", "Radial side of dorsal digital expansion of ring finger", "Adducts ring finger toward middle finger axis (PAD)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Palmar Interosseous 3", "Lateral (radial) side of 5th metacarpal", "Radial side of dorsal digital expansion of little finger", "Adducts little finger toward middle finger axis (PAD)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Dorsal Interosseous 1", "Adjacent sides of 1st and 2nd metacarpals (bipennate)", "Radial side of dorsal digital expansion of index finger", "Abducts index finger from midline (DAB); MCP flexion; IP extension", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Dorsal Interosseous 2", "Adjacent sides of 2nd and 3rd metacarpals", "Radial side of dorsal digital expansion of middle finger", "Abducts middle finger radially (DAB)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Dorsal Interosseous 3", "Adjacent sides of 3rd and 4th metacarpals", "Ulnar side of dorsal digital expansion of middle finger", "Abducts middle finger ulnarly (DAB)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ("Dorsal Interosseous 4", "Adjacent sides of 4th and 5th metacarpals", "Ulnar side of dorsal digital expansion of ring finger", "Abducts ring finger from midline (DAB)", "Ulnar nerve (deep branch) C8–T1", "Deep palmar arch"), ] story.append(muscle_table(inter_rows)) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("<b>Clinical Notes – Hand:</b>", H3)) notes_hand = [ "• <b>Mnemonic</b> — DAB: Dorsal Abduct; PAD: Palmar Adduct (interossei).", "• <b>Median nerve injury at wrist</b> (CTS / laceration): ape hand deformity — loss of thenar muscles (APB, OP, superficial FPB) → loss of thumb opposition; loss of 1st & 2nd lumbricals → clawing of index + middle (\"prelatic\" hand).", "• <b>Ulnar nerve injury at wrist</b> (Guyon's canal): loss of all hypothenar muscles, all interossei, medial 2 lumbricals, adductor pollicis, deep FPB → <b>main d'accoucheur</b>; clawing ring + little fingers; Froment's sign.", "• <b>Ulnar paradox</b>: more proximal injury → less clawing (FDP paralysed → less tension for intrinsic minus posture).", "• <b>Benediction sign</b>: median nerve high lesion — index + middle fail to flex on making a fist.", "• <b>Lumbricals + interossei</b> together form the intrinsic muscles of the hand responsible for the \"intrinsic plus\" position (MCP flex + IP extend).", "• <b>All intrinsic muscles of the hand are ulnar nerve EXCEPT</b>: APB, OP, superficial FPB, 1st & 2nd lumbricals (median nerve).", ] for n in notes_hand: story.append(Paragraph(n, NOTE)) story.append(PageBreak()) # ============================================================================= # ── NERVE SUPPLY SUMMARY ────────────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("7. Nerve Supply Summary", H2)) story.append(Spacer(1, 0.2*cm)) nerve_sum = [ [Paragraph("<b>Nerve</b>", HDR_CELL), Paragraph("<b>Root</b>", HDR_CELL), Paragraph("<b>Muscles Supplied</b>", HDR_CELL), Paragraph("<b>Test / Sign of Injury</b>", HDR_CELL)], [Paragraph("Axillary", CELL), Paragraph("C5–C6", CELL), Paragraph("Deltoid, Teres Minor", CELL), Paragraph("Deltoid paralysis, loss of shoulder abduction; Regimental badge anaesthesia", CELL)], [Paragraph("Musculocutaneous", CELL), Paragraph("C5–C7", CELL), Paragraph("Biceps brachii, Brachialis, Coracobrachialis", CELL), Paragraph("Loss of elbow flexion + supination; lateral forearm sensory loss", CELL)], [Paragraph("Radial (main)", CELL), Paragraph("C5–T1", CELL), Paragraph("Triceps, Anconeus, Brachioradialis, ECRL", CELL), Paragraph("Wrist drop (posterior interosseous branch for extensors)", CELL)], [Paragraph("Posterior Interosseous (Radial)", CELL), Paragraph("C7–C8", CELL), Paragraph("ECRB, EDC, EDM, ECU, Supinator, APL, EPB, EPL, EI", CELL), Paragraph("Finger drop without wrist drop; PIN palsy", CELL)], [Paragraph("Median (main)", CELL), Paragraph("C6–T1", CELL), Paragraph("Most anterior forearm flexors, thenar muscles (APB, OP, sup FPB), 1st & 2nd lumbricals", CELL), Paragraph("Ape thumb; cannot oppose; \"pen-grip\" test", CELL)], [Paragraph("Anterior Interosseous (Median)", CELL), Paragraph("C8–T1", CELL), Paragraph("FPL, FDP (digits 2–3), Pronator Quadratus", CELL), Paragraph("Cannot make OK sign; weak tip pinch", CELL)], [Paragraph("Ulnar (main)", CELL), Paragraph("C7–T1", CELL), Paragraph("FCU, FDP (digits 4–5), All hypothenar, All interossei, 3rd & 4th lumbricals, Adductor pollicis, Deep FPB", CELL), Paragraph("Claw hand (ring + little); Froment's sign; Wartenberg's sign", CELL)], [Paragraph("Long Thoracic", CELL), Paragraph("C5–C7", CELL), Paragraph("Serratus Anterior", CELL), Paragraph("Medial winging of scapula", CELL)], [Paragraph("Dorsal Scapular", CELL), Paragraph("C4–C5", CELL), Paragraph("Rhomboids, Levator Scapulae", CELL), Paragraph("Lateral winging at rest", CELL)], [Paragraph("Suprascapular", CELL), Paragraph("C4–C6", CELL), Paragraph("Supraspinatus, Infraspinatus", CELL), Paragraph("Loss of abduction initiation + external rotation; Shoulder pain", CELL)], [Paragraph("Subscapular (Upper/Lower)", CELL), Paragraph("C5–C7", CELL), Paragraph("Subscapularis, Teres Major", CELL), Paragraph("Loss of internal rotation", CELL)], [Paragraph("Thoracodorsal", CELL), Paragraph("C6–C8", CELL), Paragraph("Latissimus Dorsi", CELL), Paragraph("Loss of shoulder extension, adduction; unable to cough forcefully", CELL)], [Paragraph("Pectoral (Medial)", CELL), Paragraph("C8–T1", CELL), Paragraph("Pectoralis Major (sternocostal), Pectoralis Minor", CELL), Paragraph("Loss of arm adduction; loss of anterior axillary fold (lower part)", CELL)], [Paragraph("Pectoral (Lateral)", CELL), Paragraph("C5–C7", CELL), Paragraph("Pectoralis Major (clavicular)", CELL), Paragraph("Loss of arm adduction (upper part)", CELL)], [Paragraph("Nerve to Subclavius", CELL), Paragraph("C5–C6", CELL), Paragraph("Subclavius", CELL), Paragraph("Unstable sternoclavicular joint", CELL)], ] nerve_t = Table(nerve_sum, colWidths=[usable_w*0.16, usable_w*0.08, usable_w*0.42, usable_w*0.34], repeatRows=1) nerve_t.setStyle(TableStyle([ ("BACKGROUND", (0, 0), (-1, 0), DARK_BLUE), ("TEXTCOLOR", (0, 0), (-1, 0), WHITE), ("ROWBACKGROUNDS", (0, 1), (-1, -1), [ROW_ALT, WHITE]), ("GRID", (0, 0), (-1, -1), 0.4, GREY_BORDER), ("VALIGN", (0, 0), (-1, -1), "TOP"), ("TOPPADDING", (0, 0), (-1, -1), 3), ("BOTTOMPADDING", (0, 0), (-1, -1), 3), ("LEFTPADDING", (0, 0), (-1, -1), 4), ("RIGHTPADDING", (0, 0), (-1, -1), 4), ])) story.append(nerve_t) story.append(PageBreak()) # ============================================================================= # ── BLOOD SUPPLY SUMMARY ────────────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("8. Blood Supply Summary", H2)) story.append(Spacer(1, 0.2*cm)) blood_data = [ [Paragraph("<b>Artery</b>", HDR_CELL), Paragraph("<b>Origin</b>", HDR_CELL), Paragraph("<b>Muscles / Regions Supplied</b>", HDR_CELL)], [Paragraph("Subclavian Artery", CELL), Paragraph("Right: Brachiocephalic trunk\nLeft: Aortic arch", CELL), Paragraph("Root of upper limb; gives thyrocervical trunk (suprascapular a., transverse cervical a., inferior thyroid a.)", CELL)], [Paragraph("Suprascapular Artery", CELL), Paragraph("Thyrocervical trunk of subclavian a.", CELL), Paragraph("Supraspinatus, Infraspinatus, shoulder joint", CELL)], [Paragraph("Dorsal Scapular Artery", CELL), Paragraph("Subclavian artery (or transverse cervical a.)", CELL), Paragraph("Rhomboids, Levator scapulae, Trapezius, Serratus anterior", CELL)], [Paragraph("Thoracoacromial Artery", CELL), Paragraph("Axillary artery (2nd part)", CELL), Paragraph("Pec major, Pec minor, Deltoid, Subclavius (via clavicular branch)", CELL)], [Paragraph("Lateral Thoracic Artery", CELL), Paragraph("Axillary artery (2nd part)", CELL), Paragraph("Serratus anterior, Pec major, Pec minor, axillary lymph nodes", CELL)], [Paragraph("Subscapular Artery", CELL), Paragraph("Axillary artery (3rd part)", CELL), Paragraph("Subscapularis; divides into thoracodorsal a. (latissimus dorsi) + circumflex scapular a. (teres major, shoulder)", CELL)], [Paragraph("Anterior Circumflex Humeral Artery", CELL), Paragraph("Axillary artery (3rd part)", CELL), Paragraph("Biceps, Coracobrachialis, Deltoid (anterior head), humeral head", CELL)], [Paragraph("Posterior Circumflex Humeral Artery", CELL), Paragraph("Axillary artery (3rd part)", CELL), Paragraph("Deltoid, Teres minor, shoulder joint; travels through quadrangular space with axillary nerve", CELL)], [Paragraph("Brachial Artery", CELL), Paragraph("Continuation of axillary artery", CELL), Paragraph("Biceps brachii, Brachialis; gives profunda brachii (triceps, radial nerve)", CELL)], [Paragraph("Profunda Brachii (Deep Brachial)", CELL), Paragraph("Brachial artery", CELL), Paragraph("Triceps brachii (all heads); travels in spiral groove with radial nerve", CELL)], [Paragraph("Radial Artery", CELL), Paragraph("Brachial artery bifurcation (cubital fossa)", CELL), Paragraph("Lateral forearm muscles (ECRL, ECRB, brachioradialis); deep palmar arch; thenar branches", CELL)], [Paragraph("Ulnar Artery", CELL), Paragraph("Brachial artery bifurcation (cubital fossa)", CELL), Paragraph("Medial forearm flexors (FCU, FDS, FDP medial); superficial palmar arch; hypothenar muscles", CELL)], [Paragraph("Anterior Interosseous Artery", CELL), Paragraph("Common interosseous a. (from ulnar a.)", CELL), Paragraph("Deep anterior forearm (FDP, FPL, pronator quadratus)", CELL)], [Paragraph("Posterior Interosseous Artery", CELL), Paragraph("Common interosseous a. (from ulnar a.)", CELL), Paragraph("Posterior forearm muscles (EDC, EDM, ECU, supinator, deep group)", CELL)], [Paragraph("Superficial Palmar Arch", CELL), Paragraph("Mainly ulnar artery + superficial branch of radial a.", CELL), Paragraph("Common palmar digital arteries to digits 2–5, thenar skin", CELL)], [Paragraph("Deep Palmar Arch", CELL), Paragraph("Mainly radial artery + deep branch of ulnar a.", CELL), Paragraph("Metacarpal arteries, interossei, thenar muscles, adductor pollicis", CELL)], ] blood_t = Table(blood_data, colWidths=[usable_w*0.22, usable_w*0.23, usable_w*0.55], repeatRows=1) blood_t.setStyle(TableStyle([ ("BACKGROUND", (0, 0), (-1, 0), DARK_BLUE), ("TEXTCOLOR", (0, 0), (-1, 0), WHITE), ("ROWBACKGROUNDS", (0, 1), (-1, -1), [ROW_ALT, WHITE]), ("GRID", (0, 0), (-1, -1), 0.4, GREY_BORDER), ("VALIGN", (0, 0), (-1, -1), "TOP"), ("TOPPADDING", (0, 0), (-1, -1), 3), ("BOTTOMPADDING", (0, 0), (-1, -1), 3), ("LEFTPADDING", (0, 0), (-1, -1), 4), ("RIGHTPADDING", (0, 0), (-1, -1), 4), ])) story.append(blood_t) story.append(PageBreak()) # ============================================================================= # ── QUICK REFERENCE MNEMONICS ──────────────────────────────────────────────── # ============================================================================= story.append(Paragraph("9. Quick-Reference Mnemonics & Clinical Pearls", H2)) story.append(Spacer(1, 0.3*cm)) mnemonics = [ ("<b>SITS</b> (Rotator Cuff):", "Supraspinatus · Infraspinatus · Teres minor · Subscapularis"), ("<b>Cubital Fossa (lateral→medial)</b>:", "TAN = Tendon of biceps · Brachial Artery · Nerve (median)"), ("<b>Carpal Tunnel Contents</b>:", "FDS (×4) + FDP (×4) + FPL + Median nerve (10 structures)"), ("<b>Guyon's Canal Contents</b>:", "Ulnar artery + Ulnar nerve"), ("<b>Interossei (PAD / DAB)</b>:", "Palmar = ADduct; Dorsal = ABduct (axis = middle finger)"), ("<b>Median nerve muscles (mnemonic)</b>:", "LOAF = Lumbricals 1&2 · Opponens pollicis · Abductor pollicis brevis · Flexor pollicis brevis (superficial head)"), ("<b>Ulnar nerve innervated hand muscles</b>:", "All hand intrinsics EXCEPT LOAF (above) = ulnar nerve"), ("<b>Radial nerve (wrist drop)</b>:", "All POSTERIOR compartment muscles — any wrist/finger extensor paralysis = radial nerve"), ("<b>Abduction of arm stages</b>:", "0–15°: Supraspinatus initiates; 15–90°: Deltoid (middle); 90–180°: Trapezius + Serratus anterior (upward rotation)"), ("<b>Axillary nerve relations</b>:", "Winds around surgical neck of humerus in Quadrangular space (contains axillary nerve + PCHA)"), ("<b>Scaphoid avascular necrosis risk</b>:", "Radial artery enters from distal pole → proximal fragment has no blood supply after fracture"), ("<b>Flexor zone tendon repair mnemonic</b>:", "Zone 2 = 'No man's land' (between A1 pulley and FDS insertion) — worst prognosis for repair"), ] for title, content in mnemonics: row_data = [[Paragraph(title, CELL), Paragraph(content, CELL)]] mt = Table(row_data, colWidths=[usable_w*0.32, usable_w*0.68]) mt.setStyle(TableStyle([ ("BACKGROUND", (0, 0), (0, 0), LIGHT_BLUE), ("BACKGROUND", (1, 0), (1, 0), WHITE), ("GRID", (0, 0), (-1, -1), 0.4, GREY_BORDER), ("TOPPADDING", (0, 0), (-1, -1), 4), ("BOTTOMPADDING", (0, 0), (-1, -1), 4), ("LEFTPADDING", (0, 0), (-1, -1), 5), ("VALIGN", (0, 0), (-1, -1), "TOP"), ])) story.append(mt) story.append(Spacer(1, 1)) # footer note story.append(Spacer(1, 0.5*cm)) story.append(HRFlowable(width="100%", thickness=1, color=MID_BLUE)) story.append(Spacer(1, 0.2*cm)) footer_sty = ParagraphStyle("footer", parent=BODY, fontSize=7.5, textColor=colors.HexColor("#666666"), alignment=TA_CENTER) story.append(Paragraph( "Reference: BD Chaurasia's Human Anatomy Vol. 1 (Upper Limb) | THIEME Atlas of Anatomy: General Anatomy & Musculoskeletal System | Gray's Anatomy for Students<br/>" "Compiled for Medical/Paramedical Students. Verify dosages and clinical decisions with current guidelines.", footer_sty)) # Build PDF doc.build(story) print("PDF generated:", out_path) PYEOF

Running Command

ls -lh /tmp/workspace/upper-limb-muscles/

Your A4 PDF is ready for download:

Upper Limb Muscles BDC

PDF Document · PDF


What's inside the PDF (9 sections, ~36 pages worth of content):
SectionContent
1. Shoulder GirdleTrapezius (3 parts), SCM, Omohyoid, Levator Scapulae, Rhomboids, Subclavius, Pec Minor, Serratus Anterior
2. Shoulder JointSITS rotator cuff (4 muscles), Deltoid (3 parts), Latissimus Dorsi, Teres Major, Pec Major (3 parts), Coracobrachialis
3. ArmBiceps Brachii (2 heads), Brachialis, Triceps (3 heads), Anconeus
4. Anterior ForearmSuperficial (PT, FCR, PL, FCU), Intermediate (FDS), Deep (FDP, FPL, PQ)
5. Posterior ForearmSuperficial (Brachioradialis, ECRL, ECRB, EDC, EDM, ECU), Deep (Supinator, APL, EPB, EPL, EI)
6. HandThenar (APB, FPB, OP, AdP), Hypothenar (PB, ADM, FDMB, ODM), Lumbricals (×4), Palmar Interossei (×3), Dorsal Interossei (×4)
7. Nerve SummaryAll nerves with root values, muscles supplied, and clinical signs of injury
8. Blood SupplySubclavian → Axillary → Brachial → Radial/Ulnar → Palmar arches
9. Mnemonics & PearlsSITS, LOAF, TAN, PAD/DAB, wrist zones, axillary nerve, scaphoid, etc.
Each muscle entry includes: Origin · Insertion · Action(s) · Nerve Supply (with root values) · Blood Supply - presented in colour-coded A4 tables with alternating rows for easy reading. Clinical notes follow each section.
Note: BDC Chaurasia was not available in the digital library, so this PDF is compiled from THIEME Atlas of Anatomy + Gray's standards, which align precisely with BDC Chaurasia content for the upper limb.
This is a shared conversation. Sign in to Orris to start your own chat.