32 KiB
Executable File
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.
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 |
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, useline: 440, lineRule: "exact" - Body paragraph spacing: before/after 0pt; heading spacing per styles below
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
- H1 must use "第X章" format — not "一、", not "Chapter 1", not "第1章"
- H2/H3 use Arabic decimal numbering (1.1, 1.1.1) — no "(一)", "1)"
- No mixing multiple numbering systems
- No level-skipping (cannot jump from H1 to H3)
- All body headings must use
heading: HeadingLevel.HEADING_X(TOC depends on this)
// ✅ 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
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
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:
- School name (top)
- Document type label (e.g., "Undergraduate Thesis", "Thesis Proposal Report")
- Thesis title (prominent, centered)
- Thesis English title (if bilingual)
- Author information table (college, major, author, student ID, advisor)
- 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.
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.
// ✅ 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
},
]
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 bycalcR5MetaLayout()) - Label column: LEFT aligned, plain text + ":", NO full-width space padding, NO borders
- Value column: LEFT aligned,
bottom: single sz=4border = fixed-length underline - Cell
margins.top/bottom: 60is 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)"
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
- Figures/tables/formulas must be referenced in text — never placed without explanation
- Must have introductory and analytical text before/after
- Must not exceed page margins
- 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.
new TextRun({ text: "[1]", superScript: true, size: 18, font: { ascii: "Times New Roman" } })
Citation Rules
- In-text numbers must correspond one-to-one with reference list
- Same source reused keeps the same number
- Do not mix footnote citations and endnote references (unless user explicitly requests)
- 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
// 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.
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
- Never fabricate unverifiable statistics, survey response counts, significance levels, interview subject identities, experimental precision, government document numbers
- Never invent non-existent classic theories, authoritative scholar opinions, regulation names, core data sources
- When user provides no real data → prefer theoretical analysis, literature research, case studies, comparative analysis (low-risk methods)
- If example data must be constructed → keep scale reasonable, results conservative; never produce "significantly superior" or "dramatically improved" high-risk claims
- Research conclusions must be restrained — do not overstate contributions, effects, or applicability
- Research limitations must be honestly disclosed
Language Style
- Formal academic register throughout
- Forbidden: "I think", "everyone knows", "obviously", "it is well known" (subjective expressions)
- Forbidden: Sloganeering, propaganda, advertising-style expressions
- First occurrence of CN/EN terms should include English original
- CN/EN punctuation, spacing, and number formats must be consistent throughout
Structural Consistency
- Abstract, body, and conclusions must be consistent — no self-contradiction
- Must form complete loop: "research question → method → analysis → findings → conclusions & outlook"
- Terminology consistent throughout — no concept drift
- All chapters balanced and substantive — no padding
Document Cleanliness
- No residual comments, tracked changes, field codes, template default text
- No "TBD", "omitted", "user modifies", "insert figure here" expressions
- No Markdown syntax, HTML tags, code blocks wrapping body text
- No consecutive blank lines, abnormal page breaks, chaotic numbering
- 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