# Scene: Academic / Thesis

## Palette

**Academic Dark** (Cool + Heavy + Calm) — Academic papers use **pure black body text**. Palette only for cover decoration and minimal title scenarios.

```js
const palette = {
  primary: "#000000",   // Title — pure black
  body: "#000000",      // Body — pure black
  secondary: "#333333", // Header/caption — dark grey
  accent: "#8B7E5A",    // Cover decoration line — cover only
  surface: "#F5F7FA",   // Table header light bg — three-line tables only
};
```

⚠️ **Body text color must be pure black `"000000"`**. No decorative dark-blue-grey. Academic papers require print-friendly, black-and-white clarity.

→ Placeholder convention & universal prohibitions — see `references/common-rules.md`
→ **Note:** This scene uses Profile A fonts with academic-specific overrides below.

---

## Page Layout

| Property | Value | Twips |
|----------|-------|-------|
| Top margin | 2.54 cm | 1440 |
| Bottom margin | 2.54 cm | 1440 |
| Left margin | 3.00 cm | 1701 |
| Right margin | 2.50 cm | 1417 |
| Header distance | 1.5 cm | 850 |
| Footer distance | 1.75 cm | 992 |

```js
page: {
  size: { width: 11906, height: 16838 },
  margin: { top: 1440, bottom: 1440, left: 1701, right: 1417, header: 850, footer: 992 },
}
```

For binding margin, add 0.5–1.0 cm to left (i.e., left: 1985–2268).

---

## Font Specifications

| Element | CN Font | EN Font | Size | half-pt | Style |
|---------|---------|---------|------|---------|-------|
| Thesis title | SimHei | Times New Roman | Xiao Er 18pt | 36 | Bold, centered |
| H1 | SimHei | Times New Roman | San Hao 16pt | 32 | Bold, centered |
| H2 | SimHei | Times New Roman | Xiao San 15pt | 30 | Bold, left |
| H3 | SimHei | Times New Roman | Si Hao 14pt | 28 | Bold, left |
| Body | SimSun | Times New Roman | Xiao Si 12pt | 24 | Normal, justified |
| Abstract title | SimHei | Times New Roman Bold | San Hao 16pt | 32 | Bold, centered |
| Abstract body | SimSun | Times New Roman | Xiao Si 12pt | 24 | Normal, justified |
| Keywords label | SimHei | Times New Roman Bold | Xiao Si 12pt | 24 | Bold |
| Keywords content | SimSun | Times New Roman | Xiao Si 12pt | 24 | Normal |
| Header | SimSun | Times New Roman | Xiao Wu 9pt | 18 | Centered, color 333333 |
| Page number | — | Times New Roman | Xiao Wu 10.5pt | 21 | Centered |
| Footnote | SimSun | Times New Roman | Xiao Wu 9pt | 18 | Normal |
| Figure/table caption | SimSun | Times New Roman | Wu Hao 10.5pt | 21 | Centered |

### Paragraph Format
- Body: justified, first-line indent 2 chars (`firstLine: 480`, SimSun Xiao Si = 480 twips)
- Line spacing: 1.5x (`line: 360`); if school requires fixed 22pt, use `line: 440, lineRule: "exact"`
- Body paragraph spacing: before/after 0pt; heading spacing per styles below

```js
styles: {
  default: {
    document: {
      run: { font: { ascii: "Times New Roman", eastAsia: "SimSun" }, size: 24, color: "000000" },
      paragraph: { spacing: { line: 360 } },
    },
    heading1: {
      run: { font: { ascii: "Times New Roman", eastAsia: "SimHei" }, size: 32, bold: true, color: "000000" },
      paragraph: { alignment: AlignmentType.CENTER, spacing: { before: 480, after: 360, line: 360 } },
    },
    heading2: {
      run: { font: { ascii: "Times New Roman", eastAsia: "SimHei" }, size: 30, bold: true, color: "000000" },
      paragraph: { spacing: { before: 360, after: 240, line: 360 } },
    },
    heading3: {
      run: { font: { ascii: "Times New Roman", eastAsia: "SimHei" }, size: 28, bold: true, color: "000000" },
      paragraph: { spacing: { before: 240, after: 120, line: 360 } },
    },
  },
}
```

