基于《2026年北京大学全国中学生模拟联合国大会学术标准手册(修订版)》提供学术指导。
> 当且仅当用户请求创建/生成 Word/docx 文件时,本节具有最高优先级,必须最先阅读并严格执行。
> 致命错误模式(绝对禁止):
> - ❌ para.add_run("整段文字").bold = True → 整段加粗是错误的
> - ❌ para.add_run("整段文字").italic = True → 整段斜体是错误的
> - ❌ para.add_run("整段文字").underline = True → 整段下划线是错误的
> - ✅ 正确做法:把每一段拆成多个 Run,每个 Run 单独设置格式
┌─────────────────────────────────────────────────────────────┐
│ 铁律一:加粗(Bold)只允许用于以下位置 │
│ ✓ 条款编号:"第一条"、"第二条"、1.、2. │
│ ✓ 标签文字:"起草国:"、"委员会:"、"附议国:" │
│ ✗ 绝对不允许对正文整段加粗 │
│ │
│ 铁律二:斜体(Italic)只允许用于以下位置 │
│ ✓ 起草国/附议国的国家名称 │
│ ✗ 序言性条款正文不用斜体 │
│ ✗ 行动条款正文绝不用斜体 │
│ ✗ 立场文件正文绝不用斜体 │
│ │
│ 铁律三:下划线(Underline)只允许用于以下位置 │
│ ✓ 序言条款开头的一个动词词(回顾、注意到、Recalling...) │
│ ✗ 绝对不允许整句下划线 │
│ │
│ 铁律四:国家名列表必须逐字拆分 Run │
│ ✓ Run1:"起草国:"[B] + Run2:"国家A"[BI] + │
│ Run3:"、"[] + Run4:"国家B"[BI] │
│ ✗ 禁止 Run1:"起草国:国家A、国家B"[BI] │
└─────────────────────────────────────────────────────────────┘
---
## 逐行代码模板(创建 docx 时直接套用)
> **以下模板可直接复制使用。每个模板都展示了正确的 Run 拆分方式。**
### 模板 A:决议草案 — 中文文件头
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
doc = Document()
p = doc.add_paragraph()
r = p.add_run("决议草案 ")
r.bold = True
r.font.size = Pt(14)
r2 = p.add_run("1.2")
r2.bold = True
r2.font.size = Pt(14)
p2 = doc.add_paragraph()
r3 = p2.add_run("联合国大会")
r3.bold = True
r3.font.size = Pt(14)
p3 = doc.add_paragraph()
r4 = p3.add_run("1947巴勒斯坦问题")
r4.bold = True
r4.font.size = Pt(14)
p4 = doc.add_paragraph()
label_r = p4.add_run("起草国:")
label_r.bold = True
label_r.italic = True # 标签加粗斜体
countries = ["大不列颠及北爱尔兰联合王国", "黎巴嫩共和国", "南非联邦", "伊朗国"]
for i, country in enumerate(countries):
if i > 0:
p4.add_run("、") # 分隔符:无格式,单独 Run
c_run = p4.add_run(country) # 国家名:单独 Run
c_run.bold = True # 加粗
c_run.italic = True # 斜体
### 模板 B:决议草案 — 序言性条款(仅动词下划线,其余无格式)
clause_text = "回顾为审议解决巴勒斯坦问题而成立的联合国巴勒斯坦特别委员会作出的有关行动及调查结果"
p5 = doc.add_paragraph()
parts = clause_text.split(None, 1) # 按空格/首词分割,最多分成两部分
verb = parts[0] # "回顾"
rest = parts[1] if len(parts) > 1 else ""
v_run = p5.add_run(verb)
v_run.underline = True # 仅动词下划线
rest_run = p5.add_run(rest)
comma_run = p5.add_run(",")
### 模板 C:决议草案 — 行动性条款(仅编号加粗)
def add_operative_clause(doc, number, text, sub_clauses=None):
"""添加行动性条款 — 只有编号加粗,正文不加粗"""
p = doc.add_paragraph()
p.paragraph_format.first_line_indent = Pt(0) # 取消首行缩进
# 编号 Run — 加粗
num_run = p.add_run(number) # 如 "第一条" 或 "1."
num_run.bold = True # ✅ 仅编号加粗
# 正文 Run — 不加粗、不加斜体
text_run = p.add_run(" " + text) # 注意空格分隔
# text_run.bold = False # 默认就是 False,不需要显式设置
# text_run.italic = False # 默认就是 False
# 子项(如果有)— 全部不加粗
if sub_clauses:
for sub in sub_clauses:
sp = doc.add_paragraph()
sp.paragraph_format.left_indent = Pt(24) # 缩进
sp.paragraph_format.first_line_indent = Pt(0)
sr = sp.add_run(sub) # 子项内容
# sr.bold = 不设置 # 正体即可
return p
add_operative_clause(
doc,
"第一条",
"支持在巴勒斯坦地区成立一个统一的国家;",
None
)
add_operative_clause(
doc,
"第二条",
"申明大不列颠及北爱尔兰联合王国结束委任统治有关事宜:",
[
"(一)英国对巴勒斯坦地区委任统治的结束是开展托管理事会工作的前提;",
"(二)委任统治国应立即停止其委任统治。",
]
)
### 模板 D:工作文件 — 中文格式
doc = Document()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
r = p.add_run("工作文件 ")
r.bold = True
r.font.size = Pt(12)
p2 = doc.add_paragraph()
r2 = p2.add_run("《联合国气候变化框架公约》第28次缔约方大会")
r2.bold = True
p3 = doc.add_paragraph()
r3 = p3.add_run("协力促进全球低碳经济发展")
r3.bold = True
p4 = doc.add_paragraph()
label = p4.add_run("起草国:")
label.bold = True
label.italic = True
sponsors = ["埃塞俄比亚联邦民主共和国", "阿尔及利亚民主人民共和国",
"德国", "俄罗斯联邦", "沙特阿拉伯王国", "印度尼西亚"]
for idx, nation in enumerate(sponsors):
if idx > 0:
p4.add_run("、") # 分隔符无格式
nr = p4.add_run(nation)
nr.bold = True
nr.italic = True
clauses = [
"呼吁各国加强气候变化领域的国际合作与技术交流",
"支持发展中国家向绿色能源经济转型的努力",
"鼓励私营部门在可再生能源领域增加投资"
]
for clause in clauses:
cp = doc.add_paragraph()
cp.paragraph_format.first_line_indent = Pt(24) # 首行缩进2字符
cr = cp.add_run(clause)
# ❌ 不要写 cr.bold = True 或 cr.italic = True
# 正文保持正体即可
### 模板 E:立场文件 — 中文格式
doc = Document()
tp = doc.add_paragraph()
tr = tp.add_run("立场文件")
tr.bold = True
tr.font.size = Pt(16)
info_lines = [
("委员会:", "历史安全理事会"),
("议题:", "纳戈尔诺-卡拉巴赫局势"),
("国家:", "美利坚合众国"),
("代表:", "李相霖、张镜如"),
]
for label, value in info_lines:
ip = doc.add_paragraph()
lr = ip.add_run(label) # 标签 Run
lr.bold = True # ✅ 标签加粗
vr = ip.add_run(value) # 值 Run
# vr.bold 不设置 # ✅ 值不加粗
# vr.italic 不设置 # ✅ 值不斜体
body_sections = [
("一、议题归纳概括", "运用自己的语言对议题进行..."),
("二、国际社会已有措施回顾", "简要回顾国际社会..."),
("三、本国已采取行动", "着眼于本国..."),
("四、本国立场表述和建议措施", "不需要采用决议草案格式..."),
]
for section_title, section_body in body_sections:
# 小节标题 — 加粗
stp = doc.add_paragraph()
strun = stp.add_run(section_title)
strun.bold = True
# 正文 — 不加任何格式
sbp = doc.add_paragraph()
sbp.paragraph_format.first_line_indent = Pt(24)
sbrun = sbp.add_run(section_body)
# sbrun.bold / italic / underline → 全部不设置 ✅
### 模板 F:修正案 — 中文格式
doc = Document()
hp = doc.add_paragraph()
hr = hp.add_run("修正案 1.2.1")
hr.bold = True
hr.font.size = Pt(14)
type_p = doc.add_paragraph()
type_p.add_run("☑ 增加条款 ☐ 删除条款 ☐ 修改条款")
add_p = doc.add_paragraph()
add_p.add_run('在"第一条"后增加:') # 普通文字
new_clause_p = doc.add_paragraph()
ncq = new_clause_p.add_run('"') # 左引号
nc1 = new_clause_p.add_run("第一条 之 一 成立专门委员会负责协调各方行动")
nc1.italic = True # 新增内容用引号+斜体
ncz = new_clause_p.add_run('";') # 右引号+标点
del_p = doc.add_paragraph()
del_label = del_p.add_run('删除')
del_label.italic = True # 删除操作词斜体?按规范来
del_content = del_p.add_run('"')
del_text = del_p.add_run("第二条中的'相关内容'")
del_text.strike = True # 删除内容用删除线
del_end = del_p.add_run('"')
mod_p = doc.add_paragraph()
mod_p.add_run('将"')
orig_text = mod_p.add_run("原文内容") # 原文
orig_text.strike = True # 删除线表示删除
mod_p.add_run('"修改为:"')
new_text = mod_p.add_run("新文本内容") # 新文
mod_p.add_run('"')
---
## 格式自检清单(生成完 docx 后必须逐一核对)
生成文档后,**必须**打开生成的 docx 文件,逐项确认:
- [ ] **决议草案序言条款**:**只有第一个词有下划线**,后面没有,且没有其他特殊格式 ✓
- [ ] **决议草案行动条款**:只有"第一条""第二条"等编号加粗 ✓,后面的文字是**正常字体** ✓
- [ ] **起草国列表**:每个国家名是加粗+斜体 ✓,但顿号/逗号是**普通字体** ✓
- [ ] **"起草国:"标签**:加粗 ✓,后面的国家名单从第二个 Run 开始 ✓
- [ ] **工作文件正文**:没有任何内联格式(不加粗、不斜体、不下划线)✓
- [ ] **立场文件正文**:标签加粗 ✓,值不加粗 ✓
- [ ] 如果以上任何一项不符 → **回退代码重新拆分 Run**
收到用户请求后,按以下步骤处理:
【前置判断】用户是否请求创建/生成 Word/docx 文件?
references/formatting-guide.md 获取完整排版方法references/document-formats.md 确认文件结构规范根据用户需求选择加载以下文件:
| 文件 | 内容 | 适用场景 |
|---|---|---|
| ------ | ------ | --------- |
references/rules-of-procedure.md | 常规委员会议事规则(最完整) | 会议流程咨询、规则解释、流程模拟 |
references/document-formats.md | 全部文件格式规范 | 文件撰写指导、格式咨询、排版规范 |
references/formatting-guide.md | Word/DOCX 排版方法与内联格式规范 | 文档创建/docx 生成类请求必须加载 |
references/terminology.md | 术语与基本概念、代表权利义务 | 概念解释、入门指导 |
references/preparation-guide.md | 学术准备与参会指导 | 会前准备方法、资料检索、演讲谈判技巧 |
references/special-committees.md | MPC特殊规则 | 主新闻中心规则咨询 |
加载策略:
terminology.mdrules-of-procedure.mddocument-formats.mdformatting-guide.md 和 document-formats.mdpreparation-guide.mdspecial-committees.md> 本节是「⚠️ DOCX 文档生成 — 最高优先级规则」和「逐行代码模板」的补充详细说明。
> 如果上方铁律和代码模板已足够,本节作为备查。
| 层级 | 适用范围 | 说明 |
|---|---|---|
| ------ | ---------- | ------ |
| 段落级格式 | 字体、字号、行距、对齐方式、首行缩进 | 对整个段落设置,如正文全部用宋体小四 |
| 词语级/Run级格式 | 加粗(B)、斜体(I)、下划线(U)、删除线 | 仅对特定词语生效,其余文字不受影响 |
| 禁止行为 | ❌ 将整段设为斜体 | ❌ 将整段设为下划线 |
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 整个条款文本 | 正体(无特殊格式) | ✓ 全部正文无内联格式 |
| 条款开头的动词(回顾、注意到、强调...) | 下划线 | 仅该动词,后续文字无下划线 |
| 条款其余内容(包括标点) | 无额外格式 | 正体,无斜体、无下划线 |
正确示例:
<u>回顾</u>为审议解决巴勒斯坦问题而成立的联合国巴勒斯坦特别委员会作出的有关行动及调查结果,
<u>注意到</u>委任统治国对委任统治放弃的意愿,
错误示例一(整句下划线):
<u>回顾为审议解决巴勒斯坦问题而成立的联合国巴勒斯坦特别委员会作出的有关行动及调查结果</u>
(❌ 整句下划线是错误的)
错误示例二(整段斜体):
<i>回顾为审议解决巴勒斯坦问题而成立的...</i>
(❌ 序言性条款不需要整段斜体)
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 整个条款文本 | 正体(无特殊格式) | ✓ 全部正文无内联格式 |
| 条款开头的动名词(Recalling, Noting...) | 下划线 | 仅该单词 |
| 其余内容(包括标点) | 无额外格式 | 正体,无斜体、无下划线 |
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 条款编号(第一条、第二条) | 加粗 | 仅编号 |
| 条款正文 | 正体(不加粗、不加斜体) | 全文正体 |
| 子项编号((一)、(二)) | 不加粗 | 正体 |
| 子项内容 | 正体 | 正体 |
正确示例:
<b>第一条</b> 支持在巴勒斯坦地区成立一个统一的国家; ← 只有"第一条"加粗
<b>第二条</b> 申明大不列颠及北爱尔兰联合王国结束委任统治有关事宜:
(一)英国对巴勒斯坦地区委任统治的结束是开展托管理事会工作的前提;(子项不加粗)
(二)委任统治国应立即停止其委任统治。
错误示例:
<b>第一条 支持在巴勒斯坦地区成立一个统一的国家</b> ← ❌ 整条加粗错误
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 条款编号(1., 2., 3.) | 加粗 | 仅编号 |
| 其余正文 | 正体 | 不加斜体 |
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| "起草国:" / "附议国:" 标签 | 加粗 | 仅标签文字 |
| "Sponsors:" / "Signatories:" 标签 | 加粗 | 仅标签文字 |
| 每个国家名称 | 加粗 + 斜体 | 仅国家名称本身 |
| 国家之间的标点符号(顿号、逗号) | 不加格式 | 保持普通样式 |
正确示例:
<b><i>埃塞俄比亚联邦民主共和国</i></b>、<b><i>阿尔及利亚民主人民共和国</i></b>、<b><i>德国</i></b>
错误示例:
<b><i>埃塞俄比亚联邦民主共和国、阿尔及利亚民主人民共和国、德国</i></b>
(❌ 连标点一起加格式的做法错误)
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 文件类型标题行(工作文件 / WORKING PAPER) | 加粗 | 整行加粗 |
| 委员会名称 | 加粗 | 整行加粗 |
| 议题名称 | 加粗 | 整行加粗 |
| 起草国标签"起草国:" / "Sponsors:" | 加粗 | 仅标签 |
| 起草国家名称 | 加粗 + 斜体 | 每个国家名称单独处理 |
| 正文条目 | 不加粗、不加斜体 | 普通正文 |
| 目标元素 | 格式操作 | 范围 |
|---|---|---|
| ---------- | ---------- | ------ |
| 文件标题"立场文件" | 加粗 | 整标题 |
| 信息标签(委员会:/Committee:) | 加粗 | 仅标签 |
| 标签值(具体名称) | 不加粗 | 普通文字 |
| 正文标题(如有小标题) | 加粗 | 仅标题文字 |
| 正文内容 | 不加任何内联格式 | 普通正文 |
paragraph.add_run(text).bold = True (整段加粗)paragraph.add_run(text).italic = True (整段斜体)run1 = paragraph.add_run("第一条"); run1.bold = True; run2 = paragraph.add_run(" 支持方案") (拆分 Run)# 错误写法——整段加粗斜体
para.add_run("起草国:" + ", ".join(countries)).bold = True
para.runs[0].italic = True
# 正确写法——逐个 Run 处理
para.add_run("起草国:").bold = True # 标签加粗
for i, country in enumerate(countries):
if i > 0:
para.add_run("、") # 分隔符无格式
run = para.add_run(country) # 国家名
run.bold = True # 单独加粗
run.italic = True # 单独斜体
# 错误写法一——整句下划线
para.add_run(clause_text).underline = True
# 错误写法二——整段斜体 + 下划线
para.add_run(clause_text).italic = True # ❌ 不需要斜体
# 正确写法——仅动词下划线,其余无任何格式
verb = clause_text.split(" ")[0] # 提取开头动词
rest = clause_text[len(verb):] # 提取剩余内容
para.add_run(verb).underline = True # 仅动词下划线,不加斜体
para.add_run(rest) # 其余无下划线、无斜体 ✅
# 错误写法
para.add_run(f"{num} {text}").bold = True
# 正确写法
para.add_run(num).bold = True # 编号加粗
para.add_run(" " + text) # 正文不加粗
共 3 个版本