I need about detailed important points of morphology of flowering plants
morphology of flowering plants detailed notes root stem leaf flower fruit seed
https://careerpointgroup.com/wp-content/uploads/2022/11/Bota…
| Type | Origin | Example |
|---|---|---|
| Tap root | From radicle; has main + lateral branches | Dicots (mustard, gram) |
| Fibrous root | Radicle short-lived; replaced by many thin roots | Monocots (wheat, grass) |
| Adventitious root | Arise from stem/leaf, not radicle | Banyan, grass, Bryophyllum |
| Modification | Function | Example |
|---|---|---|
| Tendrils | Climbing | Pea (Pisum sativum) - leaflets modified; Lathyrus - stipules modified |
| Spines | Protection | Cactus (leaves → spines); Aloe |
| Phyllode | Photosynthesis (petiole modified) | Acacia auriculiformis |
| Leaf pitcher (passive) | Insect trapping | Nepenthes |
| Leaf pitcher (active) | Insect trapping | Utricularia |
| Fleshy leaves | Water/food storage | Onion (scale leaves), Aloe |
| Hooks | Climbing | Bignonia (terminal leaflet → hook) |
| Reproductive leaves | Vegetative propagation | Bryophyllum (notches on leaf margin) |
| Whorl | Name | Function |
|---|---|---|
| 1st (outermost) | Calyx (sepals) | Protection of floral bud |
| 2nd | Corolla (petals) | Attract pollinators |
| 3rd | Androecium (stamens) | Male reproductive organ |
| 4th (innermost) | Gynoecium (pistil/carpels) | Female reproductive organ |
| Feature | Dicot | Monocot |
|---|---|---|
| Cotyledons | 2 | 1 |
| Venation | Reticulate | Parallel |
| Floral parts | Tetramerous/Pentamerous (4s or 5s) | Trimerous (3s) |
| Root system | Tap root | Fibrous root |
| Vascular bundles | Arranged in ring | Scattered |
To write an a note book
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
~/morphology-notebook/create_notebook.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, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfgen import canvas
from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate
from reportlab.platypus.frames import Frame
OUTPUT = "/home/daytona/workspace/morphology-notebook/Morphology_of_Flowering_Plants.pdf"
# ─── Colors ───────────────────────────────────────────────────────────────────
GREEN_DARK = colors.HexColor("#1B5E20")
GREEN_MED = colors.HexColor("#2E7D32")
GREEN_LIGHT = colors.HexColor("#A5D6A7")
GREEN_PALE = colors.HexColor("#E8F5E9")
YELLOW_HIGH = colors.HexColor("#FFF9C4")
BLUE_ACCENT = colors.HexColor("#1565C0")
ORANGE_ACC = colors.HexColor("#E65100")
WHITE = colors.white
BLACK = colors.black
GREY_LIGHT = colors.HexColor("#F5F5F5")
GREY_BORDER = colors.HexColor("#BDBDBD")
# ─── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
title_style = ParagraphStyle("NoteTitle",
fontName="Helvetica-Bold", fontSize=26, textColor=WHITE,
alignment=TA_CENTER, leading=34, spaceAfter=6)
subject_style = ParagraphStyle("Subject",
fontName="Helvetica", fontSize=13, textColor=GREEN_PALE,
alignment=TA_CENTER, leading=18)
ch_title = ParagraphStyle("ChTitle",
fontName="Helvetica-Bold", fontSize=16, textColor=WHITE,
alignment=TA_LEFT, leading=22, leftIndent=8)
h1 = ParagraphStyle("H1",
fontName="Helvetica-Bold", fontSize=13, textColor=GREEN_DARK,
spaceBefore=14, spaceAfter=4, leading=18, leftIndent=0)
h2 = ParagraphStyle("H2",
fontName="Helvetica-Bold", fontSize=11, textColor=BLUE_ACCENT,
spaceBefore=10, spaceAfter=3, leading=16, leftIndent=10)
h3 = ParagraphStyle("H3",
fontName="Helvetica-BoldOblique", fontSize=10, textColor=ORANGE_ACC,
spaceBefore=7, spaceAfter=2, leading=14, leftIndent=18)
body = ParagraphStyle("Body",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
spaceBefore=2, spaceAfter=2, leading=15, leftIndent=14,
alignment=TA_JUSTIFY)
bullet = ParagraphStyle("Bullet",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
spaceBefore=2, spaceAfter=2, leading=15, leftIndent=24,
bulletIndent=14, alignment=TA_LEFT)
note_box = ParagraphStyle("NoteBox",
fontName="Helvetica-Oblique", fontSize=9, textColor=colors.HexColor("#4A148C"),
spaceBefore=4, spaceAfter=4, leading=14, leftIndent=12, rightIndent=12)
bold_body = ParagraphStyle("BoldBody",
fontName="Helvetica-Bold", fontSize=9.5, textColor=BLACK,
spaceBefore=2, spaceAfter=2, leading=15, leftIndent=14)
# ─── Page numbering ───────────────────────────────────────────────────────────
def add_page_number(canvas_obj, doc):
canvas_obj.saveState()
canvas_obj.setFont("Helvetica", 8)
canvas_obj.setFillColor(colors.HexColor("#757575"))
w, h = A4
canvas_obj.drawRightString(w - 1.5*cm, 1*cm,
f"Morphology of Flowering Plants | Page {doc.page}")
canvas_obj.setStrokeColor(GREEN_LIGHT)
canvas_obj.setLineWidth(0.5)
canvas_obj.line(1.5*cm, 1.3*cm, w - 1.5*cm, 1.3*cm)
canvas_obj.restoreState()
# ─── Helper: colored chapter banner ──────────────────────────────────────────
def chapter_banner(title_text, subtitle=""):
data = [[Paragraph(title_text, ch_title)]]
if subtitle:
data.append([Paragraph(f'<font size="9" color="#A5D6A7">{subtitle}</font>', ch_title)])
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GREEN_MED),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS", [6]),
]))
return t
def info_table(headers, rows, col_widths=None):
if col_widths is None:
col_widths = [17*cm / len(headers)] * len(headers)
header_row = [Paragraph(f'<b>{h}</b>', ParagraphStyle("TH",
fontName="Helvetica-Bold", fontSize=9, textColor=WHITE,
alignment=TA_CENTER, leading=12)) for h in headers]
table_data = [header_row]
for row in rows:
table_data.append([Paragraph(str(cell), ParagraphStyle("TD",
fontName="Helvetica", fontSize=9, textColor=BLACK,
alignment=TA_LEFT, leading=13, leftIndent=4)) for cell in row])
t = Table(table_data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), GREEN_DARK),
("BACKGROUND", (0,1), (-1,-1), GREY_LIGHT),
("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, GREY_LIGHT]),
("GRID", (0,0), (-1,-1), 0.4, GREY_BORDER),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
for i in range(1, len(table_data)):
if i % 2 == 0:
style.append(("BACKGROUND", (0,i), (-1,i), GREEN_PALE))
t.setStyle(TableStyle(style))
return t
def highlight_box(text, bg=YELLOW_HIGH, border=colors.HexColor("#F9A825")):
data = [[Paragraph(text, note_box)]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1, border),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return t
def bp(text):
return Paragraph(f"\u2022 {text}", bullet)
def sp(n=4):
return Spacer(1, n)
# ─── Build content ────────────────────────────────────────────────────────────
story = []
# ══ COVER PAGE ══════════════════════════════════════════════════════════════
cover_data = [[
Spacer(1, 2*cm),
Paragraph("MORPHOLOGY OF", title_style),
Paragraph("FLOWERING PLANTS", title_style),
Spacer(1, 0.4*cm),
Paragraph("Class XI Biology | Complete Study Notes", subject_style),
Spacer(1, 0.6*cm),
HRFlowable(width="80%", thickness=1.5, color=GREEN_LIGHT, spaceAfter=10),
Paragraph("Angiosperms \u2022 Root \u2022 Stem \u2022 Leaf \u2022 Inflorescence \u2022 Flower \u2022 Fruit \u2022 Seed",
ParagraphStyle("cov_sub", fontName="Helvetica", fontSize=10,
textColor=GREEN_LIGHT, alignment=TA_CENTER, leading=16)),
Spacer(1, 2*cm),
]]
cover_table = Table([[item] for item in cover_data[0]], colWidths=[17*cm])
cover_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GREEN_DARK),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
story.append(cover_table)
story.append(PageBreak())
# ══ INDEX PAGE ════════════════════════════════════════════════════════════════
story.append(Paragraph("TABLE OF CONTENTS", h1))
story.append(HRFlowable(width="100%", thickness=1, color=GREEN_MED, spaceAfter=8))
toc_items = [
("1.", "Introduction to Morphology", "3"),
("2.", "Root - Structure, Types & Modifications", "3"),
("3.", "Stem - Structure, Forms & Modifications", "5"),
("4.", "Leaf - Parts, Venation & Modifications", "7"),
("5.", "Inflorescence - Racemose & Cymose", "9"),
("6.", "Flower - Whorls, Symmetry & Parts", "10"),
("7.", "Fruit - Types & Classification", "13"),
("8.", "Seed - Structure & Dispersal", "15"),
("9.", "Key Comparisons: Dicot vs Monocot", "16"),
("10.", "Important Facts & Special Notes", "17"),
]
toc_data = [[Paragraph(f'<b>{n}</b>', body), Paragraph(title, body), Paragraph(f'<b>{pg}</b>', bold_body)]
for n, title, pg in toc_items]
toc_table = Table(toc_data, colWidths=[1*cm, 13.5*cm, 1.5*cm])
toc_table.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0, WHITE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("ROWBACKGROUNDS", (0,0), (-1,-1), [WHITE, GREEN_PALE]),
("LEFTPADDING", (0,0), (-1,-1), 6),
]))
story.append(toc_table)
story.append(PageBreak())
# ══ CHAPTER 1: INTRODUCTION ═══════════════════════════════════════════════════
story.append(chapter_banner("Chapter 1: Introduction to Morphology", "The science of plant form and structure"))
story.append(sp(8))
story.append(Paragraph("What is Morphology?", h1))
story.append(Paragraph(
"<b>Morphology</b> (Greek: <i>morphe</i> = form; <i>logos</i> = study) is the branch of biology "
"that deals with the study of forms, features, and relative positions of different plant organs such as "
"roots, stems, leaves, flowers, seeds, and fruits.", body))
story.append(sp())
story.append(Paragraph("Angiosperms (Flowering Plants)", h2))
for pt in [
"Seed-bearing plants where seeds are <b>always enclosed</b> within an ovary (inside a fruit).",
"Sporophylls are organized into <b>flowers</b> — the defining feature.",
"Classified into <b>Monocots</b> (one cotyledon) and <b>Dicots</b> (two cotyledons).",
"Body divided into two systems: <b>Root System</b> (underground) and <b>Shoot System</b> (aerial).",
"Shoot system = stem + branches + leaves + flowers + fruits.",
"<b>Vegetative parts</b>: root, stem, leaves | <b>Reproductive parts</b>: flowers, fruits, seeds.",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(highlight_box(
"\U0001F4CC <b>Key Fact:</b> Smallest angiosperm = <i>Wolffia</i> (< 0.1 mm) | "
"Tallest angiosperm = <i>Eucalyptus regnans</i> (> 114 m) | "
"Only marine angiosperm = <i>Zostera</i>"))
story.append(PageBreak())
# ══ CHAPTER 2: ROOT ═══════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 2: Root", "Structure, Types, Regions & Modifications"))
story.append(sp(8))
story.append(Paragraph("Basic Features of Root", h1))
for pt in [
"Descending, <b>non-green</b>, underground part — lacks nodes, internodes, leaves, and buds.",
"Develops from the <b>radicle</b> of the embryo.",
"Shows <b>positive geotropism</b> (grows toward gravity) and <b>positive hydrotropism</b>.",
"Responsible for anchorage, absorption, conduction, and storage.",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(Paragraph("Types of Root Systems", h2))
story.append(info_table(
["Type", "Origin", "Characteristics", "Example"],
[
["Tap Root", "From radicle", "One main root with lateral secondary & tertiary branches", "Dicots: Mustard, Gram, Carrot"],
["Fibrous Root", "Radicle short-lived", "Many thin roots of equal thickness from stem base", "Monocots: Wheat, Grass, Onion"],
["Adventitious Root", "From stem/leaf", "Arise from parts other than radicle", "Banyan, Grass, Bryophyllum"],
],
[3*cm, 3.5*cm, 6*cm, 4.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Regions of Root (from tip upward)", h2))
story.append(info_table(
["Zone", "Also Known As", "Key Features"],
[
["Root Cap", "Calyptra", "Thimble-like cover; protects meristematic zone; secretes mucilage"],
["Zone of Cell Division", "Meristematic Zone", "Actively dividing cells; gives rise to all root tissues"],
["Zone of Elongation", "Region of elongation", "Cells elongate rapidly; root length increases here"],
["Zone of Maturation", "Root hair zone", "Cells differentiate; root hairs form for absorption"],
],
[4*cm, 4*cm, 9*cm]
))
story.append(sp(8))
story.append(Paragraph("Modifications of Root", h1))
story.append(Paragraph("A. For Food Storage", h2))
story.append(info_table(
["Type", "Shape", "Example"],
[
["Fusiform", "Spindle-shaped, tapers at both ends", "Radish (Raphanus sativus)"],
["Napiform", "Top-shaped, abruptly tapers below", "Turnip (Brassica rapa), Beet"],
["Conical", "Cone-shaped, wider at top", "Carrot (Daucus carota)"],
["Tuberous (Nodulose)", "Irregular fleshy, no definite shape", "Sweet potato (Ipomoea batata), Dahlia"],
["Moniliform", "Bead-like swellings at intervals", "Momordica, Portulaca"],
],
[4*cm, 7*cm, 6*cm]
))
story.append(sp(6))
story.append(Paragraph("B. For Mechanical Support", h2))
for pt in [
"<b>Prop/Pillar roots</b> — hanging aerial roots that touch soil and support large horizontal branches. e.g., Banyan (<i>Ficus bengalensis</i>).",
"<b>Stilt roots</b> — oblique roots from lower nodes, providing extra support. e.g., Maize, Sugarcane, Screwpine (<i>Pandanus</i>).",
"<b>Buttress roots</b> — flattened, plank-like extensions at base of large tropical trees.",
"<b>Climbing roots</b> — arise from nodes, help plant cling to support. e.g., <i>Pothos</i>, Money plant.",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(Paragraph("C. For Special Functions", h2))
story.append(info_table(
["Modification", "Function", "Example"],
[
["Pneumatophores (Respiratory roots)", "Gaseous exchange in waterlogged/marshy soil; negatively geotropic", "Avicennia, Rhizophora (mangroves)"],
["Haustorial/Parasitic roots", "Penetrate host stem to absorb nutrition", "Cuscuta, Viscum, Dendrophthoe"],
["Velamen roots", "Absorb moisture from air; spongy tissue", "Epiphytic orchids"],
["Foliar (Epiphyllous) roots", "Arise from leaves", "Bryophyllum, Begonia"],
["Assimilatory roots", "Contain chlorophyll, perform photosynthesis", "Tinospora, Trapa"],
["Contractile roots", "Pull corm/bulb to proper depth in soil", "Crocus (saffron), Freesia"],
["Annulated roots", "Ring-like swellings along root", "Ipecac (Caephalis)"],
["Reproductive roots", "Vegetative propagation", "Sweet potato, Dahlia"],
],
[5*cm, 7*cm, 5*cm]
))
story.append(sp(6))
story.append(Paragraph("Functions of Root", h2))
for pt in ["Anchorage/fixation of plant in soil (primary function)",
"Absorption of water and dissolved minerals from soil",
"Storage of food material", "Conduction of water to shoot system",
"Photosynthesis in some modified green roots", "Vegetative propagation"]:
story.append(bp(pt)); story.append(sp(2))
story.append(PageBreak())
# ══ CHAPTER 3: STEM ═══════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 3: Stem", "Structure, Forms & Modifications"))
story.append(sp(8))
story.append(Paragraph("Basic Features of Stem", h1))
for pt in [
"Aerial part of the plant; lies <b>above the ground</b> (negative geotropism).",
"Has distinct <b>nodes</b> (where leaves/buds arise) and <b>internodes</b> (space between nodes).",
"Develops from the <b>plumule</b> of the embryo.",
"Branches, leaves, flower buds, and bracts develop from nodes.",
"Shows <b>positive phototropism</b> (grows toward light).",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(Paragraph("Forms of Stem", h2))
story.append(info_table(
["Form", "Description", "Example"],
[
["Caudex", "Unbranched, erect, cylindrical; marked with leaf-scar marks; crown of leaves at top", "Palm"],
["Culm", "Jointed with solid nodes and hollow internodes", "Bamboo (Gramineae)"],
["Excurrent", "Cone-shaped; main axis dominant; branches in acropetal succession", "Pinus, Eucalyptus, Casuarina"],
["Decurrent (Deliquescent)", "Dome-shaped; lateral branches outcompete main trunk", "Mango, Banyan, Shisham"],
["Scape", "Leafless aerial shoot bearing flowers; no aerial stem visible", "Onion, Aroids"],
],
[3.5*cm, 8.5*cm, 5*cm]
))
story.append(sp(8))
story.append(Paragraph("Modifications of Stem", h1))
story.append(Paragraph("A. Underground Stem Modifications (Storage & Perennation)", h2))
story.append(info_table(
["Type", "Features", "Example"],
[
["Rhizome", "Horizontal underground stem; distinct nodes, internodes & scale leaves; terminal bud present", "Ginger, Turmeric, Lotus, Banana, Fern"],
["Corm", "Condensed, vertical, rounded underground stem; solid; internodes not distinct; covered with scale leaves", "Colocasia, Arbi, Crocus (Saffron), Gladiolus"],
["Bulb", "Reduced, disc-like stem surrounded by fleshy scale leaves; terminal bud at center", "Onion, Garlic, Lily, Tulip"],
["Stem Tuber", "Swollen tips of underground stolons; 'eyes' are axillary buds", "Potato (Solanum tuberosum)"],
],
[3.5*cm, 8.5*cm, 5*cm]
))
story.append(sp(6))
story.append(Paragraph("B. Sub-aerial Modifications (Vegetative Propagation)", h2))
story.append(info_table(
["Type", "Features", "Example"],
[
["Runner", "Creeps on soil surface; roots from lower nodes, leaves from upper", "Cynodon (Doob grass), Oxalis"],
["Stolon", "Branches arch out from base and root at tips", "Fragaria (Strawberry), Jasmine, Peppermint"],
["Sucker", "Underground lateral branches emerge above soil as shoots", "Mint, Pineapple, Chrysanthemum"],
["Offset", "Short, thick horizontal branches in aquatic plants", "Pistia, Eichhornia (Water hyacinth)"],
],
[3*cm, 8.5*cm, 5.5*cm]
))
story.append(sp(6))
story.append(Paragraph("C. Aerial Modifications", h2))
story.append(info_table(
["Type", "Features", "Example"],
[
["Stem Tendrils", "Coiled, sensitive; axillary (Passiflora) or terminal (Vitis)", "Passion flower, Grape vine, Cucumber"],
["Stem Thorns", "Hard, pointed; modified axillary buds; cannot be removed easily", "Bougainvillea, Duranta, Citrus, Carissa"],
["Phylloclade", "Flattened/cylindrical green stem for photosynthesis; leaves reduced to spines", "Opuntia (Cactus), Casuarina, Ruscus"],
["Cladode", "Phylloclade with only one internode", "Asparagus"],
["Bulbils", "Condensed fleshy axillary buds for vegetative reproduction", "Dioscorea, Agave, Oxalis, Globba"],
["Pseudobulb", "Swollen internode; stores water and food", "Orchids"],
],
[3.5*cm, 8.5*cm, 5*cm]
))
story.append(sp(6))
story.append(highlight_box(
"\U0001F4CC <b>Remember:</b> <i>Ulex</i> has BOTH stem thorns AND leaf spines. "
"Thorns are difficult to remove (connected to vascular tissue); Prickles are easy to remove (e.g., Rose)."))
story.append(PageBreak())
# ══ CHAPTER 4: LEAF ═══════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 4: Leaf", "Parts, Venation, Types & Modifications"))
story.append(sp(8))
story.append(Paragraph("Parts of a Typical Leaf", h1))
story.append(info_table(
["Part", "Also Called", "Features"],
[
["Leaf Base", "Hypopodium", "Attaches leaf to stem; may bear stipules (small leaf-like outgrowths)"],
["Petiole", "Mesopodium", "Stalk connecting blade to stem; leaf without petiole = sessile leaf"],
["Lamina (Blade)", "Epipodium", "Flat, green, expanded part; contains midrib and veins for water/food conduction"],
],
[3*cm, 3.5*cm, 10.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Venation", h2))
story.append(info_table(
["Type", "Pattern", "Found In", "Example"],
[
["Reticulate (Net)", "Veins form a network; midrib + lateral veins + veinlets", "Dicots", "Mango, Peepal, Hibiscus"],
["Parallel", "Veins run parallel to each other and the midrib", "Monocots", "Grass, Banana, Bamboo, Maize"],
],
[3.5*cm, 6*cm, 3*cm, 4.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Types of Leaves", h1))
story.append(Paragraph("Simple vs. Compound Leaf", h2))
for pt in [
"<b>Simple leaf</b> — single, undivided lamina; may be lobed but not cut down to midrib. e.g., Mango, Peepal, Guava.",
"<b>Compound leaf</b> — lamina completely divided into separate leaflets (each on a petiolule).",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(info_table(
["Compound Type", "Arrangement of Leaflets", "Sub-types", "Example"],
[
["Pinnately Compound", "Leaflets along a central rachis", "Unipinnate, Bipinnate, Tripinnate, Decompound (multipinnate)", "Neem (unipinnate), Rose, Mimosa (bipinnate)"],
["Palmately Compound", "All leaflets arise from same point (tip of petiole)", "Unifoliate (Citrus), Bifoliate, Trifoliate (Oxalis), Quadrifoliate, Multifoliate", "Silk cotton, Cannabis, Cleome"],
],
[4*cm, 4.5*cm, 5*cm, 3.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Phyllotaxy (Leaf Arrangement on Stem)", h2))
story.append(info_table(
["Type", "Arrangement", "Example"],
[
["Alternate", "One leaf per node, alternating sides", "China rose (Hibiscus), Sunflower, Mustard"],
["Opposite - Decussate", "Two leaves per node; successive pairs at 90\u00b0 to each other", "Calotropis, Guava, Ixora"],
["Whorled", "Three or more leaves per node in a ring", "Alstonia, Nerium (Oleander)"],
],
[4*cm, 7*cm, 6*cm]
))
story.append(sp(8))
story.append(Paragraph("Leaf Modifications", h1))
story.append(info_table(
["Modification", "Function", "Part Modified", "Example"],
[
["Leaf Tendrils", "Climbing support", "Leaflets or whole leaf", "Pea (Pisum) — leaflets; Lathyrus — stipules; Gloriosa — leaf tip"],
["Leaf Spines", "Protection", "Whole leaf or stipules", "Cactus, Aloe, Argemone"],
["Phyllode", "Photosynthesis", "Petiole flattened, green", "Acacia auriculiformis"],
["Leaf Pitcher (Passive)", "Insect trapping (nutrients)", "Leaf margin forms pitcher", "Nepenthes"],
["Leaf Pitcher (Active)", "Insect trapping", "Leaf forms bladder trap", "Utricularia (Bladderwort)"],
["Leaf Sundew", "Insect trapping", "Leaf with sticky tentacles", "Drosera (Sundew)"],
["Fleshy Leaves", "Water/food storage", "Swollen, succulent", "Aloe, Agave, Onion scale leaves"],
["Hooks", "Climbing", "Terminal leaflet", "Bignonia"],
["Reproductive Leaves", "Vegetative propagation", "Leaf margin with notches containing buds", "Bryophyllum"],
],
[4*cm, 4.5*cm, 3.5*cm, 5*cm]
))
story.append(PageBreak())
# ══ CHAPTER 5: INFLORESCENCE ══════════════════════════════════════════════════
story.append(chapter_banner("Chapter 5: Inflorescence", "Arrangement of Flowers on Floral Axis"))
story.append(sp(8))
story.append(Paragraph(
"Inflorescence is the arrangement of flowers on the floral axis (peduncle). "
"When a shoot tip transforms into a flower-bearing structure, it is an inflorescence.", body))
story.append(sp(6))
story.append(Paragraph("A. Racemose (Indefinite/Indeterminate) Inflorescence", h1))
story.append(bp("Main axis <b>continues to grow</b>; flowers open in <b>acropetal order</b> (base to apex)."))
story.append(sp(4))
story.append(info_table(
["Type", "Features", "Example"],
[
["Raceme", "Unbranched axis; pedicellate flowers", "Mustard, Radish, Delphinium"],
["Spike", "Unbranched axis; sessile flowers", "Wheat, Amaranthus, Adhatoda"],
["Catkin (Ament)", "Pendulous spike; unisexual flowers; axis soft", "Mulberry, Oak, Willow"],
["Spadix", "Fleshy axis; small flowers; enclosed in large spathe", "Colocasia, Maize (cob), Palms, Banana"],
["Corymb", "Flat-topped; pedicels of different lengths; outer flowers open first", "Candytuft (Iberis), Pyrus"],
["Umbel", "Pedicels arise from one point; umbrella-shaped; involucre present", "Coriander, Fennel, Carrot (Apiaceae)"],
["Capitulum (Head)", "Flat/convex receptacle; sessile florets; most evolved; involucre of bracts", "Sunflower, Marigold, Tridax (Asteraceae)"],
["Panicle", "Branched raceme", "Neem, Rice, Yucca"],
["Compound Spike", "Spikes of spikelets", "Wheat, Barley"],
["Compound Umbel", "Umbels of umbels; has involucre + involucel", "Coriander, Daucus"],
],
[4*cm, 8*cm, 5*cm]
))
story.append(sp(8))
story.append(Paragraph("B. Cymose (Definite/Determinate) Inflorescence", h1))
story.append(bp("Main axis <b>terminates in a flower</b>; flowers open in <b>centrifugal order</b> (center outward)."))
story.append(sp(4))
story.append(info_table(
["Type", "Features", "Example"],
[
["Monochasial Cyme (Uniparous)", "Each time only ONE lateral branch develops", ""],
["\u00a0\u00a0 Scorpioid Cyme", "Branches alternate on opposite sides; coiled like scorpion tail", "Heliotropium, Solanum"],
["\u00a0\u00a0 Helicoid Cyme", "All branches develop on same side", "Drosera, Ranunculus"],
["Dichasial Cyme (Biparous)", "TWO lateral branches after each terminal flower", "Dianthus, Bougainvillea, Teak"],
["Polychasial Cyme (Multiparous)", "THREE or more lateral branches after each flower", "Nerium (Oleander), Calotropis"],
["Hypanthodium", "Hollow, flask-shaped fleshy receptacle; flowers inside; small opening at top", "Banyan, Peepal, Fig (Ficus)"],
["Verticillaster", "Condensed cyme at each node giving false whorl appearance", "Ocimum (Tulsi), Salvia, Leucas"],
["Cyathium", "Cup-like involucre; one central female flower; many male flowers; nectar glands", "Euphorbia, Poinsettia"],
["Coenanthium", "Disc-like receptacle with folded margins", "Dorstenia"],
],
[5*cm, 7.5*cm, 4.5*cm]
))
story.append(PageBreak())
# ══ CHAPTER 6: FLOWER ═════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 6: Flower", "Structure, Symmetry, Whorls & Floral Parts"))
story.append(sp(8))
story.append(Paragraph("Introduction to Flower", h1))
story.append(Paragraph(
"A flower is a modified shoot with highly compressed internodes. It is the reproductive unit of angiosperms. "
"A complete flower has four whorls (calyx, corolla, androecium, gynoecium) on the thalamus.", body))
story.append(sp(6))
story.append(info_table(
["Whorl", "Organ", "Members", "Function"],
[
["1st (outermost)", "Calyx", "Sepals", "Protects floral bud before opening"],
["2nd", "Corolla", "Petals", "Attracts pollinators (insects, birds, wind)"],
["3rd", "Androecium", "Stamens", "Male reproductive whorl — produces pollen"],
["4th (innermost)", "Gynoecium", "Carpels/Pistil", "Female reproductive whorl — produces ovules"],
],
[4*cm, 3.5*cm, 3.5*cm, 6*cm]
))
story.append(sp(8))
story.append(Paragraph("Key Terminology", h2))
story.append(info_table(
["Term", "Meaning", "Example"],
[
["Bracteate", "Has a bract (modified leaf) at base of flower", "Most flowers"],
["Ebracteate", "No bract present", "Mustard"],
["Pedicellate", "Flower has a stalk (pedicel)", "Rose"],
["Sessile", "Flower has no stalk", "Wheat, Amaranthus"],
["Complete", "Has all 4 whorls", "Hibiscus, Mustard"],
["Incomplete", "Missing one or more whorls", "Unisexual flowers"],
["Bisexual (Hermaphrodite)", "Has both androecium AND gynoecium", "Rose, Mustard"],
["Unisexual", "Has only one sex organ; Staminate (male) or Pistillate (female)", "Papaya, Maize, Cucumber"],
["Neuter flower", "Has neither androecium nor gynoecium", "Ray florets of sunflower"],
],
[4.5*cm, 7*cm, 5.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Symmetry of Flower", h2))
story.append(info_table(
["Type", "Definition", "Example"],
[
["Actinomorphic (Regular)", "Radial symmetry; can be divided into equal halves in any vertical plane", "Mustard, China rose, Rose"],
["Zygomorphic (Irregular)", "Bilateral symmetry; divisible into equal halves in only ONE plane", "Pea, Cassia, Gulmohur, Orchid"],
["Asymmetric", "No plane of symmetry", "Canna"],
],
[5*cm, 7*cm, 5*cm]
))
story.append(sp(8))
story.append(Paragraph("Aestivation (Arrangement of Petals in Bud)", h1))
story.append(info_table(
["Type", "Description", "Example"],
[
["Valvate", "Petals touch at margins only; no overlapping", "Calotropis, Mustard (sepals)"],
["Twisted (Contorted)", "Each petal overlaps the next consistently in one direction", "Cotton, China rose, Lady's finger"],
["Imbricate", "Irregular overlapping; some entirely inside, some outside", "Cassia, Gulmohar"],
["Vexillary (Papilionaceous)", "Largest petal (standard) outermost; two wings next; two keel petals innermost", "Pea (Pisum), Bean, Sweet pea"],
["Quincuncial", "2 petals fully outside, 2 fully inside, 1 half-in-half-out", "Ranunculus, Rose, Cassia"],
],
[4*cm, 8*cm, 5*cm]
))
story.append(sp(8))
story.append(Paragraph("Calyx (Sepals)", h2))
for pt in [
"<b>Polysepalous</b> — free sepals (Mustard, China rose)",
"<b>Gamosepalous</b> — fused sepals (Datura, Petunia, Hibiscus)",
"<b>Persistent</b> — calyx remains till fruit formation (Brinjal, Tomato)",
"<b>Deciduous</b> — calyx falls off before or at fertilization (Poppy, Mustard)",
"<b>Petaloid calyx</b> — colored like petals (Mussaenda); Note: Bracts of Bougainvillea are petaloid, not calyx",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(Paragraph("Corolla (Petals)", h2))
for pt in [
"<b>Polypetalous</b> — free petals (Rose, Mustard, China rose)",
"<b>Gamopetalous</b> — fused petals (Datura, Petunia, Brinjal, Salvia)",
"Shapes: Tubular (disc florets of sunflower), Bell-shaped (campanulate - Tobacco), Funnel-shaped, Wheel-shaped (rotate - Solanum)",
"<b>Epipetalous stamens</b> — stamens attached to petals (Brinjal, Datura)",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(Paragraph("Androecium (Stamens)", h1))
story.append(Paragraph(
"Each stamen = <b>filament</b> (stalk) + <b>anther</b> (produces pollen). "
"Anther is usually <b>dithecous</b> (2 lobes, 4 pollen sacs) or <b>monothecous</b> (1 lobe, 2 pollen sacs — Malvaceae).", body))
story.append(sp(4))
story.append(info_table(
["Condition", "Description", "Example"],
[
["Epipetalous", "Stamens fused to petals", "Brinjal, Datura"],
["Epiphyllous", "Stamens fused to perianth (tepals)", "Lily, Tulip"],
["Monadelphous", "All filaments united into ONE bundle; anthers free", "China rose, Cotton (Malvaceae)"],
["Diadelphous", "Filaments in TWO bundles", "Pea (9+1 arrangement)"],
["Polyadelphous", "Filaments in MANY bundles; anthers free", "Citrus, Hypericum"],
["Syngenesious", "Anthers united; filaments free", "Sunflower, Compositae/Asteraceae"],
["Synandrous", "Both anthers and filaments united", "Cucurbits (Cucurbitaceae)"],
["Didynamous", "4 stamens: 2 long + 2 short", "Salvia, Ocimum (Lamiaceae)"],
["Tetradynamous", "6 stamens: 4 long + 2 short", "Mustard, Cabbage (Brassicaceae)"],
],
[4.5*cm, 7*cm, 5.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Gynoecium (Pistil / Carpels)", h1))
story.append(Paragraph(
"Female reproductive whorl. Each carpel = <b>stigma</b> (receives pollen) + <b>style</b> (pollen tube grows through) "
"+ <b>ovary</b> (contains ovules, develops into fruit).", body))
story.append(sp(4))
story.append(info_table(
["Condition", "Description", "Example"],
[
["Monocarpellary", "Single carpel", "Pea, Mango, Coconut"],
["Apocarpous (Multicarpellary)", "Multiple FREE carpels", "Lotus, Rose, Strawberry, Michelia"],
["Syncarpous (Multicarpellary)", "Multiple FUSED carpels", "Mustard, Tomato, Papaver"],
],
[5*cm, 6*cm, 6*cm]
))
story.append(sp(6))
story.append(Paragraph("Ovary Position", h2))
story.append(info_table(
["Position", "Condition", "Flower Type", "Example"],
[
["Superior ovary", "Other whorls attach BELOW ovary on thalamus", "Hypogynous", "Mustard, Brinjal, China rose"],
["Half-inferior ovary", "Thalamus cup-shaped; ovary in center; whorls at rim", "Perigynous", "Rose, Peach, Plum, Cherry"],
["Inferior ovary", "Thalamus grows over ovary; other whorls above ovary", "Epigynous", "Guava, Cucumber, Sunflower"],
],
[3.5*cm, 5.5*cm, 3.5*cm, 4.5*cm]
))
story.append(sp(6))
story.append(Paragraph("Placentation (Position of Ovules in Ovary)", h2))
story.append(info_table(
["Type", "Description", "Example"],
[
["Marginal", "Ovules on ventral suture of ONE-chambered ovary; forms a ridge", "Pea (Pisum), Bean"],
["Axile", "Ovules on central axis; ovary multi-chambered (septa present)", "Mustard, Tomato, Lemon, Hibiscus"],
["Parietal", "Ovules on inner walls; ovary 1-chambered but appears 2-chambered (false septum in Brassicaceae)", "Papaya, Cucumber, Mustard"],
["Free Central", "Ovules on central column rising from base; NO septa", "Dianthus, Primrose (Primula)"],
["Basal", "Single ovule at base of one-chambered ovary", "Sunflower, Marigold (Compositae)"],
["Superficial", "Ovules all over inner surface of locule walls", "Nymphaea (Water lily)"],
],
[3.5*cm, 7.5*cm, 6*cm]
))
story.append(PageBreak())
# ══ CHAPTER 7: FRUIT ══════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 7: Fruit", "Types, Classification & Examples"))
story.append(sp(8))
story.append(Paragraph("Introduction to Fruit", h1))
for pt in [
"Fruit develops from the <b>ovary</b> after fertilization (sometimes from other floral parts too).",
"<b>True fruit</b> — develops ONLY from ovary. e.g., Mango, Coconut, Tomato.",
"<b>False fruit (Pseudocarp)</b> — other floral parts (thalamus, calyx) also contribute. e.g., Apple (thalamus), Strawberry, Cashew (pedicel).",
"<b>Parthenocarpic fruit</b> — develops WITHOUT fertilization; seedless. e.g., Banana, some grapes, Pineapple.",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(Paragraph("Pericarp (Fruit Wall) Layers", h2))
story.append(info_table(
["Layer", "Name", "Example"],
[
["Outer", "Epicarp / Exocarp", "Skin of mango, coconut husk"],
["Middle", "Mesocarp", "Fleshy edible part of mango; fibrous part of coconut"],
["Inner", "Endocarp", "Stony pit of mango; hard shell of coconut"],
],
[3*cm, 5*cm, 9*cm]
))
story.append(sp(8))
story.append(Paragraph("A. Simple Fruits (from single ovary)", h1))
story.append(Paragraph("Fleshy Fruits", h2))
story.append(info_table(
["Type", "Features", "Example"],
[
["Berry", "Entire pericarp fleshy; many seeds embedded in pulp; epicarp thin", "Tomato, Grape, Banana, Brinjal, Date, Guava"],
["Hesperidium", "Berry with leathery rind (epicarp + mesocarp) containing oil glands; edible juicy endocarp hairs", "Lemon, Orange, Citrus fruits"],
["Pepo", "Berry with hard outer rind formed from thalamus; inferior ovary", "Cucumber, Watermelon, Pumpkin, Gourd"],
["Drupe", "Epicarp thin; mesocarp fleshy edible; endocarp hard, stony", "Mango, Coconut, Plum, Peach, Cherry, Almond"],
["Pome", "False fruit; edible fleshy part is thalamus; true fruit is core (leathery)", "Apple, Pear, Quince (Rosaceae)"],
],
[3.5*cm, 8*cm, 5.5*cm]
))
story.append(sp(6))
story.append(Paragraph("Dry Fruits", h2))
story.append(Paragraph("1. Dehiscent (split open at maturity):", h3))
story.append(info_table(
["Type", "Features", "Example"],
[
["Legume (Pod)", "Monocarpellary; splits along BOTH dorsal and ventral sutures", "Pea, Bean, Soybean, Groundnut"],
["Follicle", "Monocarpellary; splits along ONE suture only", "Calotropis, Aconitum, Larkspur"],
["Siliqua", "Bicarpellary; elongated with false septum (replum); 2 valves", "Mustard, Radish (Brassica family)"],
["Silicula", "Short, flat, broader siliqua; length = breadth", "Capsella (Shepherd's purse), Iberis"],
["Capsule", "Multicarpellary, syncarpous; many seeds; various dehiscence types", "Cotton, Poppy, Datura, Tobacco"],
],
[3.5*cm, 7.5*cm, 6*cm]
))
story.append(Paragraph("2. Indehiscent (do not split at maturity):", h3))
story.append(info_table(
["Type", "Features", "Example"],
[
["Achene", "One seed; pericarp free from seed coat; small", "Clematis, Mirabilis"],
["Cypsela", "Like achene but from inferior ovary; pappus (modified calyx) for dispersal", "Sunflower, Marigold, Tridax (Asteraceae)"],
["Caryopsis", "Pericarp completely fused with seed coat (testa)", "Wheat, Maize, Rice, Barley (Gramineae)"],
["Nut", "Very hard, stony pericarp; usually one seed", "Chestnut, Litchi, Cashew"],
["Samara", "Winged pericarp for wind dispersal", "Elm, Maple, Shorea (Sal)"],
],
[3.5*cm, 7.5*cm, 6*cm]
))
story.append(Paragraph("3. Schizocarpic (split into one-seeded units called mericarps):", h3))
story.append(info_table(
["Type", "Features", "Example"],
[
["Cremocarp", "Bicarpellary; splits into 2 mericarps hanging from carpophore", "Coriander, Fennel, Daucus (Apiaceae)"],
["Lomentum", "Constricted between seeds; breaks transversely", "Mimosa, Desmodium, Cassia"],
["Regma", "Each mericarp dehisces separately; 3 cocci", "Castor, Euphorbia"],
],
[3.5*cm, 7.5*cm, 6*cm]
))
story.append(sp(8))
story.append(Paragraph("B. Aggregate Fruits (from apocarpous gynoecium of single flower)", h1))
for pt in [
"Each carpel develops into a small fruitlet; all on one receptacle.",
"Examples: Strawberry (fleshy thalamus + achenes), Raspberry (drupelets), Lotus (achenes on large receptacle), Rose hip (many achenes inside fleshy hypanthium).",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(6))
story.append(Paragraph("C. Composite / Multiple / Collective Fruits (from entire inflorescence)", h1))
story.append(info_table(
["Type", "Origin", "Example"],
[
["Sorosis", "From spike, spadix, or catkin; flowers fused with fleshy axis/bracts", "Mulberry (spike), Jackfruit (spadix), Pineapple (spadix)"],
["Syconus", "From hypanthodium inflorescence; many achenes inside fleshy hollow receptacle", "Fig (Ficus carica), Banyan, Peepal"],
["Strobilus (Cone)", "From catkin; bracts become woody", "Hop (Humulus lupulus)"],
],
[3.5*cm, 7.5*cm, 6*cm]
))
story.append(PageBreak())
# ══ CHAPTER 8: SEED ═══════════════════════════════════════════════════════════
story.append(chapter_banner("Chapter 8: Seed", "Structure, Types & Dispersal"))
story.append(sp(8))
story.append(Paragraph("Introduction to Seed", h1))
for pt in [
"Seed = mature, fertilized <b>ovule</b>.",
"Contains: <b>Seed coat</b> (testa + tegmen) + <b>Embryo</b> + sometimes <b>endosperm</b>.",
"<b>Albuminous seeds</b> — endosperm present at maturity. e.g., Castor, Maize, Wheat, Barley, Sunflower.",
"<b>Exalbuminous seeds</b> — endosperm absorbed by embryo during development; cotyledons store food. e.g., Pea, Bean, Groundnut.",
"<b>Perisperm</b> — persistent nucellus tissue outside endosperm. e.g., Black pepper (<i>Piper nigrum</i>), Beet.",
]:
story.append(bp(pt)); story.append(sp(2))
story.append(sp(8))
story.append(Paragraph("Dicot Seed Structure (e.g., Pea/Bean)", h2))
story.append(info_table(
["Part", "Description"],
[
["Testa", "Outer, harder seed coat; usually colored"],
["Tegmen", "Inner, thin, membranous seed coat"],
["Hilum", "Scar where seed was attached to the pod (funicle)"],
["Micropyle", "Tiny pore above hilum; allows water entry and gaseous exchange"],
["Embryo", "= Radicle (future root) + Plumule (future shoot) + 2 Cotyledons (food storage)"],
],
[4*cm, 13*cm]
))
story.append(sp(8))
story.append(Paragraph("Monocot Seed Structure (e.g., Maize/Wheat)", h2))
story.append(info_table(
["Part", "Description"],
[
["Pericarp + Testa", "Fused together — fruit wall and seed coat are NOT separable (Caryopsis)"],
["Endosperm", "Large, starchy; provides nutrition to germinating embryo; remains at maturity (albuminous)"],
["Scutellum", "Single large cotyledon; absorbs digested nutrients from endosperm"],
["Coleoptile", "Sheath protecting the plumule (emerging shoot)"],
["Coleorhiza", "Sheath protecting the radicle (emerging root)"],
["Epiblast", "Small outgrowth on opposite side of scutellum; vestigial second cotyledon"],
],
[4*cm, 13*cm]
))
story.append(sp(8))
story.append(Paragraph("Seed Dispersal Mechanisms", h1))
story.append(info_table(
["Mechanism", "Name", "Adaptation", "Example"],
[
["Wind (Anemochory)", "Winged/Feathery seeds", "Light weight, wings, plume/pappus", "Maple (winged), Calotropis (silky hair), Dandelion (pappus), Cotton (fibers)"],
["Water (Hydrochory)", "Buoyant seeds/fruits", "Air spaces, spongy tissue, fibrous coating", "Coconut (fibrous husk), Lotus (spongy receptacle), Water lily"],
["Animals (Zoochory)", "Hooks, fleshy fruits", "Spines/hooks for external carriage; fleshy edible fruits for internal passage", "Xanthium, Urena (hooks), Mango, Cherry (eaten)"],
["Self-dispersal (Autochory)", "Explosive mechanism", "Hygroscopic tension, sudden dehiscence", "Squirting cucumber (Ecballium), Impatiens, Witch hazel, Pea"],
],
[4.5*cm, 3.5*cm, 4.5*cm, 4.5*cm]
))
story.append(PageBreak())
# ══ CHAPTER 9: DICOT vs MONOCOT ═══════════════════════════════════════════════
story.append(chapter_banner("Chapter 9: Dicot vs. Monocot", "Key Comparisons"))
story.append(sp(8))
story.append(info_table(
["Feature", "Dicotyledons", "Monocotyledons"],
[
["Cotyledons", "TWO cotyledons", "ONE cotyledon"],
["Root system", "Tap root (from radicle)", "Fibrous root (radicle short-lived)"],
["Leaf venation", "Reticulate (net-like)", "Parallel"],
["Floral parts", "In multiples of 4 or 5 (tetramerous/pentamerous)", "In multiples of 3 (trimerous)"],
["Vascular bundles (stem)", "Arranged in a RING; open (cambium present)", "SCATTERED throughout; closed (no cambium)"],
["Secondary growth", "Present (cambium active)", "Generally absent"],
["Pollen grains", "Triaperturate (3 pores/furrows)", "Monoaperturate (1 pore/furrow)"],
["Seed", "Exalbuminous (usually)", "Albuminous (usually)"],
["Stomata", "Kidney-shaped guard cells", "Dumb-bell shaped guard cells"],
["Examples", "Pea, Mango, Mustard, Rose, Sunflower", "Rice, Wheat, Maize, Bamboo, Banana, Onion"],
],
[5.5*cm, 5.5*cm, 6*cm]
))
story.append(PageBreak())
# ══ CHAPTER 10: IMPORTANT FACTS ═══════════════════════════════════════════════
story.append(chapter_banner("Chapter 10: Important Facts & Special Notes", "Quick Revision Points"))
story.append(sp(8))
story.append(Paragraph("Record-Holders Among Angiosperms", h1))
story.append(info_table(
["Record", "Plant", "Detail"],
[
["Smallest angiosperm", "Wolffia (Lemnaceae)", "Less than 0.1 mm; no roots, stem, or true leaves"],
["Tallest angiosperm", "Eucalyptus regnans", "Over 114 m (375 ft) tall"],
["Only marine angiosperm", "Zostera (Zosteraceae)", "Seagrass; found in marine habitats"],
["Largest inflorescence", "Amorphophallus titanum", "Spathe; up to 3 m tall"],
["Smallest flower", "Wolffia globosa", "About 0.1 mm wide"],
],
[5*cm, 5*cm, 7*cm]
))
story.append(sp(8))
story.append(Paragraph("Plants with Special Characteristics", h1))
story.append(info_table(
["Characteristic", "Plants"],
[
["Plants with NO true roots", "Podostemon, Arceuthobium, Rafflesia, Sapria"],
["Monocarpic perennials (fruit once, then die)", "Agave, Bamboo"],
["Both stem thorns AND leaf spines", "Ulex europaeus"],
["Epiphytic orchids with velamen roots", "Vanilla, various orchids"],
["Strangler fig", "Ficus (Fig) species — begins as epiphyte"],
["Insectivorous plants", "Nepenthes (pitcher), Drosera (sundew), Utricularia (bladderwort), Dionaea (Venus flytrap)"],
["Cleistogamous flowers (self-pollinating, never open)", "Viola (violet), Commelina, Oxalis"],
["Viviparous germination (seeds germinate on parent)", "Mangroves: Rhizophora, Avicennia"],
],
[6*cm, 11*cm]
))
story.append(sp(8))
story.append(Paragraph("Floral Formula Symbols", h1))
story.append(info_table(
["Symbol", "Meaning"],
[
["\u2295 (circle with cross)", "Actinomorphic (regular)"],
["\u2191 (single arrow / %)", "Zygomorphic (irregular)"],
["\u2642 (male symbol)", "Staminate (male) flower"],
["\u2640 (female symbol)", "Pistillate (female) flower"],
["\u2295 with line through", "Bisexual flower"],
["Br", "Bracteate"],
["Ebr", "Ebracteate"],
["K, C, A, G", "Calyx, Corolla, Androecium, Gynoecium"],
["P (Perianth)", "Used when calyx and corolla are indistinguishable (tepals)"],
["G (overline)", "Superior ovary"],
["G (underline)", "Inferior ovary"],
["( )", "Fused/united members"],
["\u221e", "Numerous (more than 10)"],
],
[3.5*cm, 13.5*cm]
))
story.append(sp(8))
story.append(Paragraph("Quick-Recall: Unusual or Tricky Examples", h1))
story.append(info_table(
["Point", "Detail"],
[
["Coconut — is it a drupe?", "YES — coconut is a drupe. The fibrous husk = mesocarp; hard shell = endocarp; white edible part = seed endosperm."],
["Strawberry — true or false fruit?", "FALSE fruit (pseudocarp) — edible fleshy part is the thalamus; small seeds on surface are true achene fruits."],
["Groundnut — where is the fruit formed?", "Underground — geocarpic fruit; pod (legume) is pushed into soil after fertilization."],
["Banana — parthenocarpic?", "YES — develops without fertilization; seeds absent (seedless)."],
["Potato — stem or root?", "STEM tuber (not root) — has nodes ('eyes') which are axillary buds with scale leaves."],
["Sweet potato — stem or root?", "ROOT tuber (tuberous adventitious root) — no nodes or buds."],
["Onion — bulb part eaten?", "Fleshy scale leaves of the bulb (modified stem with leaves) are eaten; not the root."],
["Ginger vs Turmeric", "Both are rhizomes (underground stems). Ginger = Zingiber officinale; Turmeric = Curcuma longa."],
["Pineapple — composite fruit?", "YES — Sorosis type; develops from the entire spike (spadix) inflorescence."],
],
[5.5*cm, 11.5*cm]
))
story.append(sp(10))
story.append(highlight_box(
"\U0001F393 <b>Exam Tip:</b> Always remember — THORNS arise from axillary buds (vascular tissue present, hard to remove). "
"PRICKLES arise from epidermis (easy to remove, e.g., Rose). SPINES are modified leaves or stipules (e.g., Cactus). "
"This distinction is frequently asked in NEET and board exams!",
bg=GREEN_PALE, border=GREEN_MED))
# ══ BUILD PDF ═════════════════════════════════════════════════════════════════
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.5*cm, leftMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=2*cm,
title="Morphology of Flowering Plants",
author="Biology Study Notes",
subject="Class XI Plant Morphology"
)
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/morphology-notebook && python create_notebook.py 2>&1
ls -lh /home/daytona/workspace/morphology-notebook/Morphology_of_Flowering_Plant…
Morphology of Flowering Plants
PDF Document · PDF
| Chapter | Content |
|---|---|
| Cover Page | Styled green cover with topic overview |
| Table of Contents | All 10 chapters with page numbers |
| 1. Introduction | What is morphology, angiosperms, classification |
| 2. Root | Types, 4 zones, all modifications with examples |
| 3. Stem | Forms, underground/sub-aerial/aerial modifications |
| 4. Leaf | Parts, venation, phyllotaxy, all modifications |
| 5. Inflorescence | Racemose (10 types) & Cymose (8 types) |
| 6. Flower | Whorls, symmetry, aestivation, androecium, gynoecium, placentation |
| 7. Fruit | Simple/Aggregate/Composite; fleshy, dry, dehiscent, indehiscent |
| 8. Seed | Dicot vs Monocot seed, dispersal mechanisms |
| 9. Dicot vs Monocot | Full comparison table |
| 10. Special Facts | Record-holders, tricky examples, exam tips, floral formula symbols |
I need from napiform root
Can you do it
A detailed botanical diagram of a napiform root (turnip-type fleshy tap root modification), showing the characteristic top-shaped swollen upper portion that abruptly tapers into a thin tail-like lower portion. The diagram should be labeled with: Napiform Root, Swollen upper part (hypocotyl + tap root), Abrupt tapering, Thin tail-like lower portion, Lateral roots, Root hairs zone. Include a small inset showing the whole turnip plant with leaves above ground. Clean white background, educational biology textbook style, clear black outlines with light green and purple shading.

| Feature | Detail |
|---|---|
| Shape | Top-shaped / spherical at top, abruptly narrows below |
| Swollen part | Formed by both hypocotyl (stem) + upper tap root |
| Function | Storage of food (starch, sugars) and water |
| Examples | Turnip (Brassica rapa), Sugar beet (Beta vulgaris) |
| Type | Modification of tap root (dicot plants) |
| Root Type | Shape | Example |
|---|---|---|
| Fusiform | Spindle-shaped, tapers gradually at BOTH ends | Radish (Raphanus sativus) |
| Napiform | Top-shaped, ABRUPTLY tapers below | Turnip, Beet |
| Conical | Cone-shaped, broad at top, gradually tapers | Carrot (Daucus carota) |
| Tuberous | Irregular, no definite shape | Sweet potato, Dahlia |