---

## Heading Numbering System (Mandatory)

### Format

| Level | Format | Example |
|-------|--------|---------|
| H1 | Chapter X + title | 第一章 绪论 (Chapter 1 Introduction) |
| H2 | X.X + section title | 1.1 Research Background |
| H3 | X.X.X + subsection | 1.1.1 Domestic Research Status |

### Mandatory Rules
1. **H1 must use "第X章" format** — not "一、", not "Chapter 1", not "第1章"
2. **H2/H3 use Arabic decimal numbering** (1.1, 1.1.1) — no "(一)", "1)"
3. **No mixing multiple numbering systems**
4. **No level-skipping** (cannot jump from H1 to H3)
5. **All body headings must use `heading: HeadingLevel.HEADING_X`** (TOC depends on this)

```js
// ✅ Correct
new Paragraph({
  heading: HeadingLevel.HEADING_1,
  children: [new TextRun({ text: "第一章 绪论", bold: true, size: 32, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })]
})
new Paragraph({
  heading: HeadingLevel.HEADING_2,
  children: [new TextRun({ text: "1.1 研究背景", bold: true, size: 30, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })]
})
```

### Non-Body Headings
Abstract, Table of Contents, References, Appendices, Acknowledgments:
- Use H1 style (San Hao SimHei centered) for TOC indexing
- But **no numbering** (write directly: "摘　要", "参考文献", etc. — these are non-numbered standalone section headings)

---

## Document Structure & Multi-Section Architecture

Theses must use **multi-section structure** for independent page numbering and header/footer per section.

### Complete Structure

```
Section 1: Cover           → No page number, no header/footer
Section 2: Chinese Abstract → Roman numerals starting from i
Section 3: English Abstract → Roman numerals continued
Section 4: Table of Contents → Roman numerals continued
Section 5: Body (all chapters) → Arabic numerals from 1
Section 6: References       → Arabic numerals continued
Section 7: Appendices (if any) → Arabic numerals continued
Section 8: Acknowledgments (if any) → Arabic numerals continued
```

### Page Number Implementation

```js
const { NumberFormat } = require("docx");

// Section 1: Cover — no page number
{
  properties: {
    page: { margin: { top: 0, bottom: 0, left: 0, right: 0 } },
    titlePage: true,
  },
  children: buildCover(...),
}

// Section 2: Abstract — Roman numerals from i
{
  properties: {
    type: SectionType.NEXT_PAGE,
    page: {
      margin: { top: 1440, bottom: 1440, left: 1701, right: 1417, header: 850, footer: 992 },
      pageNumbers: { start: 1, formatType: NumberFormat.UPPER_ROMAN },
    },
  },
  headers: { default: buildHeader("Thesis Title") },
  footers: { default: buildPageNumberFooter() },
  children: buildAbstractCN(...),
}

// Section 3: English Abstract — Roman numerals continued (no reset)
{
  properties: {
    type: SectionType.NEXT_PAGE,
    page: {
      margin: { top: 1440, bottom: 1440, left: 1701, right: 1417, header: 850, footer: 992 },
      pageNumbers: { formatType: NumberFormat.UPPER_ROMAN },  // no start → continues from previous
    },
  },
  headers: { default: buildHeader("Thesis Title") },
  footers: { default: buildPageNumberFooter() },
  children: buildAbstractEN(...),
}

// Section 5: Body — Arabic numerals from 1
{
  properties: {
    type: SectionType.NEXT_PAGE,
    page: {
      margin: { top: 1440, bottom: 1440, left: 1701, right: 1417, header: 850, footer: 992 },
      pageNumbers: { start: 1, formatType: NumberFormat.DECIMAL },
    },
  },
  headers: { default: buildHeader("Thesis Title") },
  footers: { default: buildPageNumberFooter() },
  children: buildMainContent(...),
}
// Section 6+: References/Appendices/Acknowledgments — Arabic continued
```

### Header & Footer Helpers

