hey orris
share me some general anatomy notes on topic joints for 1st year BPT student
| Type | Also Known As | Connecting Tissue | Movement | Examples | Location |
|---|---|---|---|---|---|
| Fibrous | Synarthroses | Dense connective tissue | Minimal / none | Sutures, Syndesmoses, Gomphoses | Skull, forearm, teeth |
| Cartilaginous | Amphiarthroses | Hyaline cartilage or fibrocartilage | Slightly mobile | Pubic symphysis, Intervertebral discs | Pelvis, spine |
| Synovial | Diarthroses | Synovial cavity + fluid | Freely moveable | Elbow, shoulder, knee, hip, wrist | Limbs, jaw |
| Subtype | Description | Example |
|---|---|---|
| Sutures | Thin sutural ligament between skull bones; eventually ossify after growth | Coronal suture, sagittal suture |
| Gomphoses | Periodontal ligament anchors tooth root into bone socket | Teeth in jaw |
| Syndesmoses | Ligament-like connective tissue bridges two bones | Radius-ulna interosseous membrane; ligamentum flavum between vertebral laminae |
| Subtype | Cartilage Type | Example |
|---|---|---|
| Primary (Synchondroses) | Hyaline cartilage | Epiphyseal growth plate; 1st rib-sternum |
| Secondary (Symphyses) | Fibrocartilage | Pubic symphysis; intervertebral discs |
Intervertebral disc structure: An outer ring of tough fibrocartilage (annulus fibrosus) + inner gel-like core (nucleus pulposus). Functions to cushion adjacent vertebrae and absorb shock.
Synchondroses allow bone growth and eventually become completely ossified.

| Type | Axes | Movements Permitted | Example |
|---|---|---|---|
| Plane (Gliding) | - | Sliding/gliding | Acromioclavicular joint, intercarpal joints |
| Hinge | Uniaxial (transverse) | Flexion, Extension | Elbow (humeroulnar), ankle |
| Pivot | Uniaxial (longitudinal) | Rotation | Atlantoaxial joint, proximal radioulnar |
| Bicondylar | Mainly uniaxial + slight rotation | Flex/Ext + limited rotation | Knee joint, temporomandibular |
| Condylar (Ellipsoid) | Biaxial | Flex, Ext, Abd, Add, Circumduction | Wrist (radiocarpal) |
| Saddle | Biaxial | Flex, Ext, Abd, Add, Circumduction | 1st carpometacarpal (thumb) |
| Ball-and-Socket | Multiaxial | Flex, Ext, Abd, Add, Circumduction, Rotation | Shoulder, Hip |

