Epigenetic short notes

| Modification | Enzyme (Writer) | Enzyme (Eraser) | Effect |
|---|---|---|---|
| Acetylation (of Lys residues) | HATs (Histone Acetyltransferases) e.g. EP300 | HDACs (Histone Deacetylases) e.g. HDAC1 | Neutralizes positive charge → relaxes chromatin → gene activation |
| Methylation | HMTs (Histone Methyltransferases) e.g. EZH2 | Histone demethylases e.g. JARID1C | Context-dependent: H3K4me3 = active; H3K27me3 = repressive |
| Phosphorylation | Kinases | Phosphatases | Signal transduction, DNA repair |
| Ubiquitination | Ubiquitin ligases | Deubiquitinases | Transcriptional activation or repression |
| Sumoylation | SUMO ligases | SUMO proteases | Generally repressive |
| Role | Function | Example (from The Developing Human) |
|---|---|---|
| Writers | Add epigenetic marks to DNA or histones | DNMT1 (DNA methylase), EZH2 (histone methylase), EP300 (HAT) |
| Readers | Recognize and interpret epigenetic marks | MECP2 (reads DNA methylation), CBX2 (polycomb complex), SMARCA4 |
| Erasers | Remove epigenetic marks | TET1 (demethylation), JARID1C (histone demethylase), HDAC1 |
| State | Marks | Transcription |
|---|---|---|
| Euchromatin (open) | Histone acetylation, H3K4me3 | Active |
| Heterochromatin (closed) | DNA methylation, H3K27me3, H3K9me3, HDAC activity | Silenced |
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/epigenetics && python3 << 'EOF' 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) from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY from reportlab.platypus import PageBreak import urllib.request from reportlab.platypus import Image import io # Download the epigenetics diagram img_url = "https://cdn.orris.care/cdss_images/6b7c75a96f09312d514e4d2940b63dfe30de2265a56dd04e8c55ccd597ca3e5a.png" try: with urllib.request.urlopen(img_url, timeout=10) as r: img_data = r.read() img_path = "/tmp/workspace/epigenetics/epi_diagram.png" with open(img_path, "wb") as f: f.write(img_data) img_ok = True print("Image downloaded OK") except Exception as e: img_ok = False print(f"Image download failed: {e}") # PDF setup doc = SimpleDocTemplate( "/tmp/workspace/epigenetics/Epigenetics_Short_Notes.pdf", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm, title="Epigenetics - Short Notes", author="Orris Medical Library" ) W = A4[0] - 4*cm # usable width styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle('Title', parent=styles['Title'], fontSize=22, textColor=colors.HexColor('#1a3c5e'), spaceAfter=4, fontName='Helvetica-Bold', alignment=TA_CENTER) subtitle_style = ParagraphStyle('Subtitle', parent=styles['Normal'], fontSize=10, textColor=colors.HexColor('#555555'), spaceAfter=12, alignment=TA_CENTER, fontName='Helvetica-Oblique') h1_style = ParagraphStyle('H1', parent=styles['Heading1'], fontSize=13, textColor=colors.white, fontName='Helvetica-Bold', spaceAfter=0, spaceBefore=14, backColor=colors.HexColor('#1a3c5e'), leftIndent=-8, rightIndent=-8, borderPad=5) h2_style = ParagraphStyle('H2', parent=styles['Heading2'], fontSize=11, textColor=colors.HexColor('#1a3c5e'), fontName='Helvetica-Bold', spaceAfter=4, spaceBefore=10, borderPad=2) body_style = ParagraphStyle('Body', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=5, fontName='Helvetica', alignment=TA_JUSTIFY) bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'], fontSize=9.5, leading=13, spaceAfter=3, fontName='Helvetica', leftIndent=14, bulletIndent=4) bold_inline = ParagraphStyle('BoldInline', parent=body_style, fontName='Helvetica-Bold') caption_style = ParagraphStyle('Caption', parent=styles['Normal'], fontSize=8, textColor=colors.HexColor('#555555'), alignment=TA_CENTER, fontName='Helvetica-Oblique', spaceAfter=8) source_style = ParagraphStyle('Source', parent=styles['Normal'], fontSize=7.5, textColor=colors.HexColor('#777777'), fontName='Helvetica-Oblique', spaceAfter=2, leftIndent=8) def H1(text): return Paragraph(f" {text}", h1_style) def H2(text): return Paragraph(text, h2_style) def P(text): return Paragraph(text, body_style) def B(text): return Paragraph(f"• {text}", bullet_style) def Src(text): return Paragraph(f"Sources: {text}", source_style) story = [] # ── TITLE ────────────────────────────────────────────────────────────────── story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("EPIGENETICS", title_style)) story.append(Paragraph("Short Notes — Medical Library Synthesis", subtitle_style)) story.append(HRFlowable(width=W, thickness=2, color=colors.HexColor('#1a3c5e'), spaceAfter=10)) # ── DEFINITION ────────────────────────────────────────────────────────────── story.append(H1("1. DEFINITION")) story.append(Spacer(1, 6)) story.append(P("<b>Epigenetics</b> describes <b>heritable changes in gene expression that do not involve any change in the underlying DNA sequence.</b> The term was first coined in <b>1942</b> to describe alterations in genes and gene products producing phenotypic differences despite a common genotype.")) story.append(P("Epigenetic effects reflect chemical modifications to DNA or associated proteins that affect the <i>probability or level of gene transcription</i> without altering the sequence itself. Variation in monozygotic twins not explained by genetics or environment is largely attributable to epigenetic phenomena.")) story.append(Src("Fitzpatrick's Dermatology Vol 1/2 | Rheumatology 2022 (Elsevier) | Cummings Otolaryngology")) # ── THREE MECHANISMS ──────────────────────────────────────────────────────── story.append(H1("2. THREE CORE MECHANISMS")) story.append(Spacer(1, 6)) # Diagram if img_ok: img = Image(img_path, width=W, height=W*0.52) story.append(img) story.append(Paragraph("Fig. Epigenetic mechanisms: (1) DNA methylation, (2) Histone modification, (3) microRNA regulation — Cummings Otolaryngology", caption_style)) # 2A DNA methylation story.append(H2("2A. DNA Methylation")) story.append(P("Covalent addition of a methyl group (–CH₃) to the <b>5'-carbon of a cytosine</b> at <b>CpG dinucleotides</b> (cytosine-phosphate-guanine). CpG sites are concentrated in <b>CpG islands</b> in the promoter regions of ~60% of human genes.")) story.append(P("<b>Effect:</b> Methylation recruits methyl-CpG-binding domain (MBD) proteins and HDACs → prevents RNA polymerase binding → <b>gene silencing.</b> Unmethylated promoters = open, actively transcribed chromatin.")) dna_data = [ [Paragraph("<b>Enzyme</b>", body_style), Paragraph("<b>Role</b>", body_style), Paragraph("<b>Function</b>", body_style)], [Paragraph("DNMT3A, DNMT3B", body_style), Paragraph("Writer", body_style), Paragraph("De novo methylation", body_style)], [Paragraph("DNMT1", body_style), Paragraph("Writer", body_style), Paragraph("Maintenance methylation (replication)", body_style)], [Paragraph("TET1 (methylcytosine dioxygenase)", body_style), Paragraph("Eraser", body_style), Paragraph("Demethylation (oxidises 5-mC)", body_style)], [Paragraph("MECP2", body_style), Paragraph("Reader", body_style), Paragraph("Reads/interprets methylation marks", body_style)], ] t = Table(dna_data, colWidths=[W*0.38, W*0.17, W*0.45]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3c5e')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eef3f8'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#bbccdd')), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 6), ])) story.append(t) story.append(Spacer(1, 6)) story.append(Src("Fishman's Pulmonary Diseases | Cummings Otolaryngology | The Developing Human (Embryology)")) # 2B Histone modifications story.append(H2("2B. Histone Modifications")) story.append(P("<b>Nucleosome structure:</b> DNA is wrapped around a protein core of 2 copies each of H2A, H2B, H3, H4. Positively charged lysine residues on histone tails bind negatively charged DNA phosphates → tightly compressed, transcriptionally inaccessible chromatin.")) hist_data = [ [Paragraph("<b>Modification</b>", body_style), Paragraph("<b>Writer</b>", body_style), Paragraph("<b>Eraser</b>", body_style), Paragraph("<b>Effect</b>", body_style)], [Paragraph("Acetylation (Lys)", body_style), Paragraph("HATs (e.g. EP300)", body_style), Paragraph("HDACs (e.g. HDAC1)", body_style), Paragraph("Neutralises +ve charge → open chromatin → <b>gene activation</b>", body_style)], [Paragraph("Methylation", body_style), Paragraph("HMTs (e.g. EZH2)", body_style), Paragraph("Histone demethylases (e.g. JARID1C)", body_style), Paragraph("Context-dependent: H3K4me3 = active; H3K27me3 = repressive", body_style)], [Paragraph("Phosphorylation", body_style), Paragraph("Kinases", body_style), Paragraph("Phosphatases", body_style), Paragraph("Signal transduction, DNA damage response", body_style)], [Paragraph("Ubiquitination", body_style), Paragraph("Ubiquitin ligases", body_style), Paragraph("Deubiquitinases", body_style), Paragraph("Activation or repression", body_style)], [Paragraph("Sumoylation", body_style), Paragraph("SUMO ligases", body_style), Paragraph("SUMO proteases", body_style), Paragraph("Generally repressive", body_style)], ] t2 = Table(hist_data, colWidths=[W*0.22, W*0.23, W*0.28, W*0.27]) t2.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3c5e')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 8.5), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eef3f8'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#bbccdd')), ('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(t2) story.append(Spacer(1, 4)) story.append(P("• <b>HAT activity</b> at H3K56 relaxes chromatin; H4K16 acetylation regulates chromatin compaction.")) story.append(P("• <b>Corticosteroids:</b> anti-inflammatory action is partly epigenetic — they recruit <b>HDAC2</b> to acetylated inflammatory gene loci, deacetylating and silencing them.")) story.append(Src("Rheumatology 2022 (Elsevier) | Fishman's Pulmonary | Cummings Otolaryngology | The Developing Human")) # 2C miRNAs story.append(H2("2C. Non-Coding RNAs (miRNAs)")) story.append(P("<b>MicroRNAs (miRNAs)</b> are small non-coding RNA molecules, approximately <b>19–22 nucleotides</b> in length. They regulate gene expression at the <b>post-transcriptional level</b> via:")) story.append(B("mRNA degradation")) story.append(B("Translational repression")) story.append(P("miRNAs can bind to DNA and suppress expression of key genes, including those involved in inflammation. Dysregulated miRNAs may function as <b>oncomiRs</b> (oncogenes) or <b>tumour suppressors</b>. miRNA information can be transmitted across generations.")) story.append(Src("Fishman's Pulmonary Diseases | Cummings Otolaryngology | Firestein & Kelley's Rheumatology")) # ── READER-WRITER-ERASER ──────────────────────────────────────────────────── story.append(H1("3. READER – WRITER – ERASER FRAMEWORK")) story.append(Spacer(1, 6)) rwe_data = [ [Paragraph("<b>Role</b>", body_style), Paragraph("<b>Function</b>", body_style), Paragraph("<b>Examples</b>", body_style)], [Paragraph("<b>Writers</b>", body_style), Paragraph("Add epigenetic marks to DNA or histones", body_style), Paragraph("DNMT1/3A/3B, EZH2, EP300 (HAT)", body_style)], [Paragraph("<b>Readers</b>", body_style), Paragraph("Recognise and interpret epigenetic marks", body_style), Paragraph("MECP2, CBX2 (Polycomb complex), SMARCA4/BRG1", body_style)], [Paragraph("<b>Erasers</b>", body_style), Paragraph("Remove epigenetic marks", body_style), Paragraph("TET1 (demethylation), JARID1C, HDAC1", body_style)], ] t3 = Table(rwe_data, colWidths=[W*0.16, W*0.42, W*0.42]) t3.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3c5e')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eef3f8'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#bbccdd')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 6), ('VALIGN', (0,0), (-1,-1), 'TOP'), ])) story.append(t3) story.append(Spacer(1, 4)) story.append(Src("The Developing Human: Clinically Oriented Embryology")) # ── CHROMATIN STATES ───────────────────────────────────────────────────────── story.append(H1("4. CHROMATIN STATES")) story.append(Spacer(1, 6)) chrom_data = [ [Paragraph("<b>State</b>", body_style), Paragraph("<b>Marks</b>", body_style), Paragraph("<b>Transcription</b>", body_style)], [Paragraph("Euchromatin (open)", body_style), Paragraph("Histone acetylation, H3K4me3", body_style), Paragraph("Active ✓", body_style)], [Paragraph("Heterochromatin (closed)", body_style), Paragraph("DNA methylation, H3K27me3, H3K9me3, HDAC activity", body_style), Paragraph("Silenced ✗", body_style)], ] t4 = Table(chrom_data, colWidths=[W*0.28, W*0.50, W*0.22]) t4.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3c5e')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eef3f8'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#bbccdd')), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 6), ])) story.append(t4) story.append(Spacer(1, 4)) # ── DISEASE ASSOCIATIONS ───────────────────────────────────────────────────── story.append(H1("5. DISEASE ASSOCIATIONS & CLINICAL RELEVANCE")) story.append(Spacer(1, 6)) story.append(H2("5A. Chromatin Remodeling Disorders")) disorders = [ ("<b>Rett Syndrome</b>", "MECP2 mutation — loss of DNA methylation reader"), ("<b>Rubinstein-Taybi Syndrome</b>", "EP300 / CREBBP mutation — HAT deficiency"), ("<b>ATRX Syndrome</b>", "α-thalassemia / X-linked mental retardation"), ("<b>Various Cancers</b>", "Global hypomethylation + focal hypermethylation"), ] for d, desc in disorders: story.append(B(f"{d}: {desc}")) story.append(Spacer(1, 4)) story.append(H2("5B. Epigenome-Wide Disease Associations")) assoc = [ "<b>Psoriasis</b> — Hypermethylation of HLA-C promoter (epigenetic marker)", "<b>Melanoma</b> — Aberrant methylation affecting cell cycle, apoptosis, invasion, angiogenesis", "<b>Rheumatoid Arthritis (RA)</b> — Distinct methylation patterns in fibroblast-like synoviocytes (FLS); smoking modifies DNA methylation contributing to RA susceptibility", "<b>Lupus / Drug-induced Lupus (DIL)</b> — DNA methylation most strongly implicated", "<b>Colorectal Cancer</b> — MLH1 hypermethylation → microsatellite instability", "<b>Schizophrenia, Obesity, Type 2 Diabetes</b> — Epigenome-wide methylation studies (NIH Roadmap Epigenomics Consortium)", "<b>COPD, IPF, Pulmonary Hypertension</b> — Subtle epigenetic changes in lung; tobacco smoke directly mediates epigenetic changes", ] for a in assoc: story.append(B(a)) story.append(Src("Fitzpatrick's Dermatology | Rheumatology 2022 | Fishman's Pulmonary | Cummings Otolaryngology")) # ── HERITABILITY ───────────────────────────────────────────────────────────── story.append(H1("6. HERITABILITY & TRANSGENERATIONAL EPIGENETICS")) story.append(Spacer(1, 6)) story.append(B("Epigenetic information (especially DNA methylation) <b>can be transmitted across generations</b> — allowing rapid environmental adaptation.")) story.append(B("<b>Epimutations:</b> heritable epigenetic changes (e.g. germline MLH1 hypermethylation in colorectal cancer).")) story.append(B("Environmentally induced epigenetic changes (smoking, diet, pollutants) may be transmitted transgenerationally.")) story.append(B("Epigenetic mutations may occur <b>more frequently than DNA sequence mutations</b> over a lifetime.")) story.append(B("<b>Some epigenetic changes are reversible</b> — e.g. smoking-induced methylation changes revert gradually after cessation.")) story.append(Src("Fitzpatrick's Dermatology | Fishman's Pulmonary | Firestein & Kelley's Rheumatology")) # ── THERAPEUTIC ────────────────────────────────────────────────────────────── story.append(H1("7. THERAPEUTIC RELEVANCE & EPIGENOMICS")) story.append(Spacer(1, 6)) story.append(H2("7A. Epigenetic Drugs")) drug_data = [ [Paragraph("<b>Drug Class</b>", body_style), Paragraph("<b>Examples</b>", body_style), Paragraph("<b>Clinical Use</b>", body_style)], [Paragraph("DNMT inhibitors", body_style), Paragraph("Azacitidine, Decitabine", body_style), Paragraph("Myelodysplastic syndrome, AML", body_style)], [Paragraph("HDAC inhibitors", body_style), Paragraph("Vorinostat, Romidepsin", body_style), Paragraph("Cutaneous T-cell lymphoma", body_style)], [Paragraph("EZH2 inhibitors", body_style), Paragraph("Tazemetostat", body_style), Paragraph("Follicular lymphoma", body_style)], [Paragraph("Corticosteroids", body_style), Paragraph("Dexamethasone, Prednisolone", body_style), Paragraph("Recruit HDAC2 → silence inflammatory genes", body_style)], ] t5 = Table(drug_data, colWidths=[W*0.28, W*0.30, W*0.42]) t5.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3c5e')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eef3f8'), colors.white]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#bbccdd')), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 6), ('VALIGN', (0,0), (-1,-1), 'TOP'), ])) story.append(t5) story.append(Spacer(1, 4)) story.append(H2("7B. Epigenomics & Laboratory Methods")) lab = [ "<b>Methylation-specific PCR</b> — detects aberrant methylation in cancers (e.g. melanoma, HNSCC) with high sensitivity", "<b>ChIP-seq</b> (chromatin immunoprecipitation + DNA sequencing) — maps histone modification targets genome-wide", "<b>WGBS / RRBS</b> (whole genome / reduced representation bisulfite sequencing) — genome-wide DNA methylation profiling", "<b>RNA-seq</b> — gene expression profiling; used alongside epigenome analysis", "<b>Salivary / plasma DNA methylation</b> — non-invasive biomarker for early cancer screening (e.g. RASSF1a, p16INK4a, CDKN2A in HNSCC)", "<b>Epigenetic editing</b> — DNA-binding domain + catalytic module constructs to directly write/erase specific epigenetic marks (research use)", ] for l in lab: story.append(B(l)) story.append(Src("Fitzpatrick's Dermatology | Cummings Otolaryngology | Firestein & Kelley's Rheumatology | Fishman's Pulmonary")) # ── KEY POINTS BOX ─────────────────────────────────────────────────────────── story.append(Spacer(1, 8)) story.append(HRFlowable(width=W, thickness=1, color=colors.HexColor('#1a3c5e'), spaceAfter=6)) kp_data = [[ Paragraph("<b>KEY POINTS AT A GLANCE</b>", ParagraphStyle('kph', fontName='Helvetica-Bold', fontSize=10, textColor=colors.HexColor('#1a3c5e'))), ]] kp_body = [ "Epigenetics = heritable gene expression changes WITHOUT DNA sequence change", "Three main mechanisms: DNA methylation | Histone modifications | microRNAs", "DNA methylation at CpG islands → gene silencing (via MBD proteins + HDACs)", "Histone acetylation (HATs) → open chromatin → gene activation; HDACs reverse this", "miRNAs (~19–22 nt) → post-transcriptional silencing via mRNA degradation / translational repression", "Framework: Writers (add marks) | Readers (interpret) | Erasers (remove)", "Cancer: global hypomethylation (activates oncogenes) + focal hypermethylation (silences TSGs)", "Therapeutic targets: DNMT inhibitors (azacitidine), HDAC inhibitors (vorinostat), EZH2 inhibitors", "Some epigenetic changes are reversible (e.g. smoking-induced methylation reverts after quitting)", ] kp_items = "\n".join([f" ✓ {pt}" for pt in kp_body]) kp_data.append([Paragraph(kp_items, ParagraphStyle('kpb', fontName='Helvetica', fontSize=9, leading=14))]) kp_table = Table(kp_data, colWidths=[W]) kp_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f0f5fb')), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor('#1a3c5e')), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 10), ])) story.append(kp_table) # ── FOOTER SOURCES ────────────────────────────────────────────────────────── story.append(Spacer(1, 8)) story.append(HRFlowable(width=W, thickness=0.5, color=colors.HexColor('#aaaaaa'), spaceAfter=4)) all_sources = ("Fitzpatrick's Dermatology (Vol 1/2) | The Developing Human: Clinically Oriented Embryology | " "Cummings Otolaryngology Head & Neck Surgery | Fishman's Pulmonary Diseases and Disorders | " "Rheumatology 2-Volume Set (Elsevier 2022) | Firestein & Kelley's Textbook of Rheumatology | " "Kaplan & Sadock's Comprehensive Textbook of Psychiatry") story.append(Paragraph(f"<b>Textbook Sources:</b> {all_sources}", ParagraphStyle('footer', fontName='Helvetica', fontSize=7.5, textColor=colors.HexColor('#666666'), leading=11))) # Build doc.build(story) print("PDF created successfully!") EOF
Epigenetics Short Notes
PDF Document · PDF