---
name: 5writing
description: "数学建模竞赛论文撰写阶段，支持 Typst 和 LaTeX 双引擎。根据 ANALYSIS_MODELING_REPORT.md、RESULTS_REPORT.md 和 figures/*.pdf 选择比赛模板、排版引擎、组织章节，并在论文正文中按章节直接插入图表。"
allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob, Agent, WebSearch, WebFetch
---

# 竞赛论文撰写（Typst / LaTeX）

本 skill 承接 `3coding-visual` 和 `4drawio`。前序阶段只提供真实数据、图表 PDF 和记录文件；本阶段负责选择比赛模板和排版引擎、组织论文结构，并决定每张图表放入哪个章节。

**Typst 引擎**下可调用 typst-author skill 学习 typst 写法；**LaTeX 引擎**参考本文件末尾的"LaTeX 写作要点"小节。

## 数学建模规范参考

如需领域判断，读取 `../_references/math_modeling_norms.md` 中的“论文写作”“图表与可视化”和“非数据图工具选择”小节。该文件只作为规范知识库，论文结构仍按比赛模板和当前赛题内容决定。

## 模板族

本技能内捆绑的模板位于：

```text
templates/zh/<竞赛>/main.typ         # Typst 模板
templates/zh/<竞赛>-latex/main.tex   # LaTeX 模板
templates/en/<竞赛>/main.typ         # Typst 模板
templates/en/<竞赛>-latex/main.tex   # LaTeX 模板
```

**LaTeX 模板覆盖范围**：所有中文模板和英文模板均已提供 LaTeX 版本（`-latex` 后缀），使用 xelatex 编译。

支持的中文模板（Typst + LaTeX 双版本）：

```text
apmcm, changsanjiao, cumcm, default, diangongbei, dongsansheng,
huashubei, huaweibei, huazhongbei, mathorcup, mcm, shuweibei, stats, wuyibei
```

华为杯、华中杯、五一杯统一使用 `huaweibei`、`huazhongbei`、`wuyibei` 作为模板。

支持的英文模板（Typst + LaTeX 双版本）：

```text
apmcm, default, mcm
```

论文中的所有数值图表结论必须来自 `reports/RESULTS_REPORT.md` 或 `figures/*`。不得编造、估算或使用不同的四舍五入方式。


### 获奖论文共同特征（基于38篇国奖论文统计）
1. **页数范围**：15-25页（不含附录），含附录可达30-50页
2. **摘要规范**：每个子问题有方法+结果+数值
3. **公式编号**：重要公式都有编号，正文有交叉引用
4. **图表丰富**：10-25张图，每张图都有"图X：标题"格式
5. **参考文献**：10-12条，GB/T 7714格式
6. **灵敏度分析**：关键参数扰动测试（±10%~±20%）
7. **模型验证**：与已知结果对比或边界条件检验
8. **章节精简**：通常7章，不超过8章

### 序号格式规范（基于38篇国奖论文）
- **假设**：使用"假设1："、"假设2："格式，不使用圆圈序号
- **问题分析**：使用"问题1："、"问题2："格式，不使用"问题一："
- **摘要中**：使用"针对问题一："、"针对问题二："格式（中文数字）
- **约束条件**：使用(1)、(2)格式，不用圆圈序号①②③，不用项目符号•
- **模型优点/缺点**：使用"首先...其次...再次..."连接词
- **章节标题**：使用"一、二、三..."中文数字
- **子章节**：使用"1.1、1.2..."阿拉伯数字

### 国奖论文标准章节结构（基于38篇论文统计）

**标准7章结构**（90%以上的国奖论文采用）：
```
摘要 → 一、问题重述 → 二、问题分析 → 三、模型假设 → 四、符号说明 
→ 五、模型的建立与求解（含5.1、5.2、5.3、5.4等子章节）→ 六、灵敏度分析/模型检验 
→ 七、模型的评价与推广 → 参考文献 → 附录
```