| Movement | Description |
|---|---|
| Flexion | Decreasing angle between body parts |
| Extension | Increasing angle between body parts |
| Abduction | Moving away from midline |
| Adduction | Moving toward midline |
| Rotation | Turning around a longitudinal axis |
| Circumduction | Cone-shaped movement (flex + ext + abd + add combined) |
| Pronation / Supination | Rotation of forearm |
| Inversion / Eversion | Sole of foot faces inward / outward |
| Dorsiflexion / Plantarflexion | Foot moves up / down |
| Feature | Fibrous | Cartilaginous | Synovial |
|---|---|---|---|
| Cavity | None | None | Present |
| Connecting tissue | Dense CT | Cartilage | Synovial fluid |
| Movement | None/minimal | Slight | Free |
| Term | Synarthrosis | Amphiarthrosis | Diarthrosis |
| BPT relevance | Low | Moderate | High |
share me some general anatomy notes on topic joints for 1st year BPT student
Create a study guide PDF I can download and print
mkdir -p /home/daytona/workspace/joints-study-guide && ls /home/daytona/workspac…
~/joints-study-guide/create_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, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
from reportlab.lib.colors import HexColor
OUTPUT = "/home/daytona/workspace/joints-study-guide/Joints_Study_Guide_BPT.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1A3A5C")
MID_BLUE = HexColor("#2E6DA4")
LIGHT_BLUE = HexColor("#D6E8F7")
ACCENT = HexColor("#E8A020")
LIGHT_GREY = HexColor("#F5F5F5")
TABLE_HEAD = HexColor("#2E6DA4")
TABLE_ALT = HexColor("#EBF4FB")
WHITE = colors.white
BLACK = colors.black
# ── Document setup ──────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Joints – General Anatomy Study Guide",
author="Orris AI • 1st Year BPT",
)
# ── Styles ───────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
def style(name, parent="Normal", **kw):
s = ParagraphStyle(name, parent=base[parent], **kw)
return s
S_TITLE = style("S_TITLE", parent="Title",
fontSize=24, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=4, leading=30)
S_SUBTITLE = style("S_SUBTITLE",
fontSize=11, textColor=WHITE, alignment=TA_CENTER,
spaceAfter=2)
S_H1 = style("S_H1",
fontSize=14, textColor=WHITE, leading=18,
spaceBefore=14, spaceAfter=4, fontName="Helvetica-Bold")
S_H2 = style("S_H2",
fontSize=12, textColor=DARK_BLUE, leading=16,
spaceBefore=10, spaceAfter=3, fontName="Helvetica-Bold")
S_H3 = style("S_H3",
fontSize=11, textColor=MID_BLUE, leading=15,
spaceBefore=6, spaceAfter=2, fontName="Helvetica-Bold")
S_BODY = style("S_BODY",
fontSize=10, leading=15, spaceAfter=4,
alignment=TA_JUSTIFY, textColor=HexColor("#222222"))
S_BULLET = style("S_BULLET",
fontSize=10, leading=14, spaceAfter=3,
leftIndent=16, bulletIndent=6, textColor=HexColor("#222222"))
S_NOTE = style("S_NOTE",
fontSize=9, leading=13, spaceAfter=4,
leftIndent=10, textColor=HexColor("#555555"),
borderPad=4, backColor=HexColor("#FFF8E7"),
fontName="Helvetica-Oblique")
S_TH = style("S_TH",
fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
S_TD = style("S_TD",
fontSize=9, textColor=BLACK,
alignment=TA_CENTER, leading=12)
S_TD_L = style("S_TD_L",
fontSize=9, textColor=BLACK,
alignment=TA_LEFT, leading=12)
S_FOOTER = style("S_FOOTER",
fontSize=8, textColor=HexColor("#888888"), alignment=TA_CENTER)
# ── Header / footer callbacks ─────────────────────────────────────────────
def draw_page(canvas, doc):
canvas.saveState()
W, H = A4
# top bar
canvas.setFillColor(DARK_BLUE)
canvas.rect(0, H - 1.6*cm, W, 1.6*cm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 9)
canvas.drawString(2*cm, H - 1.1*cm, "JOINTS – General Anatomy Study Guide")
canvas.setFont("Helvetica", 9)
canvas.drawRightString(W - 2*cm, H - 1.1*cm, "1st Year BPT")
# accent line
canvas.setFillColor(ACCENT)
canvas.rect(0, H - 1.65*cm, W, 0.18*cm, fill=1, stroke=0)
# footer
canvas.setFillColor(LIGHT_GREY)
canvas.rect(0, 0, W, 1.4*cm, fill=1, stroke=0)
canvas.setFillColor(HexColor("#888888"))
canvas.setFont("Helvetica", 8)
canvas.drawCentredString(W/2, 0.55*cm,
f"Page {doc.page} | Orris AI | Sources: Gray's Anatomy for Students • Firestein & Kelley's Rheumatology • Junqueira's Basic Histology")
canvas.restoreState()
# ── Helper: section header block ─────────────────────────────────────────
def section_header(text, num=""):
label = f"{num}. {text}" if num else text
tbl = Table([[Paragraph(label, S_H1)]], colWidths=[16.6*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), MID_BLUE),
("ROUNDEDCORNERS", [4,4,4,4]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return tbl
def make_table(headers, rows, col_widths, alt=True):
header_row = [Paragraph(h, S_TH) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
styled = []
for j, cell in enumerate(row):
st = S_TD_L if j == 0 else S_TD
styled.append(Paragraph(str(cell), st))
data.append(styled)
tbl = Table(data, colWidths=col_widths, repeatRows=1)
ts = [
("BACKGROUND", (0,0), (-1,0), TABLE_HEAD),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("GRID", (0,0), (-1,-1), 0.35, HexColor("#CCCCCC")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, TABLE_ALT] if alt else [WHITE]),
]
tbl.setStyle(TableStyle(ts))
return tbl
def bullet(text):
return Paragraph(f"• {text}", S_BULLET)
def body(text):
return Paragraph(text, S_BODY)
def sp(h=6):
return Spacer(1, h)
def hr():
return HRFlowable(width="100%", thickness=0.5,
color=HexColor("#CCCCCC"), spaceAfter=6, spaceBefore=2)
# ════════════════════════════════════════════════════════════════════════════
# BUILD CONTENT
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ────────────────────────────────────────────────────────────────────
cover = Table(
[[Paragraph("JOINTS", S_TITLE)],
[Paragraph("General Anatomy – Study Guide", S_SUBTITLE)],
[Paragraph("1st Year Bachelor of Physiotherapy (BPT)", S_SUBTITLE)],
[sp(8)],
[Paragraph("Topics: Classification • Fibrous • Cartilaginous • Synovial •<br/>Types of Synovial Joints • Movements • Clinical Notes", S_SUBTITLE)]],
colWidths=[16.6*cm]
)
cover.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
("RIGHTPADDING", (0,0), (-1,-1), 14),
("ROUNDEDCORNERS", [8,8,8,8]),
]))
story += [sp(10), cover, sp(20)]
# ── 1. DEFINITION ─────────────────────────────────────────────────────────
story += [section_header("Definition of a Joint", "1"), sp(6)]
story += [
body("A <b>joint (articulation / arthros)</b> is the point where two or more bones meet. "
"Joints are essential for skeletal motion, function and quality of life. They display "
"a broad spectrum of shapes, sizes, tissue composition and overall organisation, each "
"uniquely fitted to their anatomic location and the type of movement required."),
sp(4),
bullet("<b>Arthrology</b> = the study of joints."),
bullet("Blood vessels and nerves that cross a joint contribute <b>articular branches</b> to it."),
bullet("<b>Hilton's Law:</b> Nerves innervating muscles acting on a joint also send sensory "
"branches to that joint's capsule – clinically important for understanding referred pain."),
sp(8),
]
# ── 2. CLASSIFICATION ────────────────────────────────────────────────────
story += [section_header("Classification of Joints", "2"), sp(6)]
story += [
body("Joints are classified by two main, complementary systems:"),
bullet("<b>Structural</b> – based on the tissue type connecting the bones (fibrous, cartilaginous, synovial)"),
bullet("<b>Functional</b> – based on the degree of movement permitted (synarthrosis, amphiarthrosis, diarthrosis)"),
sp(8),
]
cls_headers = ["Type", "Functional Name", "Connecting Tissue", "Movement", "Examples"]
cls_rows = [
["Fibrous", "Synarthrosis", "Dense connective tissue", "None / minimal", "Sutures, Syndesmoses, Gomphoses"],
["Cartilaginous", "Amphiarthrosis", "Hyaline cartilage / fibrocartilage", "Slightly mobile","Pubic symphysis, IVD"],
["Synovial", "Diarthrosis", "Synovial cavity + fluid", "Freely mobile", "Shoulder, Hip, Knee, Elbow"],
]
story += [make_table(cls_headers, cls_rows, [3.0*cm, 3.2*cm, 4.0*cm, 3.0*cm, 3.4*cm]), sp(12)]
# ── 3. FIBROUS JOINTS ────────────────────────────────────────────────────
story += [section_header("Fibrous Joints (Synarthroses)", "3"), sp(6)]
story += [
body("Fibrous joints are bridged by <b>dense connective tissue</b>. They have <b>no joint cavity</b> "
"and permit little to no movement. Three subtypes exist:"),
sp(6),
]
fib_headers = ["Subtype", "Description", "Example"]
fib_rows = [
["Sutures", "Thin sutural ligament between skull bones; eventually ossify at end of skull growth", "Coronal, Sagittal, Lambdoid sutures"],
["Gomphoses", "Periodontal fibrous tissue anchors tooth root into bony jaw socket", "Teeth in mandible / maxilla"],
["Syndesmoses", "Ligament-like CT bridges two bones; slightly moveable", "Radius–Ulna interosseous membrane; Ligamentum flavum"],
]
story += [make_table(fib_headers, fib_rows, [3.2*cm, 8.4*cm, 5.0*cm]), sp(12)]
# ── 4. CARTILAGINOUS JOINTS ──────────────────────────────────────────────
story += [section_header("Cartilaginous Joints (Amphiarthroses)", "4"), sp(6)]
story += [
body("Cartilaginous joints are bridged by cartilage and allow <b>slight movement</b>. Two subtypes:"),
sp(6),
]
cart_headers = ["Subtype", "Also Called", "Cartilage Type", "Function", "Examples"]
cart_rows = [
["Primary", "Synchondrosis", "Hyaline cartilage", "Allows bone growth; eventually ossifies", "Epiphyseal growth plate; 1st rib–sternum"],
["Secondary", "Symphysis", "Fibrocartilage", "Cushioning & slight mobility", "Pubic symphysis; Intervertebral discs"],
]
story += [make_table(cart_headers, cart_rows, [2.4*cm, 3.0*cm, 3.4*cm, 4.2*cm, 3.6*cm]), sp(8)]
story += [
Paragraph("Intervertebral Disc Structure:", S_H3),
bullet("<b>Annulus fibrosus</b> – tough outer ring of fibrocartilage, resists tensile forces"),
bullet("<b>Nucleus pulposus</b> – gel-like inner core, acts as a shock absorber"),
sp(12),
]
# ── 5. SYNOVIAL JOINTS ───────────────────────────────────────────────────
story += [section_header("Synovial Joints (Diarthroses)", "5"), sp(6)]
story += [
body("Synovial joints are the <b>most numerous</b> and clinically relevant joints in the body – "
"the primary focus for physiotherapy practice. They are characterised by a <b>synovial cavity</b> "
"lined with synovial membrane and filled with lubricating synovial fluid."),
sp(8),
Paragraph("5.1 Key Features:", S_H2), sp(4),
]
features = [
("<b>Articular Cartilage</b>",
"Hyaline cartilage covers bone ends. Bones do NOT directly contact each other. "
"Appears as a 'gap' on X-ray because cartilage is radiolucent."),
("<b>Joint Capsule</b>",
"Encloses the joint completely. Two layers: (a) <b>Outer fibrous membrane</b> – "
"dense CT, stabilises joint, thickenings form intrinsic ligaments. "
"(b) <b>Inner synovial membrane</b> – highly vascular, produces synovial fluid."),
("<b>Synovial Fluid</b>",
"Lubricates and nourishes articular cartilage. Contains water, plasma filtrate, "
"hyaluronic acid, lubricin and phospholipids. "
"Macrophage-like synovial cells remove wear debris; "
"fibroblast-like cells synthesise hyaluronan."),
("<b>Articular Discs / Menisci</b>",
"Fibrocartilage pads inside some joints (e.g. knee menisci, TMJ disc). "
"Absorb compression, adjust contours, increase range of movement."),
("<b>Fat Pads</b>",
"Between synovial membrane and capsule; glide in/out as joint contours change."),
("<b>Bursae</b>",
"Closed synovial sacs outside the joint; reduce friction between tendons, bone and skin."),
("<b>Ligaments</b>",
"Capsular thickenings OR separate extra-capsular structures; reinforce and stabilise the joint."),
]
feat_data = [[Paragraph(f[0], S_TD_L), Paragraph(f[1], S_TD_L)] for f in features]
feat_tbl = Table(feat_data, colWidths=[4.4*cm, 12.2*cm])
feat_tbl.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BACKGROUND", (0,0), (0,-1), LIGHT_BLUE),
("ROWBACKGROUNDS",(1,0),(-1,-1), [WHITE, TABLE_ALT]),
]))
story += [feat_tbl, sp(12)]
# ── 6. TYPES OF SYNOVIAL JOINTS ─────────────────────────────────────────
story += [section_header("Types of Synovial Joints", "6"), sp(6)]
story += [
body("Synovial joints are sub-classified by the <b>shape of their articular surfaces</b> "
"(determines type and axes of movement):"),
sp(6),
]
syn_headers = ["Type", "Axes", "Movements", "Example"]
syn_rows = [
["Plane (Gliding)", "—", "Sliding / gliding", "Acromioclavicular, intercarpal joints"],
["Hinge", "Uniaxial", "Flexion, Extension", "Elbow (humeroulnar), ankle"],
["Pivot", "Uniaxial", "Rotation", "Atlantoaxial (C1–C2), proximal radioulnar"],
["Bicondylar", "Mainly uni", "Flex/Ext + limited rotation", "Knee, temporomandibular"],
["Condylar (Ellipsoid)", "Biaxial", "Flex, Ext, Abd, Add, Circumduction (limited)", "Wrist (radiocarpal)"],
["Saddle", "Biaxial", "Flex, Ext, Abd, Add, Circumduction", "1st carpometacarpal (thumb)"],
["Ball-and-Socket", "Multiaxial", "Flex, Ext, Abd, Add, Circumduction, Rotation", "Shoulder (glenohumeral), Hip"],
]
story += [make_table(syn_headers, syn_rows, [3.5*cm, 2.2*cm, 5.5*cm, 5.4*cm]), sp(12)]
# ── 7. MOVEMENTS ─────────────────────────────────────────────────────────
story += [section_header("Movements at Joints", "7"), sp(6)]
mv_headers = ["Movement", "Description"]
mv_rows = [
["Flexion", "Decreasing the angle between body parts"],
["Extension", "Increasing the angle between body parts"],
["Hyperextension", "Extension beyond the anatomical position"],
["Abduction", "Moving a limb away from the midline"],
["Adduction", "Moving a limb toward the midline"],
["Rotation (medial)", "Rotating toward the midline"],
["Rotation (lateral)", "Rotating away from the midline"],
["Circumduction", "Circular / cone-shaped movement (Flex + Ext + Abd + Add combined)"],
["Pronation", "Medial rotation of forearm (palm faces down)"],
["Supination", "Lateral rotation of forearm (palm faces up)"],
["Dorsiflexion", "Foot moves toward the shin (toes up)"],
["Plantarflexion", "Foot points downward (toes down)"],
["Inversion", "Sole of foot faces inward"],
["Eversion", "Sole of foot faces outward"],
["Protraction", "Anterior movement (e.g. jaw, scapula)"],
["Retraction", "Posterior movement (e.g. jaw, scapula)"],
["Elevation", "Moving a structure superiorly"],
["Depression", "Moving a structure inferiorly"],
["Opposition", "Thumb moves to touch fingertips"],
]
story += [make_table(mv_headers, mv_rows, [5.0*cm, 11.6*cm]), sp(12)]
# ── 8. NERVE & BLOOD SUPPLY ─────────────────────────────────────────────
story += [section_header("Nerve & Blood Supply to Joints", "8"), sp(6)]
story += [
body("All joints receive a nerve and blood supply derived from structures passing near them:"),
bullet("<b>Articular arteries</b> – branches of vessels crossing the joint; form peri-articular anastomoses to ensure supply during movement."),
bullet("<b>Articular nerves</b> – carry sensory fibres (pain, proprioception, pressure) and sympathetic vasomotor fibres."),
sp(6),
Paragraph("Hilton's Law (Important for BPT!):", S_H3),
body("<i>\"The nerve supplying a joint also supplies the muscles that move the joint AND the skin covering those muscles.\"</i>"),
body("This explains why joint pain can be referred to distant skin areas or felt in the muscles around a joint."),
sp(12),
]
# ── 9. CLINICAL NOTES ───────────────────────────────────────────────────
story += [section_header("Clinical Notes for BPT Practice", "9"), sp(6)]
clinicals = [
("Osteoarthritis (OA)",
"Degenerative loss of articular cartilage. Cartilage loses water and proteoglycans → becomes brittle → wears away. "
"Underlying bone thickens, develops fissures, cysts and osteophytes. "
"X-ray signs: joint space narrowing + osteophytes. "
"<b>PT Management:</b> low-impact exercise, strengthening, weight reduction, hydrotherapy."),
("Rheumatoid Arthritis (RA)",
"Autoimmune inflammation of the synovial membrane (synovitis) → pannus formation → destroys cartilage and bone. "
"Affects multiple joints symmetrically. Morning stiffness >1 hour is a hallmark. "
"<b>PT Management:</b> joint protection, ROM exercises, splinting during acute flare, strengthening in remission."),
("Sprain",
"Ligament injury at a joint from excessive force beyond normal ROM. Graded I–III. "
"Common sites: ankle (lateral ligament complex), knee (ACL, MCL). "
"<b>PT Management:</b> PRICE initially → progressive mobilisation → strengthening."),
("Dislocation",
"Complete loss of contact between articulating bone surfaces. "
"Shoulder and hip are common sites. "
"<b>PT Management:</b> post-reduction rehabilitation, strengthening rotator cuff / hip stabilisers."),
("Bursitis",
"Inflammation of a bursa, often due to repetitive overuse or direct trauma. "
"Common: subacromial, prepatellar, trochanteric bursae. "
"<b>PT Management:</b> rest, ice, NSAIDs, corrective movement re-education."),
]
for title, text in clinicals:
clin_tbl = Table(
[[Paragraph(title, S_H3), Paragraph(text, S_BODY)]],
colWidths=[4.0*cm, 12.6*cm]
)
clin_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_BLUE),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.3, HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story += [clin_tbl, sp(5)]
story += [sp(12)]
# ── 10. QUICK REVISION TABLE ────────────────────────────────────────────
story += [section_header("Quick Revision Summary", "10"), sp(6)]
rev_headers = ["Feature", "Fibrous", "Cartilaginous", "Synovial"]
rev_rows = [
["Cavity", "None", "None", "Present"],
["Tissue", "Dense CT", "Cartilage", "Synovial fluid"],
["Movement", "None / minimal", "Slight", "Free / extensive"],
["Greek term", "Synarthrosis", "Amphiarthrosis", "Diarthrosis"],
["Subtypes", "Suture, Gomphosis, Syndesmosis", "Synchondrosis, Symphysis", "Plane, Hinge, Pivot, Condylar, Saddle, Ball & Socket"],
["Clinical importance", "Low (skull trauma)", "Moderate (spine)", "High (arthritis, sprains, PT)"],
["BPT relevance", "Low", "Moderate", "Very High"],
]
story += [make_table(rev_headers, rev_rows, [3.5*cm, 3.8*cm, 3.8*cm, 5.5*cm]), sp(16)]
# ── SOURCES ──────────────────────────────────────────────────────────────
story += [hr(),
Paragraph("References / Sources", S_H2),
bullet("Gray's Anatomy for Students – Chapter 1: Body Systems"),
bullet("Firestein & Kelley's Textbook of Rheumatology – Classification of Joints (Table 1.1)"),
bullet("Junqueira's Basic Histology – Joints & Connective Tissue"),
bullet("Rosen's Emergency Medicine – Pathophysiology of joint injuries"),
sp(4),
Paragraph("Prepared by <b>Orris AI</b> | July 2026", S_FOOTER),
]
# ── BUILD ────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=draw_page, onLaterPages=draw_page)
print("PDF created:", OUTPUT)
cd /home/daytona/workspace/joints-study-guide && python create_pdf.py 2>&1
ls -lh /home/daytona/workspace/joints-study-guide/Joints_Study_Guide_BPT.pdf
Joints Study Guide BPT
PDF Document · PDF
| Section | Content |
|---|---|
| Cover page | Title block with topic overview |
| 1. Definition | What a joint is; Hilton's Law |
| 2. Classification | Structural + functional table (Fibrous / Cartilaginous / Synovial) |
| 3. Fibrous Joints | Sutures, Gomphoses, Syndesmoses with examples |
| 4. Cartilaginous Joints | Synchondroses, Symphyses; IVD structure |
| 5. Synovial Joints | All 7 key features with detailed descriptions |
| 6. Types of Synovial Joints | Full table - Plane to Ball-and-Socket with movements |
| 7. Movements | 18 joint movements defined |
| 8. Nerve & Blood Supply | Articular branches + Hilton's Law |
| 9. Clinical Notes | OA, RA, Sprain, Dislocation, Bursitis + PT management |
| 10. Quick Revision Table | Side-by-side comparison of all 3 joint types |
the file is not downloading what's the issue check it out
ls -lh /home/daytona/workspace/joints-study-guide/ && python3 -c " from pypdf im…
python3 -c " import base64, os path = '/home/daytona/workspace/joints-study-guid…
Joints Study Guide BPT
PDF Document · PDF
download
HTML File · HTML
/home/daytona/workspace/joints-study-guide/Joints_Study_Guide_BPT.pdf