```js
function buildHeader(title) {
  return new Header({ children: [
    new Paragraph({ alignment: AlignmentType.CENTER,
      border: { bottom: { style: BorderStyle.SINGLE, size: 1, color: "000000" } },
      children: [new TextRun({ text: title, size: 18, color: "333333",
        font: { ascii: "Times New Roman", eastAsia: "SimSun" } })],
    }),
  ] });
}

function buildPageNumberFooter() {
  return new Footer({ children: [
    new Paragraph({ alignment: AlignmentType.CENTER,
      children: [
        new TextRun({ text: "- ", size: 21 }),
        new TextRun({ children: [PageNumber.CURRENT], size: 21 }),
        new TextRun({ text: " -", size: 21 }),
      ],
    }),
  ] });
}
```

### Page Break Rules
- Cover is a separate section (no PageBreak needed)
- Chinese abstract, English abstract, TOC each in their own section
- All body chapters in **one section** (no forced page breaks between chapters unless user requests)
- References, appendices, acknowledgments each in their own section
- **Never use blank lines instead of section breaks**

---

## Cover

### Information Fields

Cover must include (use placeholders for missing info):

| Field | Format | Placeholder |
|-------|--------|-------------|
| University name | Er Hao SimHei, centered | ×××University |
| Thesis title (CN) | Xiao Er SimHei, centered | (user-provided) |
| Thesis title (EN) | San Hao Times New Roman, centered | (translated from CN) |
| College | Si Hao SimSun | ×××College |
| Major | Si Hao SimSun | ×××Major |
| Author | Si Hao SimSun | ××× |
| Student ID | Si Hao SimSun | ××××××× |
| Advisor | Si Hao SimSun | ×××Professor |
| Date | Si Hao SimSun | 2026/XX |

### Cover Style

Use Recipe R5 (Clean White) or academic-specific `buildAcademicCover()` — never use commercial-style covers.

### Cover Layout Order (Mandatory)

The visual order on academic covers must follow this hierarchy from top to bottom:

1. School name (top)
2. Document type label (e.g., "Undergraduate Thesis", "Thesis Proposal Report")
3. **Thesis title** (prominent, centered)
4. Thesis English title (if bilingual)
5. **Author information table** (college, major, author, student ID, advisor)
6. Date (bottom)

⚠️ **Title MUST appear ABOVE the author info table.** The screenshot issue of info table appearing above the title is caused by incorrect element ordering. The `buildAcademicCover()` and `buildProposalCover()` functions below enforce correct order.

⚠️ **Layout must be vertically balanced** — use dynamic spacing to distribute whitespace evenly. Do not cram all elements into the top half or let large gaps appear between elements.

```js
function buildAcademicCover(info) {
  const { school, title, titleEN, college, major, author, studentId, advisor, date } = info;

  // ⚠️ Use safeText() for all values — never output "undefined"
  const infoRows = [
    ["College", safeText(college, "【College】")],
    ["Major", safeText(major, "【Major】")],
    ["Author", safeText(author, "【Author】")],
    ["Student ID", safeText(studentId, "【Student ID】")],
    ["Advisor", safeText(advisor, "【Advisor】")],
  ];

  const infoTable = new Table({
    width: { size: 60, type: WidthType.PERCENTAGE },
    alignment: AlignmentType.CENTER,
    borders: { top: NB, bottom: NB, left: NB, right: NB, insideHorizontal: NB, insideVertical: NB },
    rows: infoRows.map(([label, value]) => new TableRow({
      cantSplit: true,
      children: [
        new TableCell({
          width: { size: 35, type: WidthType.PERCENTAGE },
          borders: { bottom: { style: BorderStyle.SINGLE, size: 1, color: "000000" }, top: NB, left: NB, right: NB },
          margins: { top: 60, bottom: 60, left: 120, right: 120 },
          children: [new Paragraph({
            alignment: AlignmentType.RIGHT,
            children: [new TextRun({ text: label + ":", size: 28, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })],
          })],
        }),
        new TableCell({
          borders: { bottom: { style: BorderStyle.SINGLE, size: 1, color: "000000" }, top: NB, left: NB, right: NB },
          margins: { top: 60, bottom: 60, left: 120, right: 120 },
          children: [new Paragraph({
            alignment: AlignmentType.CENTER,
            children: [new TextRun({ text: value, size: 28, font: { eastAsia: "SimSun", ascii: "Times New Roman" } })],
          })],
        }),
      ],
    })),
  });

  // ⚠️ Correct order: school → doc type → TITLE → info table → date
  // ★ Rule 8: All large-font paragraphs must set explicit line spacing
  return [
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { before: 1200, after: 400, line: Math.ceil(22 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: safeText(school, "【University Name】"), size: 44, bold: true, font: { eastAsia: "SimHei" } })] }),
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 800, line: Math.ceil(18 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: "Undergraduate Thesis", size: 36, font: { eastAsia: "SimHei" } })] }),
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 200, line: Math.ceil(18 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: safeText(title, "【Thesis Title】"), size: 36, bold: true, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })] }),
    titleEN ? new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 1200, line: Math.ceil(16 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: titleEN, size: 32, font: { ascii: "Times New Roman" } })] })
      : new Paragraph({ spacing: { after: 1200 }, children: [] }),
    infoTable,
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { before: 1200, line: Math.ceil(14 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: safeText(date, "2026/XX"), size: 28, font: { eastAsia: "SimSun" } })] }),
  ];
}
```

