语篇批注器

SKILL教育学习
教育学习 未标注权限 许可证不明确
安装这个技能

处理英语阅读文本,生成带词汇高亮、段落大意、词汇表和主题文体分析的完整HTML文件。当用户提及"英语阅读"、"阅读理解"、"完形填空"、"七选五"、"阅读材料"、"英语文本处理"、"词汇标注"、"段落大意"、"阅读文本生成HTML"等关键词时触发此技能。支持图片OCR识别、多篇文章合并或分开生成、阅读题答案解析等功能。

累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_55246454/english-reading-annotator

技能档案

教育学习
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_55246454仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791737598
正文体量37.7 KBSKILL.md 原文大小,越大说明说明书写得越细

SKILL.md 全文

37.7 KB
模型实际读到的说明书原文,来自技能仓库

英语阅读文本标注器

将英语阅读文本转换为专业格式的HTML学习材料,包含词汇高亮、段落大意、词汇表和主题文体分析。

触发场景

当用户需要:
- 处理英语阅读文本生成学习材料
- 对英语文章进行词汇标注和段落分析
- 制作英语阅读理解题目的解析材料
- 处理完形填空或七选五并补全文本
- 从图片中提取英语文本并标注

适用题型范围

✅ 支持的题型

题型 处理方式
阅读理解 A/B/C/D 词汇标注 + 段落大意 + 答案解析
七选五 补全答案 + 词汇标注
完形填空 补全答案 + 词汇标注
语法填空 补全答案 + 语法考点分析
短文改错 标注错误 + 语法分析

❌ 不支持的题型

题型 原因
听力理解 无音频处理能力(听力原文可单独处理)
书面表达/写作 无需词汇标注(范文可单独处理)
单词拼写/词汇运用 不适用本文本处理模式
口语测试 无音频处理能力

边界情况处理

当文档包含不支持题型时:

  1. 自动识别:在分割文章阶段识别题型,标记可处理/不可处理
  2. 过滤并告知:
    ```
    检测到以下题型:
    ✅ 阅读理解 A/B/C/D(4篇)— 可处理
    ✅ 七选五 — 可处理
    ✅ 完形填空 — 可处理
    ✅ 语法填空 — 可处理
    ❌ 听力理解 — 跳过(无音频)
    ❌ 书面表达 — 跳过(无需词汇标注)

将处理 7 个题型,是否继续?
```
3. 用户确认后继续:只处理支持的题型

核心功能

1. 输入处理

文本输入:直接接收用户提供的英语文本

图片输入:先使用OCR工具将图片转为文本,再进行处理

docx文件输入:使用 pandoc 转换为 markdown(推荐)

pandoc input.docx -t markdown -o output.md
  • pandoc 安装路径:$LOCALAPPDATA/Pandoc/pandoc.exe
  • 输出干净文本,保留段落结构和表格

doc文件输入(旧版Word格式):
- .doc 是旧版Word二进制格式(OLE复合文档),python-docx 不支持
- 推荐方案:让用户用 Word 另存为 .docx 格式,再按上述方式处理
- 备选方案:使用 UTF-16LE 直接提取二进制文本
```python
with open(filepath, 'rb') as f:
data = f.read()

# UTF-16LE 解码提取文本
i, current, text_parts = 0, [], []
while i < len(data) - 1:
low_byte, high_byte = data[i], data[i + 1]
if high_byte == 0 and 32 <= low_byte <= 126:
current.append(chr(low_byte))
i += 2
elif len(current) > 10:
text_parts.append(''.join(current))
current = []
i += 1
else:
current = []
i += 1

full_text = '\n'.join(text_parts)
```

多篇文章:检测到多篇文章时,默认合并成一个HTML文件,除非用户明确要求分开输出

2. 特殊题型处理

阅读理解题:
- 在文章末尾添加答案解析区域
- 格式:题目 → 答案 → 解析
- 解析必须包含:
1. 答案依据:引用原文中支持正确答案的关键句子或段落
2. 推理过程:解释如何从原文推导出正确答案
3. 排除理由:简要说明其他选项为何错误(可选,视题目难度而定)
- 引用原文规则:
- 直接引用原文关键句,用引号标注
- 引用内容过长时,用 ... 省略中间部分
- 指明引用内容的段落位置(如"根据第二段"、"由第三段可知")
- 示例见下方模板

完形填空/七选五/语法填空:
- 如果提供了答案,按答案补全文本
- 如果未提供答案,由AI完成题目并补全文本
- 补全后再进行词汇标注和格式化

答案还原格式:

将答案直接还原到原文空格处,使用 &lt;u&gt; 标签加下划线。

格式要求:&lt;u&gt;题目编号 + 答案&lt;/u&gt;

题型 格式示例
七选五 &lt;u&gt;36. F. That means good grammar and no spelling mistakes.&lt;/u&gt;
完形填空 &lt;u&gt;41. C won&lt;/u&gt;
语法填空 &lt;u&gt;56. engineering&lt;/u&gt; 或 &lt;u&gt;57. a&lt;/u&gt;