**关键要点**：
- **第五章必须合并所有问题**：问题一、二、三的模型建立与求解放在同一章"五、模型的建立与求解"中，用子章节5.1、5.2、5.3、5.4区分
- **不要每个问题单独成章**：避免"六、问题一"、"七、问题二"、"八、问题三"这种结构
- **数据处理不单独成章**：放在"二、问题分析"或"五、模型的建立与求解"中
- **总章节数控制在7章**：最多不超过8章

**错误示例（11章，过多）**：
```
一、问题重述 → 二、问题分析 → 三、模型假设 → 四、数据处理 
→ 五、符号说明 → 六、问题一 → 七、问题二 → 八、问题三 
→ 九、模型检验 → 十、灵敏度分析 → 十一、模型评价
```

**正确示例（7章，标准）**：
```
一、问题重述 → 二、问题分析 → 三、模型假设 → 四、符号说明 
→ 五、模型的建立与求解（5.1问题一、5.2问题二、5.3问题三） 
→ 六、灵敏度分析 → 七、模型评价与推广
```

### 常见错误（必须避免）
1. **不要写"续"**：章节标题不要加"（续）"
2. **不要用圆圈序号**：约束条件用(1)、(2)格式，不用①②③
3. **不要用项目符号**：约束条件用(1)、(2)格式，不用•
4. **摘要不缩进**：摘要正文段落不首行缩进
5. **图表必须有引导文字**：每张图前必须有"如图X所示"
6. **公式必须有编号**：重要公式必须编号，正文有交叉引用
7. **参考文献必须按顺序出现**：正文中引用[1]后才能出现[2]，[2]后才能出现[3]，依此类推。绝不允许跳号或乱序（如[1]后直接[5]）
8. **Python图表禁止内置标题**：Python/matplotlib生成的图表PDF不能包含标题文字，标题必须由排版引擎（Typst的`caption:`或LaTeX的`\caption{}`）单独显示
9. **章节不要过多**：严格控制在7章，最多不超过8章，不要每个问题单独成章

**约束条件格式示例（基于38篇国奖论文）**：
正确：(1) 约束条件1描述 (2) 约束条件2描述
错误：• 约束条件1描述 或 ① 约束条件1描述

## 工作流

### 步骤 0：确定排版引擎

**撰写论文前必须让用户选择排版引擎。** 引擎决定后续所有步骤（模板路径、章节文件扩展名、图片插入语法、编译命令），选错会导致整篇论文格式错误。

使用 AskUserQuestion 工具向用户询问："撰写论文使用哪种排版引擎？"

- 选项 1：LaTeX（xelatex 编译，数学建模竞赛主流，模板已全部就绪）— 推荐选项放第一位
- 选项 2：Typst（typst 编译，调用 typst-author skill 辅助写作）

询问前先读取 `plan.md` 的"用户偏好 → 排版引擎"字段作为预选项：
- 若 plan.md 已记录引擎选择，向用户确认："检测到之前选择的引擎是 <LaTeX/Typst>，是否沿用？"
- 若 plan.md 不存在或未记录引擎选择，直接询问用户选择。
- 若用户未明确指定或跳过，**默认使用 LaTeX**。

根据确定的引擎选择对应模板族：

- **Typst 引擎**：使用 `templates/<lang>/<竞赛>/main.typ`，调用 typst-author skill。编译命令 `typst compile main.typ`。
- **LaTeX 引擎**：使用 `templates/<lang>/<竞赛>-latex/main.tex`，xelatex 编译（中文和英文均需跑两遍解决交叉引用）。编译命令 `xelatex -interaction=nonstopmode main.tex`（执行两次）。

**后续步骤中的所有代码示例、文件扩展名、图片插入语法都必须按所选引擎选择对应版本，不要混用。**

### 步骤 1：选择语言和模板


除非用户明确要求中文，否则 MCM/ICM/COMAP 一律使用英文。所有中文竞赛名称使用中文。

模板键示例（Typst 引擎）：

```text
长三角 -> zh/changsanjiao
APMCM 英文版 -> en/apmcm
全国赛/国赛/CUMCM -> zh/cumcm
统计建模 -> zh/stats
MCM/ICM/COMAP -> en/mcm
```

模板键示例（LaTeX 引擎）：