### Thesis Proposal Report Cover (开题报告)

Thesis proposal reports use a similar cover layout but with different document type label. The key layout rule is the same: **title above author info, evenly spaced**.

⚠️ **CRITICAL — Proposal cover MUST be an independent section:**
The proposal cover MUST be placed in its **own section** (with margin: 0 and a 16838 wrapper table), completely separate from the body content. The body content starts in the **next section** (with `SectionType.NEXT_PAGE` or as a separate section entry). **Never place the cover elements and body content in the same section** — this causes them to render on the same page without any page break, which is the #1 proposal report formatting failure.

```js
// ✅ Correct — cover and body in separate sections
sections: [
  {
    properties: { page: { margin: { top: 0, bottom: 0, left: 0, right: 0 } } },
    children: buildProposalCover(info),  // standalone cover section
  },
  {
    properties: { page: { margin: { top: 1440, bottom: 1440, left: 1701, right: 1417 } } },
    children: [...bodyContent],  // body starts here
  },
]

// ❌ WRONG — cover and body in same section (no page separation!)
sections: [
  {
    children: [...coverElements, ...bodyContent],  // everything on one continuous flow
  },
]
```

```js
function buildProposalCover(info) {
  const { school, year, title, subtitle, college, major, author, studentId, advisor, date } = info;

  // ⚠️ Use safeText() for all values
  const infoRows = [
    ["姓名 (Name)", safeText(author, "XXX")],
    ["专业 (Major)", safeText(major, "XXX")],
    ["入学时间 (Enrollment)", safeText(info.enrollment, "XXX")],
  ];

  const infoTable = new Table({
    width: { size: 60, type: WidthType.PERCENTAGE },
    alignment: AlignmentType.CENTER,
    borders: { top: NB, bottom: NB, left: NB, right: NB, insideHorizontal: NB, insideVertical: NB },
    rows: infoRows.map(([label, value]) => new TableRow({
      children: [
        new TableCell({
          width: { size: 35, type: WidthType.PERCENTAGE },
          borders: { bottom: { style: BorderStyle.SINGLE, size: 1, color: "000000" }, top: NB, left: NB, right: NB },
          margins: { top: 60, bottom: 60, left: 120, right: 120 },
          children: [new Paragraph({
            alignment: AlignmentType.CENTER,
            children: [new TextRun({ text: label, size: 28, bold: true, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })],
          })],
        }),
        new TableCell({
          borders: { bottom: { style: BorderStyle.SINGLE, size: 1, color: "000000" }, top: NB, left: NB, right: NB },
          margins: { top: 60, bottom: 60, left: 120, right: 120 },
          children: [new Paragraph({
            alignment: AlignmentType.CENTER,
            children: [new TextRun({ text: value, size: 28, font: { eastAsia: "SimSun", ascii: "Times New Roman" } })],
          })],
        }),
      ],
    })),
  });

  // ⚠️ Correct order: doc type label → info table → "论文题目" label → TITLE → subtitle
  // Layout balanced: upper 40% for header + info, middle 20% for title, lower 40% for whitespace
  // ★ Rule 8: All large-font paragraphs must set explicit line spacing
  return [
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { before: 1500, after: 600, line: Math.ceil(18 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: safeText(year, "2025") + " 届本科毕业论文开题报告",
        size: 36, bold: true, font: { eastAsia: "SimHei", ascii: "Times New Roman" } })] }),
    infoTable,
    new Paragraph({ spacing: { before: 1200 } }),  // Balanced whitespace
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 200 },
      children: [new TextRun({ text: "论文题目", size: 28, font: { eastAsia: "SimSun", ascii: "Times New Roman" } })] }),
    new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 200, line: Math.ceil(16 * 23), lineRule: "atLeast" },
      children: [new TextRun({ text: safeText(title, "【Thesis Title】"), size: 32, bold: true,
        font: { eastAsia: "SimHei", ascii: "Times New Roman" } })] }),
    subtitle ? new Paragraph({ alignment: AlignmentType.CENTER, spacing: { after: 800 },
      children: [new TextRun({ text: "——" + subtitle, size: 28,
        font: { eastAsia: "SimSun", ascii: "Times New Roman" } })] })
      : new Paragraph({ spacing: { after: 800 }, children: [] }),
  ];
}
```