注意事项:
- 七选五格式:题目编号 + 选项字母 + 答案内容(如 36. F. That means...)
- 完形填空格式:题目编号 + 选项字母 + 答案单词(如 41. C won)
- 语法填空格式:题目编号 + 答案(如 56. engineering)
- 直接使用 &lt;u&gt; 标签,不要添加 class=&quot;filled-blank&quot; 等额外属性
- 不要使用淡蓝色背景和深蓝色边框标注补全内容

答案解析区格式(七选五/完形填空/语法填空):

答案解析使用 &lt;p class=&quot;question-text&quot;&gt; 格式,不使用 &lt;u&gt; 标签:

&lt;div class=&quot;question-item&quot;&gt;
    &lt;p class=&quot;question-text&quot;&gt;36. E. Not only does this cafe serve up drinks, it also serves up smiles.&lt;/p&gt;
    &lt;div class=&quot;answer-box&quot;&gt;
        &lt;p class=&quot;explanation&quot;&gt;&lt;strong&gt;解题思路:&lt;/strong&gt;空前提到...&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

区分两种格式:
| 位置 | 格式 |
|------|------|
| 段落内答案还原 | 使用 &lt;u&gt; 标签(如 &lt;u&gt;36. F. That means...&lt;/u&gt;) |
| 答案解析区标题 | 使用 &lt;p class=&quot;question-text&quot;&gt;答案&lt;/p&gt;,无 &lt;u&gt; 标签 |

3. 词汇判定标准

只有B2及以上难度的词汇/短语才执行词汇高亮。

⚠️ 核心原则:宁多勿少。不确定是否为B2级别时,默认标注。

B2级别词汇类型(应标注):

类型 说明 示例
抽象名词 表示概念、状态的名词 habitat, restoration, indication, achievement, reflection
学术词汇 学术、科研相关 specimen, hypothesis, methodology, ecosystem
情感/心理词汇 描述情感、心理状态 defensive, sensitive, motivated, demotivated
动作/变化动词 非日常动作动词 ease, restore, investigate, demonstrate
形容词(性质) 描述性质、特征 vital, conventional, alternative, holistic
社会/制度词汇 社会、制度相关 agreement, approval, community, requirement
科技/专业词汇 科技、专业领域 acupuncture, chiropractic, engineering
固定搭配 常见搭配短语 vital role, endangered species, mental focus

B2示例词汇(必须标注):

  • 名词:habitat, restoration, indication, achievement, reflection, specimen, ecosystem, agreement, approval
  • 动词:ease, restore, investigate, demonstrate, fulfill, approach
  • 形容词:vital, conventional, alternative, holistic, sensitive, defensive, invasive, functional
  • 副词:increasingly, particularly, generally

C1/C2级别(高级词汇):

  • C1:ephemeral, ubiquitous, paradigm, sophisticated
  • C2:serendipity, unprecedented

习语和固定搭配:

  • break new ground, in the wake of, shine through, lay on of hands

注意:A1-A2级别的基础词汇(如 book, happy, go, run 等)不进行高亮处理。

输出格式规范

生成完整可运行的HTML文件,结构如下:

内容结构

原文段落(带编号、词汇高亮)
└── 段落大意(英语关键词 + 中文大意,加粗+酒红色)
    └── 段落词汇表(3栏流式布局)
        └── 词汇项:词汇/短语 | 词性 | 中文释义

主题语境与文体类型分析区
├── 主题语境:人与社会/人与自然/人与自我
└── 文体类型:记叙文/说明文/议论文等

署名区
└── 制作者:福建师范大学平潭附属中学 戴元守

样式规范

整体容器:
- 白色背景 + 轻微阴影
- 内边距 40px,合理外边距

原文区:
- 字体 25px,行高 1.8
- 段落两端对齐
- 段落编号用阿拉伯数字

词汇高亮色(同一词汇保持一致):
- 浅蓝 #e3f2fd
- 浅绿 #e8f5e9
- 浅紫 #f3e5f5
- 浅黄 #fff3e0

七选五/完形填空/语法填空答案还原:

将答案直接还原到原文空格处,使用 &lt;u&gt; 标签加下划线。格式要求:

题型 格式示例
七选五 &lt;u&gt;36. F. That means good grammar and no spelling mistakes.&lt;/u&gt;
完形填空 &lt;u&gt;41. C won&lt;/u&gt;
语法填空 &lt;u&gt;56. engineering&lt;/u&gt;