```text
全国赛/国赛/CUMCM -> zh/cumcm-latex
MCM/ICM/COMAP -> en/mcm-latex
```

### 步骤 2：准备模板

用以下命令检查捆绑模板是否可访问（`SKILL_DIR` 为本 skill 所在目录）：

**Typst 模板**：

```bash
ls "$SKILL_DIR/templates/zh/<竞赛>/main.typ" 2>/dev/null && echo "OK" || echo "MISSING"
```

- **文件存在（OK）**：直接将 `templates/zh/<竞赛>/` 整目录复制到 `paper/`。这些模板是自包含入口文件，不依赖额外共享样式文件。
- **文件不存在（MISSING）**：说明 skill 未完整安装或在沙箱中，此时依照本 SKILL.md 步骤 3 列出的对应节文件结构，从零重建最小可编译 Typst 框架，并在 `paper/` 内注明"重建自 default 结构"。

存在匹配模板时，绝不从零开始写论文。

**LaTeX 模板**：

```bash
ls "$SKILL_DIR/templates/zh/<竞赛>-latex/main.tex" 2>/dev/null && echo "OK" || echo "MISSING"
```

- **文件存在（OK）**：将 `templates/zh/<竞赛>-latex/` 整目录复制到 `paper/`。
- **文件不存在（MISSING）**：说明 skill 未完整安装或在沙箱中，此时依照本 SKILL.md 步骤 3 列出的对应节文件结构，从零重建最小可编译 LaTeX 框架，并在 `paper/` 内注明"重建自 default-latex 结构"。


### 步骤 3：构建图表规划

在写正文各节之前，根据 `figures/*.pdf`、`reports/RESULTS_REPORT.md`，以及 `reports/DRAWIO_REPORT.md`（如果存在）构建图表规划：

```text
图表规划
fig_roadmap.pdf -> 引言/问题重述
fig_flow_q1.pdf -> 问题一模型构建
fig_flow_q2.pdf -> 问题二模型构建
fig_pipeline.pdf -> 数据预处理/方法节
结果图 -> 对应的结果节
```

图片路径相对于写入该图片的文件：写在 `paper/main.typ` 或 `paper/main.tex` 中通常用 `../figures/xxx.pdf`，写在 `paper/sections/*.typ` 或 `paper/sections/*.tex` 中通常用 `../../figures/xxx.pdf`。

**Python图表生成规范**：生成图表时，matplotlib代码中**不要使用`ax.set_title()`或`plt.title()`**。图表标题必须由排版引擎的caption属性显示。示例：
```python
# 正确：不设置标题
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
# 不调用 ax.set_title() 或 plt.title()
plt.savefig('fig_xxx.pdf')

# 错误：设置了标题
ax.set_title('这是标题')  # 禁止！
```

**Typst 引擎**图片插入：

```typst
#figure(
  image("../../figures/fig_q1_error_dist.pdf", width: 85%),
  caption: [问题一预测误差分布],
)
```

**LaTeX 引擎**图片插入：

```latex
\begin{figure}[H]
  \centering
  \includegraphics[width=0.85\textwidth]{../../figures/fig_q1_error_dist.pdf}
  \caption{问题一预测误差分布}
  \label{fig:q1_error}
\end{figure}
```

英文论文使用英文图注。

### 步骤 4：撰写各节

**以下章节文件名按所选引擎使用 `.typ`（Typst）或 `.tex`（LaTeX）扩展名。** 例如 Typst 引擎用 `1_restatement.typ`，LaTeX 引擎用 `1_restatement.tex`。文件名主体保持一致。

**国奖论文标准7章结构**（必须严格遵守）：

```text
1_restatement.typ  - 一、问题重述
2_analysis.typ     - 二、问题分析（含数据处理）
3_assumptions.typ  - 三、模型假设
4_symbols.typ      - 四、符号说明
5_model.typ        - 五、模型的建立与求解（包含5.1问题一、5.2问题二、5.3问题三等子章节）
6_sensitivity.typ  - 六、灵敏度分析/模型检验
7_evaluation.typ   - 七、模型评价与推广
A_code.typ         - 附录
```