### ⚠️ WPS Compatibility Notes for Academic Covers

Both thesis cover and proposal cover use info tables. These MUST follow the cross-engine rules:
- Table uses **percentage widths** (`WidthType.PERCENTAGE`), NOT DXA — WPS renders DXA widths differently in nested contexts
- Table width: adaptive 55–75%, centered via `alignment: CENTER` (calculated by `calcR5MetaLayout()`)
- Label column: **LEFT aligned**, plain text + "：", NO full-width space padding, NO borders
- Value column: **LEFT aligned**, `bottom: single sz=4` border = fixed-length underline
- Cell `margins.top/bottom: 60` is acceptable (small values) but avoid larger values
- All paragraphs with font size > 12pt (body) must set `spacing: { line: Math.ceil(fontPt * 23), lineRule: "atLeast" }` to prevent top clipping (Rule 8)
- ⚠️ Do NOT use DXA widths, full-width space padding (`\u3000`), tab stops, or right-alignment for meta info

⚠️ **Proposal cover must fit on one page.** Use the same height-budget approach as commercial covers — total content height must stay within 15638 twips (1200 twips safety margin). If the title is very long, reduce font size (minimum 24pt).
```

---

## Section Content Standards

### Chinese Abstract
**Format:**
- Title: "摘　要" (space in middle), San Hao SimHei centered, H1 style
- Body: Xiao Si SimSun, justified, first-line indent 480 twips
- Keywords: "关键词：" SimHei bold + content SimSun normal, 3–8 keywords, semicolon-separated

**Content structure (mandatory):**
1. Research background (1–2 sentences)
2. Research problem/purpose (1 sentence)
3. Research method (1–2 sentences)
4. Main results/findings (2–3 sentences)
5. Research significance/value (1 sentence)

⚠️ **Abstract is NOT a TOC summary.** Must not read as "Chapter 1 introduces... Chapter 2 analyzes..."

### English Abstract
- Title: "Abstract", San Hao Times New Roman Bold, centered, H1 style
- Body: Xiao Si Times New Roman, justified
- Keywords: bold label + normal content, 3–8 keywords, comma-separated
- **Must be consistent with Chinese abstract** — no significant shrinkage
- Use formal academic English, avoid Chinglish

### Table of Contents
- Title: "目　录", San Hao SimHei centered
- Use `TableOfContents` field for auto-generation, display at least H1–H2, recommend H3
- Run `"$DOCX_SCRIPTS/add_toc_placeholders.py" --auto` after generation
- TOC on its own page

---

## Body Chapter Structure

### Standard Structure (6-chapter)

```
Chapter 1: Introduction
  1.1 Research Background
  1.2 Research Purpose & Significance
  1.3 Literature Review (Domestic & International)
  1.4 Research Content & Methods
  1.5 Thesis Structure

Chapter 2: Theoretical Framework & Literature Review
  2.1 Core Concept Definitions
  2.2 Theoretical Basis
  2.3 Literature Review
  2.4 Research Gap & Entry Point