段落大意:
- 字体 28px
- 加粗 + 酒红色 (#800020)
- 不使用斜体
- 格式要求:1-3个英语关键词 + 中文段落大意
- 示例:【Introduction. 本文介绍了...】 或 【Main Idea. 本段主要讲述...】

词汇表区:
- 字体 28px,行高 1.5
- 3栏流式布局,栏间距适中
- 整体右缩进 4 字符
- 不添加"词汇表"标题,直接展示词汇项
- 词汇项内边距 5px、带圆角
- 背景色与原文高亮对应

主题文体分析区:
- 标题:27px、加粗、带下边框
- 内容:15px、行高 2、两端对齐

响应式适配:
- 使用 clamp() 函数实现自适应字号
- overflow-x: hidden 确保无横向滚动条
- 容器宽度 100%,自适应屏幕
- 词汇表使用 auto-fit 自动调整列数
- 文本自动换行,防止溢出

响应式断点:
- 768px 以下:单栏布局,减小边距
- 480px 以下:进一步优化移动端显示

署名区:
- 位于页面底部
- 字体 14px,灰色 (#666)
- 居中显示,带顶部分隔线

执行流程

⚠️ 核心原则:逐篇处理,分步完成

禁止一次性处理所有文章。多篇文章时,必须按以下流程逐篇处理:


第一步:识别与分割

  1. 识别输入类型
    - 文本:直接处理
    - 图片:先OCR识别,再处理
    - docx文件:使用 pandoc 转换为 markdown(推荐方式)
    bash pandoc input.docx -t markdown -o output.md

    • pandoc 安装路径:$LOCALAPPDATA/Pandoc/pandoc.exe 或 C:\Users\daiyu\AppData\Local\Pandoc\pandoc.exe
    • 输出干净的 markdown 格式,便于后续分割处理
  2. 分割文章并识别题型
    - 识别文档中有几篇文章
    - 判断每篇文章的题型(阅读理解/七选五/完形填空/语法填空/听力/写作等)
    - 过滤不支持的题型(听力、写作等),只保留可处理的题型
    - 创建任务清单,列出所有待处理的文章
    - 不要一次性读取所有文章内容

  3. 告知用户题型识别结果
    - 列出可处理的题型(✅)
    - 列出跳过的题型(❌)及原因
    - 询问用户是否继续处理可处理的题型


第二步:确认处理范围(⚠️ 必须执行)

题型识别后,向用户确认处理范围:

直接在回复中询问(不要使用 question 工具):

📋 题型识别结果:

✅ 可处理:
   - 阅读理解 A/B/C/D(4篇)
   - 七选五
   - 完形填空
   - 语法填空

❌ 跳过(不适用):
   - 听力理解(无音频处理能力)
   - 书面表达(无需词汇标注)

📄 输出方式:合并成一个HTML文件(默认)

请确认是否继续?

判断逻辑:
| 用户回复 | 执行操作 |
|---------|---------|
| "继续"、"是"、"默认"、"合并" | 合并模式处理可处理题型(默认) |
| "分开"、"分别输出" | 分开模式处理可处理题型 |
| "不要听力"、"去掉写作" | 按用户要求调整后继续 |
| "取消" | 终止处理 |

默认输出方式:合并成一个HTML文件,除非用户明确要求分开输出。

根据用户选择执行不同流程:


第三步:逐篇处理(核心循环)

⚠️ 处理每篇文章前,先读取 Sample 文件确认格式规范:
- Sample 文件路径:english-reading-annotator/sample.html(与本 SKILL.md 同目录)
- 确认答案还原格式、答案解析区格式、词汇表格式等是否正确
- 避免生成后再批量修正

对每篇文章执行以下操作,一篇完成后再处理下一篇:

循环处理每篇文章:
  1. 读取当前文章的文本内容
  2. 分析词汇:识别B2及以上词汇,分配高亮色
  3. 提取段落大意
  4. 处理特殊题型:
     - 阅读理解:生成答案解析
     - 七选五/完形填空/语法填空:补全答案到原文
  5. 根据输出方式:
     - 合并模式:生成HTML片段,暂存到变量
     - 分开模式:生成完整HTML文件并写入
  6. 标记该篇完成,继续下一篇

每篇文章独立处理,避免上下文过载。


第四步:合并输出(仅合并模式)

仅当用户选择"合并成一个HTML文件"时执行:

  1. 将所有文章的HTML片段合并
  2. 添加统一的CSS样式(只在头部声明一次)
  3. 为每个篇章标题添加 id 属性:
    - 阅读理解A篇:&lt;h2 class=&quot;section-header&quot; id=&quot;reading-a&quot;&gt;阅读理解 A 篇&lt;/h2&gt;
    - 阅读理解B篇:&lt;h2 class=&quot;section-header&quot; id=&quot;reading-b&quot;&gt;阅读理解 B 篇&lt;/h2&gt;
    - 阅读理解C篇:&lt;h2 class=&quot;section-header&quot; id=&quot;reading-c&quot;&gt;阅读理解 C 篇&lt;/h2&gt;
    - 阅读理解D篇:&lt;h2 class=&quot;section-header&quot; id=&quot;reading-d&quot;&gt;阅读理解 D 篇&lt;/h2&gt;
    - 七选五:&lt;h2 class=&quot;section-header&quot; id=&quot;seven-five&quot;&gt;七选五&lt;/h2&gt;
    - 完形填空:&lt;h2 class=&quot;section-header&quot; id=&quot;cloze&quot;&gt;完形填空&lt;/h2&gt;
    - 语法填空:&lt;h2 class=&quot;section-header&quot; id=&quot;grammar&quot;&gt;语法填空&lt;/h2&gt;
    - 词汇汇总:&lt;h2 class=&quot;section-header&quot; id=&quot;vocab-summary&quot;&gt;全卷核心词汇汇总表&lt;/h2&gt;
  4. 在 &lt;div class=&quot;container&quot;&gt; 结束后添加右侧缩放按钮:
    html &lt;!-- 右侧缩放按钮 --&gt; &lt;div class=&quot;zoom-controls&quot;&gt; &lt;button class=&quot;zoom-btn&quot; onclick=&quot;updateZoom(1)&quot; title=&quot;放大&quot;&gt;+&lt;/button&gt; &lt;button class=&quot;zoom-btn&quot; onclick=&quot;updateZoom(-1)&quot; title=&quot;缩小&quot;&gt;−&lt;/button&gt; &lt;/div&gt;
  5. 在缩放按钮后添加底部篇章导航:
    html &lt;!-- 底部篇章导航 --&gt; &lt;nav class=&quot;bottom-nav&quot;&gt; &lt;a href=&quot;#reading-a&quot; onclick=&quot;scrollToSection(&#x27;reading-a&#x27;); return false;&quot;&gt;阅读A篇&lt;/a&gt; &lt;a href=&quot;#reading-b&quot; onclick=&quot;scrollToSection(&#x27;reading-b&#x27;); return false;&quot;&gt;阅读B篇&lt;/a&gt; &lt;a href=&quot;#reading-c&quot; onclick=&quot;scrollToSection(&#x27;reading-c&#x27;); return false;&quot;&gt;阅读C篇&lt;/a&gt; &lt;a href=&quot;#reading-d&quot; onclick=&quot;scrollToSection(&#x27;reading-d&#x27;); return false;&quot;&gt;阅读D篇&lt;/a&gt; &lt;a href=&quot;#seven-five&quot; onclick=&quot;scrollToSection(&#x27;seven-five&#x27;); return false;&quot;&gt;七选五&lt;/a&gt; &lt;a href=&quot;#cloze&quot; onclick=&quot;scrollToSection(&#x27;cloze&#x27;); return false;&quot;&gt;完形填空&lt;/a&gt; &lt;a href=&quot;#grammar&quot; onclick=&quot;scrollToSection(&#x27;grammar&#x27;); return false;&quot;&gt;语法填空&lt;/a&gt; &lt;a href=&quot;#vocab-summary&quot; onclick=&quot;scrollToSection(&#x27;vocab-summary&#x27;); return false;&quot;&gt;词汇汇总&lt;/a&gt; &lt;/nav&gt;
  6. 在文档末尾添加署名:制作者:福建师范大学平潭附属中学 戴元守
  7. 生成最终HTML文件

⚠️ 重要:合并模式必须添加导航和缩放按钮,这是必选项!

分开模式已在第三步完成,无需此步骤。


任务管理要求

  • 必须使用 todowrite 工具追踪进度
  • 每完成一篇文章,立即标记为 completed
  • 任务清单示例(合并模式):
    ```
  • [ ] 识别题型,过滤不支持的题型
  • [ ] 确认处理范围与输出方式
  • [ ] 处理阅读理解A(添加id="reading-a")
  • [ ] 处理阅读理解B(添加id="reading-b")
  • [ ] 处理阅读理解C(添加id="reading-c")
  • [ ] 处理阅读理解D(添加id="reading-d")
  • [ ] 处理七选五(添加id="seven-five")
  • [ ] 处理完形填空(添加id="cloze")
  • [ ] 处理语法填空(添加id="grammar")
  • [ ] 合并所有文章
  • [ ] 添加底部导航栏和右侧缩放按钮
  • [ ] 添加词汇汇总表(添加id="vocab-summary")
  • [ ] 添加署名
    ```
  • 任务清单示例(分开模式):
    ```
  • [ ] 识别题型,过滤不支持的题型
  • [ ] 确认处理范围与输出方式
  • [ ] 处理阅读理解A并生成独立HTML
  • [ ] 处理阅读理解B并生成独立HTML
  • [ ] 处理阅读理解C并生成独立HTML
  • [ ] 处理阅读理解D并生成独立HTML
  • [ ] 处理七选五并生成独立HTML
  • [ ] 处理完形填空并生成独立HTML
  • [ ] 处理语法填空并生成独立HTML
    ```

为什么逐篇处理?

  1. 避免上下文过载:一次性加载多篇文章会超出AI处理能力
  2. 保证质量:每篇文章都能得到充分分析和处理
  3. 便于调试:出错时可以定位到具体文章
  4. 进度可视化:用户可以看到每一步的完成情况

为什么默认合并输出?

  1. 效率更高:合并输出只需1次I/O操作,分开输出需要N次(N=文章数量)
  2. 节省空间:合并模式下CSS只写一次,分开模式每文件都重复CSS
  3. 便于使用:
    - 合并模式适合:打印分发、完整查阅、归档保存(大多数场景)
    - 分开模式适合:分篇分发、在线教学、模块化使用(少数场景)
  4. 减少交互:用户无需每次都选择输出方式,直接获得最常用的结果

HTML模板

模板使用说明

分开模式:每篇文章使用下面的完整HTML模板,独立生成一个文件,每个文件末尾都有署名。

合并模式:使用单一HTML文件结构,CSS只在 &lt;head&gt; 中声明一次,各篇文章的HTML片段依次放入 &lt;body&gt; 中,最后统一署名一次。

合并模式结构示例:

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;zh-CN&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;英语试卷&lt;/title&gt;
    &lt;style&gt;
        /* CSS样式只声明一次 */
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1 class=&quot;main-title&quot;&gt;试卷标题&lt;/h1&gt;

        &lt;!-- 文章A --&gt;
        &lt;section class=&quot;article-section&quot;&gt;
            &lt;h2 class=&quot;section-header&quot;&gt;阅读理解 A&lt;/h2&gt;
            &lt;!-- 文章A内容 --&gt;
        &lt;/section&gt;

        &lt;hr class=&quot;divider&quot;&gt;

        &lt;!-- 文章B --&gt;
        &lt;section class=&quot;article-section&quot;&gt;
            &lt;h2 class=&quot;section-header&quot;&gt;阅读理解 B&lt;/h2&gt;
            &lt;!-- 文章B内容 --&gt;
        &lt;/section&gt;

        &lt;!-- 更多文章... --&gt;

        &lt;!-- 署名只出现一次 --&gt;
        &lt;div class=&quot;signature&quot;&gt;制作者:福建师范大学平潭附属中学 戴元守&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

单篇文章HTML模板

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;zh-CN&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes&quot;&gt;
    &lt;title&gt;英语阅读材料&lt;/title&gt;
    &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        html, body {
            width: 100%;
            overflow-x: hidden;
        }

        body {
            font-family: &#x27;Segoe UI&#x27;, &#x27;Microsoft YaHei&#x27;, sans-serif;
            background-color: #f5f5f5;
            padding: clamp(10px, 2vw, 20px);
            line-height: 1.6;
            min-height: 100vh;
        }

        /* 缩放时调整基础字体大小 */
        :root {
            --base-font-size: 24px;
        }

        .container {
            max-width: 100%;
            width: 100%;
            margin: 0 auto;
            background: white;
            padding: clamp(20px, 4vw, 40px);
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            border-radius: 8px;
            padding-bottom: 80px;
        }

        .main-title {
            font-size: calc(var(--base-font-size) * 1.8);
            font-weight: bold;
            text-align: center;
            margin-bottom: 30px;
            color: #1a237e;
            border-bottom: 3px solid #1a237e;
            padding-bottom: 15px;
        }

        .main-subtitle {
            font-size: calc(var(--base-font-size) * 1.25);
            font-weight: normal;
        }

        .section-header {
            font-size: calc(var(--base-font-size) * 1.5);
            font-weight: bold;
            text-align: center;
            margin: 40px 0 25px 0;
            color: #1a237e;
            background: linear-gradient(90deg, transparent, #e3f2fd, transparent);
            padding: 12px 0;
        }

        .paragraph {
            font-size: var(--base-font-size);
            line-height: 1.8;
            text-align: justify;
            margin-bottom: 20px;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        .paragraph-num {
            font-weight: bold;
            margin-right: 8px;
        }

        .highlight-blue {
            background-color: #e3f2fd;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .highlight-green {
            background-color: #e8f5e9;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .highlight-purple {
            background-color: #f3e5f5;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .highlight-yellow {
            background-color: #fff3e0;
            padding: 2px 4px;
            border-radius: 3px;
        }

        .paragraph-summary {
            font-size: calc(var(--base-font-size) * 1.1);
            font-weight: bold;
            color: #800020;
            margin: clamp(10px, 1.5vw, 15px) 0 clamp(8px, 1vw, 10px) 0;
        }

        .vocab-section {
            margin-left: clamp(1em, 4vw, 4em);
            margin-bottom: clamp(20px, 3vw, 30px);
        }

        .vocab-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: clamp(10px, 1.5vw, 15px);
            font-size: var(--base-font-size);
            line-height: 1.5;
        }

        .vocab-item {
            padding: 5px;
            border-radius: 4px;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        /* 阅读理解答案解析区 */
        .questions-section {
            margin-top: 30px;
            padding: 25px;
            background-color: #f8f9fa;
            border-radius: 8px;
        }

        .questions-title {
            font-size: calc(var(--base-font-size) * 1.4);
            font-weight: bold;
            color: #2980b9;
            margin-bottom: 20px;
        }

        .question-item {
            margin-bottom: 25px;
            padding: 15px;
            background: white;
            border-radius: 6px;
            border-left: 4px solid #3498db;
        }

        .question-text {
            font-size: calc(var(--base-font-size) * 1.1);
            font-weight: bold;
            margin-bottom: 10px;
            color: #2c3e50;
        }

        .options {
            font-size: calc(var(--base-font-size) * 1.05);
            margin-bottom: 15px;
            padding-left: 20px;
        }

        .options p {
            margin: 5px 0;
        }

        .answer-box {
            background: #e8f5e9;
            padding: 15px;
            border-radius: 6px;
            margin-top: 10px;
        }

        .answer-label {
            font-weight: bold;
            color: #27ae60;
            font-size: calc(var(--base-font-size) * 1.05);
        }

        .explanation {
            font-size: var(--base-font-size);
            line-height: 1.8;
            margin-top: 10px;
            color: #555;
        }

        .key-words {
            background: #fff3e0;
            padding: 8px 12px;
            border-radius: 4px;
            margin-top: 8px;
            font-size: calc(var(--base-font-size) * 0.95);
        }

        .reading-answers {
            margin-top: 30px;
            padding: 20px;
            background-color: #fafafa;
            border-radius: 8px;
            border-left: 4px solid #800020;
        }

        .reading-answers-title {
            font-size: calc(var(--base-font-size) * 1.25);
            font-weight: bold;
            margin-bottom: 15px;
            color: #333;
        }

        .answer-text {
            font-size: var(--base-font-size);
            color: #800020;
            font-weight: bold;
            margin-bottom: 5px;
        }

        .explanation-text {
            font-size: calc(var(--base-font-size) * 0.95);
            color: #555;
            line-height: 1.6;
        }

        .analysis-section {
            margin-top: clamp(25px, 4vw, 40px);
            padding-top: clamp(15px, 2vw, 20px);
            border-top: 2px solid #e0e0e0;
        }

        .analysis-title {
            font-size: calc(var(--base-font-size) * 1.2);
            font-weight: bold;
            padding-bottom: 10px;
            border-bottom: 1px solid #ccc;
            margin-bottom: clamp(15px, 2vw, 20px);
        }

        .analysis-content {
            font-size: calc(var(--base-font-size) * 0.9);
            line-height: 2;
            text-align: justify;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        .analysis-content h4 {
            font-size: calc(var(--base-font-size) * 0.95);
            margin: 15px 0 10px 0;
        }

        .divider {
            margin: 50px 0;
            border: none;
            border-top: 3px double #1a237e;
        }

        /* 底部篇章导航 */
        .bottom-nav {
            position: fixed;
            bottom: 0;
            left: 0;
            right: 0;
            background: rgba(26, 35, 126, 0.9);
            backdrop-filter: blur(8px);
            padding: 12px 20px;
            display: flex;
            justify-content: center;
            align-items: center;
            gap: 12px;
            flex-wrap: wrap;
            box-shadow: 0 -3px 15px rgba(0,0,0,0.15);
            z-index: 1000;
        }

        .bottom-nav a {
            color: white;
            text-decoration: none;
            padding: 10px 20px;
            border-radius: 25px;
            font-size: 18px;
            background: rgba(255,255,255,0.12);
            transition: all 0.3s ease;
            white-space: nowrap;
            font-weight: 500;
        }

        .bottom-nav a:hover {
            background: rgba(255,255,255,0.25);
            transform: translateY(-2px);
        }

        .bottom-nav a.active {
            background: rgba(255,255,255,0.95);
            color: #1a237e;
            font-weight: bold;
        }

        /* 右侧缩放按钮 */
        .zoom-controls {
            position: fixed;
            right: 20px;
            top: 50%;
            transform: translateY(-50%);
            display: flex;
            flex-direction: column;
            gap: 12px;
            z-index: 1000;
        }

        .zoom-btn {
            width: 50px;
            height: 50px;
            border-radius: 50%;
            border: 2px solid rgba(26, 35, 126, 0.3);
            background: rgba(255, 255, 255, 0.95);
            color: #1a237e;
            font-size: 28px;
            font-weight: bold;
            cursor: pointer;
            box-shadow: 0 3px 10px rgba(0,0,0,0.15);
            transition: all 0.3s ease;
            display: flex;
            align-items: center;
            justify-content: center;
        }

        .zoom-btn:hover {
            background: rgba(26, 35, 126, 0.1);
            border-color: rgba(26, 35, 126, 0.5);
            transform: scale(1.08);
        }

        .zoom-btn:active {
            transform: scale(0.95);
        }

        /* 响应式媒体查询 */
        @media screen and (max-width: 768px) {
            body {
                padding: 10px;
            }

            .container {
                padding: 15px;
                border-radius: 6px;
            }

            .vocab-grid {
                grid-template-columns: 1fr;
            }

            .bottom-nav {
                padding: 10px 12px;
                gap: 8px;
            }

            .bottom-nav a {
                padding: 8px 14px;
                font-size: 14px;
            }

            .zoom-controls {
                right: 10px;
            }

            .zoom-btn {
                width: 40px;
                height: 40px;
                font-size: 22px;
            }
        }

        @media screen and (max-width: 480px) {
            .container {
                padding: 12px;
            }

            .paragraph {
                line-height: 1.7;
            }

            .vocab-section {
                margin-left: 0;
            }
        }

        /* 打印样式优化 */
        @media print {
            body {
                padding: 0;
                background: white;
            }

            .container {
                box-shadow: none;
                padding: 20px;
            }

            .bottom-nav, .zoom-controls {
                display: none;
            }
        }

        /* 署名区样式 */
        .signature {
            margin-top: 40px;
            padding-top: 20px;
            border-top: 1px solid #e0e0e0;
            text-align: center;
            font-size: calc(var(--base-font-size) * 0.9);
            color: #666;
        }

        /* 词汇汇总表 */
        .vocab-summary-text {
            font-size: var(--base-font-size);
            line-height: 1.8;
        }
    &lt;/style&gt;
    &lt;script&gt;
        // 缩放功能 - 通过CSS变量调整字体大小
        let currentZoom = 150;
        const maxZoom = 600;
        const minZoom = 50;
        const step = 15;
        const baseFontSize = 24;

        // 页面加载时应用默认缩放
        document.addEventListener(&#x27;DOMContentLoaded&#x27;, function() {
            applyZoom();
        });

        function applyZoom() {
            const newSize = baseFontSize * (currentZoom / 100);
            document.documentElement.style.setProperty(&#x27;--base-font-size&#x27;, newSize + &#x27;px&#x27;);
        }

        function updateZoom(delta) {
            const newZoom = Math.max(minZoom, Math.min(maxZoom, currentZoom + delta * step));
            if (newZoom !== currentZoom) {
                currentZoom = newZoom;
                const newSize = baseFontSize * (currentZoom / 100);
                document.documentElement.style.setProperty(&#x27;--base-font-size&#x27;, newSize + &#x27;px&#x27;);
            }
        }

        // 平滑滚动到指定章节
        function scrollToSection(id) {
            const element = document.getElementById(id);
            if (element) {
                const navHeight = document.querySelector(&#x27;.bottom-nav&#x27;).offsetHeight;
                const elementPosition = element.getBoundingClientRect().top + window.pageYOffset;
                window.scrollTo({
                    top: elementPosition - navHeight - 20,
                    behavior: &#x27;smooth&#x27;
                });
            }
        }

        // 更新导航高亮
        function updateNavHighlight() {
            const sections = document.querySelectorAll(&#x27;[id]&#x27;);
            const navLinks = document.querySelectorAll(&#x27;.bottom-nav a&#x27;);
            let currentSection = &#x27;&#x27;;

            sections.forEach(section =&gt; {
                const rect = section.getBoundingClientRect();
                if (rect.top &lt;= 150) {
                    currentSection = section.id;
                }
            });

            navLinks.forEach(link =&gt; {
                link.classList.remove(&#x27;active&#x27;);
                if (link.getAttribute(&#x27;href&#x27;) === &#x27;#&#x27; + currentSection) {
                    link.classList.add(&#x27;active&#x27;);
                }
            });
        }

        window.addEventListener(&#x27;scroll&#x27;, updateNavHighlight);
        document.addEventListener(&#x27;DOMContentLoaded&#x27;, updateNavHighlight);
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1 class=&quot;main-title&quot;&gt;英语阅读材料&lt;br&gt;&lt;span class=&quot;main-subtitle&quot;&gt;副标题&lt;/span&gt;&lt;/h1&gt;

        &lt;!-- 各篇章通过id进行导航定位 --&gt;
        &lt;!-- &lt;h2 class=&quot;section-header&quot; id=&quot;reading-a&quot;&gt;阅读理解 A 篇&lt;/h2&gt; --&gt;
        &lt;!-- &lt;h2 class=&quot;section-header&quot; id=&quot;reading-b&quot;&gt;阅读理解 B 篇&lt;/h2&gt; --&gt;
        &lt;!-- 以此类推... --&gt;

        &lt;!-- 段落内容 --&gt;

        &lt;!-- ====== 七选五/完形填空/语法填空答案还原格式示例 ====== --&gt;
        &lt;!-- 七选五:题目编号 + 选项字母 + 答案内容 --&gt;
        &lt;!-- &lt;p class=&quot;paragraph&quot;&gt;&lt;span class=&quot;paragraph-num&quot;&gt;①&lt;/span&gt;This is the original text &lt;u&gt;36. F. That means good grammar and no spelling mistakes.&lt;/u&gt; and continues here.&lt;/p&gt; --&gt;

        &lt;!-- 完形填空:题目编号 + 选项字母 + 答案单词 --&gt;
        &lt;!-- &lt;p class=&quot;paragraph&quot;&gt;&lt;span class=&quot;paragraph-num&quot;&gt;①&lt;/span&gt;When I was a teenager, a neighborhood friend &lt;u&gt;41. C won&lt;/u&gt; a marathon race.&lt;/p&gt; --&gt;

        &lt;!-- 语法填空:题目编号 + 答案 --&gt;
        &lt;!-- &lt;p class=&quot;paragraph&quot;&gt;&lt;span class=&quot;paragraph-num&quot;&gt;①&lt;/span&gt;The latest &lt;u&gt;56. engineering&lt;/u&gt; techniques are applied to create this structure.&lt;/p&gt; --&gt;

        &lt;!-- ⚠️ 注意:直接使用 &lt;u&gt; 标签,不要添加 class=&quot;filled-blank&quot; 等额外属性 --&gt;

         &lt;!-- 段落大意 --&gt;
         &lt;!-- &lt;div class=&quot;paragraph-summary&quot;&gt;【Main Idea. 段落大意内容】&lt;/div&gt; --&gt;

        &lt;!-- 词汇表 --&gt;
        &lt;!-- &lt;div class=&quot;vocab-section&quot;&gt;
            &lt;div class=&quot;vocab-grid&quot;&gt;
                &lt;div class=&quot;vocab-item highlight-blue&quot;&gt;sophisticated | adj. 复杂的;精密的&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt; --&gt;

        &lt;!-- 阅读理解答案解析(仅阅读题需要) --&gt;
        &lt;!-- &lt;div class=&quot;questions-section&quot;&gt;
            &lt;h3 class=&quot;questions-title&quot;&gt;阅读理解题目与解析&lt;/h3&gt;
            &lt;div class=&quot;question-item&quot;&gt;
                &lt;p class=&quot;question-text&quot;&gt;21. What is the main purpose of the project?&lt;/p&gt;
                &lt;div class=&quot;options&quot;&gt;
                    &lt;p&gt;A. Option A&lt;/p&gt;
                    &lt;p&gt;B. Option B&lt;/p&gt;
                    &lt;p&gt;C. Option C&lt;/p&gt;
                    &lt;p&gt;D. Option D&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&quot;answer-box&quot;&gt;
                    &lt;p class=&quot;answer-label&quot;&gt;答案:D&lt;/p&gt;
                    &lt;p class=&quot;explanation&quot;&gt;&lt;strong&gt;解题思路:&lt;/strong&gt;根据原文...&lt;/p&gt;
                    &lt;p class=&quot;key-words&quot;&gt;关键词定位:...&lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt; --&gt;

        &lt;!-- 主题文体分析 --&gt;
        &lt;!-- &lt;div class=&quot;analysis-section&quot;&gt;
            &lt;div class=&quot;analysis-title&quot;&gt;主题语境与文体分析&lt;/div&gt;
            &lt;div class=&quot;analysis-content&quot;&gt;
                &lt;h4&gt;主题语境:人与社会&lt;/h4&gt;
                &lt;p&gt;本文属于...&lt;/p&gt;
                &lt;h4&gt;文体类型:说明文&lt;/h4&gt;
                &lt;p&gt;本文是...&lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt; --&gt;

        &lt;!-- 词汇汇总表(合并模式在最后添加) --&gt;
        &lt;!-- &lt;h2 class=&quot;section-header&quot; id=&quot;vocab-summary&quot;&gt;全卷核心词汇汇总表&lt;/h2&gt; --&gt;

        &lt;!-- 署名 --&gt;
        &lt;div class=&quot;signature&quot;&gt;制作者:福建师范大学平潭附属中学 戴元守&lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- 右侧缩放按钮 --&gt;
    &lt;div class=&quot;zoom-controls&quot;&gt;
        &lt;button class=&quot;zoom-btn&quot; onclick=&quot;updateZoom(1)&quot; title=&quot;放大&quot;&gt;+&lt;/button&gt;
        &lt;button class=&quot;zoom-btn&quot; onclick=&quot;updateZoom(-1)&quot; title=&quot;缩小&quot;&gt;−&lt;/button&gt;
    &lt;/div&gt;

    &lt;!-- 底部篇章导航(合并模式添加) --&gt;
    &lt;!-- &lt;nav class=&quot;bottom-nav&quot;&gt;
        &lt;a href=&quot;#reading-a&quot; onclick=&quot;scrollToSection(&#x27;reading-a&#x27;); return false;&quot;&gt;阅读A篇&lt;/a&gt;
        &lt;a href=&quot;#reading-b&quot; onclick=&quot;scrollToSection(&#x27;reading-b&#x27;); return false;&quot;&gt;阅读B篇&lt;/a&gt;
        &lt;a href=&quot;#seven-five&quot; onclick=&quot;scrollToSection(&#x27;seven-five&#x27;); return false;&quot;&gt;七选五&lt;/a&gt;
        &lt;a href=&quot;#cloze&quot; onclick=&quot;scrollToSection(&#x27;cloze&#x27;); return false;&quot;&gt;完形填空&lt;/a&gt;
        &lt;a href=&quot;#grammar&quot; onclick=&quot;scrollToSection(&#x27;grammar&#x27;); return false;&quot;&gt;语法填空&lt;/a&gt;
    &lt;/nav&gt; --&gt;
&lt;/body&gt;
&lt;/html&gt;

注意事项

必须遵守

  • 文章顺序必须与附件一致:最终生成的HTML文件中,文章的呈现顺序必须与原始文档(附件)中的文章顺序保持一致
  • 默认合并输出:多篇文章时,默认合并成一个HTML文件,除非用户明确要求分开
  • 逐篇处理:多篇文章时,一篇一篇处理,绝不一次性加载所有内容
  • 使用 todowrite:追踪每篇文章的处理进度
  • 根据用户选择输出:合并模式输出单个HTML,分开模式输出多个独立HTML
  • 合并模式必须添加导航和缩放按钮:
  • 每个篇章标题必须添加 id 属性(如 id=&quot;reading-a&quot;)
  • 在容器末尾添加右侧缩放按钮(&lt;div class=&quot;zoom-controls&quot;&gt;)
  • 在缩放按钮后添加底部导航栏(&lt;nav class=&quot;bottom-nav&quot;&gt;)
  • 导航链接的 href 必须与篇章 id 对应
  • 样式内嵌在head标签中
  • 署名放在文档末尾(合并模式放最后,分开模式每个文件都有)

质量要求

  • 词汇高亮色在原文和词汇表中保持一致
  • 确保浏览器直接打开即可呈现预期效果
  • 每篇文章的处理质量保持一致
  • 缩放和导航功能必须正常工作

处理技巧

  • 如果文章内容很长,分段读取处理
  • 使用临时变量存储已完成的HTML片段
  • 最后统一合并,避免反复修改同一文件

示例调用

输入:

请处理以下英语阅读文本:
[粘贴文本内容]

输出:
完整HTML文件(可直接在浏览器打开)

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。