**关键要点**：
- **第五章必须合并所有问题**：问题一、二、三的模型都在 `5_model.typ` 中，用子章节区分
- **不要每个问题单独成章**：避免 `5_problem1.typ`、`6_problem2.typ`、`7_problem3.typ` 这种结构
- **数据处理不单独成章**：放在 `2_analysis.typ`（问题分析）中

**错误示例（11章，过多）**：
```text
1_restatement.typ
2_analysis.typ
3_assumptions.typ
4_symbols.typ
5_data.typ          # 错误：数据处理单独成章
6_problem1.typ      # 错误：问题一单独成章
7_problem2.typ      # 错误：问题二单独成章
8_problem3.typ      # 错误：问题三单独成章
9_model_check.typ   # 错误：模型检验单独成章
10_sensitivity.typ
11_evaluation.typ
```

**正确示例（7章，标准）**：
```text
1_restatement.typ
2_analysis.typ      # 包含数据处理
3_assumptions.typ
4_symbols.typ
5_model.typ         # 包含5.1问题一、5.2问题二、5.3问题三
6_sensitivity.typ
7_evaluation.typ
```

东三省模板（`dongsansheng`）额外使用单独摘要文件：

```text
abstract.typ
1_restatement.typ
2_analysis.typ
3_assumptions.typ
4_symbols.typ
5_model.typ         # 五、模型的建立与求解（5.1问题一、5.2问题二、5.3问题三）
6_sensitivity.typ
7_evaluation.typ
A_code.typ
```

数维杯模板（`shuweibei`）保留原 LaTeX 的示例入口命名：

```text
Abstract.typ
Introduction.typ
2_analysis.typ
3_assumptions.typ
4_symbols.typ
5_model.typ         # 五、模型的建立与求解（5.1问题一、5.2问题二、5.3问题三）
6_sensitivity.typ
7_evaluation.typ
Appendices1.typ
A_code.typ
```

中文默认模板（`default`）：

```text
1_restatement.typ
2_analysis.typ      # 包含数据处理
3_assumptions.typ
4_symbols.typ
5_model.typ         # 五、模型的建立与求解（5.1问题一、5.2问题二、5.3问题三）
6_sensitivity.typ
7_evaluation.typ
A_code.typ
```

中文统计建模各节文件：

```text
1_introduction.typ
2_method.typ
3_data.typ
4_analysis.typ
5_results.typ
6_conclusion.typ
A_code.typ
```

英文 MCM/APMCM 各节文件（`en/mcm`、`en/apmcm`、`zh/mcm`、`zh/apmcm`）：

```text
1_introduction.typ
2_assumptions.typ
3_model_design.typ
4_solution.typ
5_sensitivity.typ
6_strengths_weaknesses.typ
7_conclusions.typ
A_code.typ
```

**LaTeX 模板章节文件**（对应 `-latex` 后缀模板，结构与 Typst 版本一一对应）：

国赛 LaTeX 模板（`zh/cumcm-latex`，对应 `cumcm` Typst 版本，标准7章）：

```text
1_restatement.tex   # 一、问题重述
2_analysis.tex      # 二、问题分析（含数据处理）
3_assumptions.tex   # 三、模型假设
4_symbols.tex       # 四、符号说明
5_model.tex         # 五、模型的建立与求解（5.1问题一、5.2问题二、5.3问题三）
6_sensitivity.tex   # 六、灵敏度分析
7_evaluation.tex    # 七、模型评价与推广
A_code.tex          # 附录
```

MCM/ICM LaTeX 模板（`en/mcm-latex`）：

```text
1_introduction.tex
2_assumptions.tex
3_model_design.tex
4_solution.tex
5_sensitivity.tex
6_strengths_weaknesses.tex
7_conclusions.tex
A_code.tex
```

其余 LaTeX 模板（`changsanjiao-latex`、`default-latex`、`huashubei-latex`、`mathorcup-latex`、`wuyibei-latex`、`huazhongbei-latex`、`huaweibei-latex`、`diangongbei-latex`、`dongsansheng-latex`、`shuweibei-latex`、`stats-latex`、`apmcm-latex`、`mcm-latex`、`en/apmcm-latex`、`en/default-latex`）的章节文件命名均采用**标准7章结构**，以 `main.tex` 中 `\input{}` 引用的文件名为准。核心原则：第五章必须合并所有问题，不要每个问题单独成章。