Chapter 3: Research Design / Method / Model
  3.1 Research Framework
  3.2 Method Design / System Architecture / Algorithm
  3.3 Variables / Data Sources / Experimental Environment

Chapter 4: Empirical Analysis / Case Study / Results
  4.1 Data Analysis / Case Description / Experiment Process
  4.2 Results Presentation
  4.3 Results Interpretation

Chapter 5: Discussion
  5.1 Key Findings
  5.2 Comparison with Existing Research
  5.3 Limitations

Chapter 6: Conclusions & Outlook
  6.1 Research Conclusions
  6.2 Contributions
  6.3 Limitations
  6.4 Future Research Directions
```

### Chapter Content Requirements

**Chapter 1 (Introduction):** Must state background, purpose, significance, methods, content, structure.

**Chapter 2 (Literature Review):** Must be systematically organized by theme/method/stage — **never a chronological dump of papers**. Must identify contributions, gaps, and research opportunities.

**Chapter 3 (Method):** Must explain why this method was chosen and its rationale. Content must be understandable, executable, reproducible.

**Chapter 4 (Results):** Must be specific, not vague. Must be consistent with Chapter 3 design.

**Chapter 5 (Discussion):** Must not merely repeat Chapter 4 results. Must explain what results mean and what conclusions they support.

**Chapter 6 (Conclusions):** Must summarize concisely, state contributions, acknowledge limitations, propose future directions. Must end formally — no abrupt ending.

---

## Discipline-Adaptive Routing

Auto-adjust research methods and chapter emphasis by discipline. **When user doesn't specify method, choose the most appropriate research paradigm for the discipline — never mechanically apply "empirical + survey + regression" template.**

### 1. Humanities & Social Sciences (Literature, History, Philosophy, Arts)
**Preferred methods:** Literature analysis, theoretical research, text analysis, comparative studies, historical research
**Adjustments:** Ch.2 focuses on theoretical lineage; Ch.4 becomes text analysis/case argumentation; minimize "variables", "hypotheses", "regression" terminology

### 2. Management / Economics / Public Administration
**Preferred methods:** Case analysis, surveys, model analysis, institutional research, empirical research
**Adjustments:** Ch.3 focuses on hypotheses, variables, framework; Ch.4 on data collection & analysis; Ch.5 adds management implications/policy recommendations

### 3. Computer Science / Engineering / IT
**Preferred methods:** Method design, system architecture, experimental comparison, performance evaluation, algorithm analysis
**Adjustments:** Ch.3 becomes system/algorithm design; Ch.4 becomes experiments (environment, parameters, control experiments, metric comparison); minimize "interviews", "surveys"

### 4. Education / Linguistics / Communication
**Preferred methods:** Teaching experiments, text analysis, survey research, interview research, case studies
**Adjustments:** Ch.3 focuses on subjects, dimensions, samples; Ch.4 on teaching practice/communication case analysis; Ch.5 adds educational implications/communication strategies

### 5. Law / Marxism / Policy Studies
**Preferred methods:** Normative analysis, statutory interpretation, case studies, institutional comparison, theoretical analysis
**Adjustments:** Ch.2 focuses on legal/policy framework; Ch.4 becomes case analysis/institutional comparison; Ch.5 focuses on normative evaluation, reform recommendations

---

## Figure/Table/Formula Numbering (By Chapter)

### Numbering Rules

| Type | Format | Example |
|------|--------|---------|
| Figure | Figure X-Y | Figure 3-1, Figure 4-2 |
| Table | Table X-Y | Table 2-1, Table 4-3 |
| Formula | Eq. (X-Y) | Eq. (3-1), Eq. (5-2) |

Where X = chapter number, Y = sequential number within chapter.

### Figures
- Caption **below** figure, Wu Hao SimSun, centered
- Format: "Figure X-Y Description"
- Must be referenced in text: "as shown in Figure 3-1"

```js
new Paragraph({ alignment: AlignmentType.CENTER,
  children: [new ImageRun({ data: imgBuf, transformation: { width: w, height: h }, type: "png" })] }),