英文默认模板（`en/default`）：

```text
1_introduction.typ
2_assumptions.typ
3_notations.typ
4_model.typ
5_sensitivity.typ
6_evaluation.typ
7_conclusions.typ
A_code.typ
```

**正文写作应使用连贯的学术段落。避免在最终论文中出现工作流内部名称，如 `reports/`、`figures/` 或 `CLAUDE.md`。**

### 步骤 5：参考文献

只使用真实存在的参考文献。文件名按引擎选择：Typst 用 `paper/references.typ`，LaTeX 用 `paper/references.tex`。

**参考文献顺序规则（基于38篇国奖论文）**：正文中所有参考文献引用必须按编号顺序出现。即[1]必须最先出现，然后是[2]，再是[3]，依此类推直到最后一个编号。绝不允许出现跳号或乱序（如[1]后直接出现[5]，或[3]出现在[2]之前）。这是数学建模论文的基本规范。

**Typst 引擎**：

```typst
#set enum(numbering: "[1]")
#enum[
  作者. 题名[J]. 期刊名, 年份, 卷(期): 页码.
  Author. "Title." Journal or Conference, year.
]
```

正文上标引用：`相关研究已用于物流网络优化#super("[1]")。`

**LaTeX 引擎**：

```latex
\begin{thebibliography}{99}
  \bibitem{ref1} 作者. 题名[J]. 期刊名, 年份, 卷(期): 页码.
  \bibitem{ref2} Author. "Title." Journal, year.
\end{thebibliography}
```

正文引用用 `\cite{ref1}` 或 `\cite{ref1,ref2}`。

### 步骤 6：最后撰写摘要或总结

在所有章节完成后撰写中文摘要或英文 Summary Sheet。必须包含每个子问题的方法和精确的数值结果。

## LaTeX 写作要点

以下要点供 **LaTeX 引擎**使用。Typst 引擎请调用 typst-author skill 获取语法帮助。

### 编译命令

```bash
# 中文模板（xelatex，跑两遍解决交叉引用）
xelatex main.tex && xelatex main.tex

# 英文模板（xelatex，同样跑两遍）
xelatex main.tex && xelatex main.tex
```

### 文档结构

```latex
\documentclass[a4paper,12pt]{article}   % 英文
\documentclass[a4paper,12pt]{ctexart}   % 中文

\usepackage{...}   % 宏包加载
\usepackage{graphicx}   % 图片支持
\usepackage{booktabs}   % 三线表
\usepackage{amsmath,amssymb}   % 数学公式
\usepackage{hyperref}   % 交叉引用（需两遍编译）
```

### 图表插入

```latex
\begin{figure}[H]
  \centering
  \includegraphics[width=0.85\textwidth]{../../figures/fig_q1.pdf}
  \caption{图注}
  \label{fig:q1}
\end{figure}

% 三线表
\begin{table}[htbp]
  \centering
  \caption{表注}
  \begin{tabular}{ccc}
    \toprule
    \textbf{列1} & \textbf{列2} & \textbf{列3} \\
    \midrule
    数据 & 数据 & 数据 \\
    \bottomrule
  \end{tabular}
\end{table}
```

### 交叉引用

```latex
如图~\ref{fig:q1}所示，...   % 图片引用
式~(\ref{eq:objective}) 给出...   % 公式引用
见第~\pageref{fig:q1} 页   % 页码引用
```

### 数学公式

```latex
行内公式：$f(x) = \sum_{i=1}^n \theta_i \phi_i(x)$

行间公式：
\begin{equation}
  \mathcal{L}(\theta) = \frac{1}{N}\sum_{i=1}^N (y_i - \hat{y}_i)^2
  \label{eq:objective}
\end{equation}
```

### 章节和强调

```latex
\section{问题重述}
\subsection{问题背景}
\textbf{问题一：} xxx   % 对应 Typst 的 #strong
```