new Paragraph({ alignment: AlignmentType.CENTER, spacing: { before: 60, after: 200 },
  children: [new TextRun({ text: "图3-1 System Architecture", size: 21,
    font: { eastAsia: "SimSun", ascii: "Times New Roman" } })] }),
```

### Tables
- Caption **above** table, Wu Hao SimSun, centered, `keepNext: true`
- Format: "Table X-Y Description"
- Must use three-line table (mandatory for academic papers)
- Must be referenced in text: "as shown in Table 2-1"

### Formulas
- Formula centered, number **right-aligned**
- Use Tab for center + right alignment
- Text reference: "from Eq. (3-1)"

```js
new Paragraph({
  alignment: AlignmentType.CENTER,
  tabStops: [
    { type: TabStopType.CENTER, position: 4500 },
    { type: TabStopType.RIGHT, position: 9000 },
  ],
  children: [
    new TextRun({ text: "\t" }),
    new TextRun({ text: "E = mc²" }),
    new TextRun({ text: "\t(3-1)" }),
  ],
}),
```

### Mandatory Rules
1. Figures/tables/formulas **must be referenced in text** — never placed without explanation
2. Must have introductory and analytical text before/after
3. Must not exceed page margins
4. Insert only when analytically valuable — not for decoration

---

## Citation & Reference System

### In-Text Citation (Sequential Numbering)

Default: **GB/T 7714 sequential numbering** — `[1]`, `[2]` in text, references listed in order of appearance.

```js
new TextRun({ text: "[1]", superScript: true, size: 18, font: { ascii: "Times New Roman" } })
```

### Citation Rules
1. In-text numbers must **correspond one-to-one** with reference list
2. **Same source reused keeps the same number**
3. **Do not mix footnote citations and endnote references** (unless user explicitly requests)
4. Footnotes are for supplementary notes only, not primary citations

### Reference Format (GB/T 7714)
```
[1] Author. Title[J]. Journal, Year, Vol(No): Pages.
[2] Author. Book Title[M]. Place: Publisher, Year: Pages.
[3] Author. Title[D]. Location: Institution, Year.
[4] Author. Title[EB/OL]. (Published)[Cited]. URL.
```

### Reference Formatting
```js
// Reference title — H1 style
new Paragraph({ heading: HeadingLevel.HEADING_1, alignment: AlignmentType.CENTER,
  children: [new TextRun({ text: "References", bold: true, size: 32, font: { eastAsia: "SimHei" } })] }),
// Each entry — hanging indent
new Paragraph({
  indent: { left: 420, hanging: 420 },
  spacing: { line: 360 },
  children: [new TextRun({ text: "[1] Author. Title[J]. Journal, 2024, 59(3): 45-62.",
    size: 21, font: { eastAsia: "SimSun", ascii: "Times New Roman" } })],
}),
```

### Reference Count Guidelines

| Thesis Type | Suggested Count |
|------------|----------------|
| Course paper (3000–5000 words) | 10–15 |
| Undergraduate thesis | 15–30 |
| Master's thesis | 40–80 |
| Doctoral dissertation | 80–150 |

If user specifies APA, MLA, Chicago, or school-specific format, follow that instead.

---

## Three-Line Table (Mandatory for Academic Papers)

All tables in academic papers **must use three-line tables** — no full-border tables.

```js
const threeLineTable = new Table({
  width: { size: 100, type: WidthType.PERCENTAGE },
  borders: {
    top: { style: BorderStyle.SINGLE, size: 4, color: "000000" },
    bottom: { style: BorderStyle.SINGLE, size: 4, color: "000000" },
    left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE },
    insideHorizontal: { style: BorderStyle.NONE }, insideVertical: { style: BorderStyle.NONE },
  },
  rows: [
    new TableRow({
      tableHeader: true, cantSplit: true,
      children: headerCells.map(text => new TableCell({
        borders: { bottom: { style: BorderStyle.SINGLE, size: 2, color: "000000" },
          top: { style: BorderStyle.NONE }, left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE } },
        margins: { top: 60, bottom: 60, left: 120, right: 120 },
        children: [new Paragraph({ alignment: AlignmentType.CENTER,
          children: [new TextRun({ text, bold: true, size: 21, font: { eastAsia: "SimSun", ascii: "Times New Roman" } })] })],
      })),
    }),
    ...dataRows, // All borders NONE
  ],
});
```

---

## Content Quality Constraints (Mandatory)

### Truthfulness & Conservatism
1. **Never fabricate** unverifiable statistics, survey response counts, significance levels, interview subject identities, experimental precision, government document numbers
2. **Never invent** non-existent classic theories, authoritative scholar opinions, regulation names, core data sources
3. When user provides no real data → prefer **theoretical analysis, literature research, case studies, comparative analysis** (low-risk methods)
4. If example data must be constructed → keep scale reasonable, results conservative; never produce "significantly superior" or "dramatically improved" high-risk claims
5. Research conclusions must be **restrained** — do not overstate contributions, effects, or applicability
6. Research limitations must be **honestly disclosed**

### Language Style
1. Formal academic register throughout
2. **Forbidden:** "I think", "everyone knows", "obviously", "it is well known" (subjective expressions)
3. **Forbidden:** Sloganeering, propaganda, advertising-style expressions
4. First occurrence of CN/EN terms should include English original
5. CN/EN punctuation, spacing, and number formats must be consistent throughout

### Structural Consistency
1. Abstract, body, and conclusions **must be consistent** — no self-contradiction
2. Must form complete loop: "research question → method → analysis → findings → conclusions & outlook"
3. Terminology consistent throughout — no concept drift
4. All chapters balanced and substantive — no padding

### Document Cleanliness
1. **No residual** comments, tracked changes, field codes, template default text
2. **No** "TBD", "omitted", "user modifies", "insert figure here" expressions
3. **No** Markdown syntax, HTML tags, code blocks wrapping body text
4. **No** consecutive blank lines, abnormal page breaks, chaotic numbering
5. Final document must be clean, well-formatted, ready for submission

---

## School Standard Override Rule

⚠️ **When user specifies school/journal-specific format requirements, those requirements OVERRIDE all defaults above.**

Common override items:
- Margins (binding margin left 3.5 cm common)
- Body font (some schools require FangSong)
- Line spacing (some schools require fixed 28pt)
- Cover layout (varies significantly by school)
- Reference format (APA, MLA, etc.)
- Heading numbering (some schools use "1", "2" instead of "Chapter 1", "Chapter 2")

### Common Variants

| Thesis Type | Common Differences |
|------------|-------------------|
| Top universities | Strict GB/T 7714, often require STXiaoBiaoSong cover |
| Regular undergraduate | More flexible, SimSun/SimHei sufficient |
| Master's thesis | Requires English abstract, longer lit review, innovation statement |
| Doctoral dissertation | Requires innovation statement, publication list, originality declaration |

---

## Scene-Specific Quality Checks

In addition to universal checks (see `references/common-rules.md`):

### Structure & Content
- [ ] Cover, abstract, English abstract, TOC, body, references all present
- [ ] Cover info complete (school/title/EN title/college/major/name/ID/advisor/date)
- [ ] Abstract contains 5 elements: background + problem + method + results + significance
- [ ] English abstract consistent with Chinese abstract
- [ ] All chapters balanced, substantive, logical loop complete
- [ ] Literature review is thematic, not chronological dump
- [ ] Conclusions respond to research questions

### Format & Layout
- [ ] Heading numbering consistent (Chapter X / X.X / X.X.X), no mixing
- [ ] All body headings use `heading: HeadingLevel.HEADING_X`
- [ ] Body text pure black `"000000"`
- [ ] Three-line tables used consistently (no full-border tables)
- [ ] Figure captions below, table captions above, numbered by chapter
- [ ] Formulas centered, numbers right-aligned
- [ ] In-text citations match reference list one-to-one
- [ ] References use hanging indent, consistent format
- [ ] Page numbers: front matter Roman, body Arabic from 1
- [ ] Cover has no page number
- [ ] Headers formal and concise
- [ ] No extra blank pages

### Cleanliness
- [ ] No comment/revision residuals
- [ ] No "TBD" / "omitted" expressions
- [ ] No Markdown/HTML/code block residuals
- [ ] No consecutive blank lines or abnormal page breaks
- [ ] No fabricated high-risk data or exaggerated conclusions
