TXT → Markdown → HTML 批量转换器
Overview
将 txt 文件批量转换为 .md 文件,再把每个 .md 文件转换为视觉统一、样式精美、自包含(样式内联、本地图片 base64 内嵌、零外部依赖)的响应式 HTML 页面。HTML 文件名与原 md 文件保持一致。核心转换逻辑由内置脚本完成,不依赖第三方库,任何装了 Python 3.8+ 的机器均可运行。
工作流程
收到转换请求后,按以下顺序执行:
-
收集输入文件
- 用户给了具体文件路径 → 直接使用
- 用户给了目录 → 扫描该目录下所有.txt文件(默认不递归;用户明确要求时才递归)
- 一个都没有 → 明确告知用户找到 0 个文件,不要凭空编造 -
执行转换(一条命令完成 txt→md→html 全链路)
bash
python <skill目录>/scripts/convert.py 文件1.txt 文件2.txt ...
python <skill目录>/scripts/convert.py --dir 某目录/
常用参数:
- --out 输出目录:md 和 html 输出到指定目录(默认与源文件同目录)
- --no-md:跳过 md 中间产物,只输出 HTML
- --plain:关闭 txt 智能结构识别(默认识别标题/章节)
- --no-embed:禁止图片 base64 内嵌(默认开启内嵌)
- --title 自定义标题:自定义页面 <title>(默认取 md 一级标题或文件名)
Windows 下用受管 Python 绝对路径执行;macOS/Linux 直接 python3。
-
检查结果:确认每个源文件都生成了同名
.md和同名.html;若有失败文件,报告原因(编码不支持、文件为空等) -
展示成果:用 present_files 把生成的 HTML 文件(可附带 md)呈现给用户预览
转换行为细节
txt → md
- 自动识别编码:依次尝试 UTF-8(含 BOM)、UTF-16、GBK、GB18030,全部失败则报错
- 规范化换行符为
\n,去除行尾空白,保留原有段落结构 - 智能结构识别(默认开启,
--plain关闭;内容本身已是 Markdown 时自动跳过): - 首个非空行 → 一级标题(
#) 开头:/正文:/结尾:/总结:/前言:/引言:/附录:/背景:前缀行 → 二级标题(##)一、xxx、1. xxx等含中文的独立短行(≤40字,非句子)→ 三级标题(###)中文翻译、互动练习、参考答案这类 2~12 字、无标点的独立短行 → 二级标题(##)- 输出文件名与源 txt 同名,仅扩展名改为
.md
md → html(脚本内置转换器,无需第三方库)
完整支持以下 Markdown 元素,并正确转换为 HTML:
- 标题层级 # ~ ######(映射 h1~h6)
- 段落、换行、水平分割线 ---
- 无序/有序列表,支持多级嵌套
- 表格(| 语法,支持 :---: 对齐方式),窄屏下可横向滚动
- 围栏代码块 ``` 与行内代码(HTML 特殊字符已转义)
- 引用块 >
- 粗体 **、斜体 *、删除线 ~~
- 链接 [文本](url) 与图片 
- 图片处理:本地图片自动读取并 base64 内嵌为 data URI;网络图片保留原 URL
HTML 输出规范(固定要求)
- 文件名与对应 md 文件完全一致(仅扩展名不同)
<head>内含<meta name="viewport">,响应式布局,手机/平板/电脑均可正常阅读- 所有样式写在页面内的
<style>标签中,不引用任何外部 CSS/JS/字体 - 统一视觉风格:系统字体栈、清晰的标题层级、柔和配色、表格斑马纹、代码高亮底色
- 段落首行缩进 2em(引用块和列表内的段落除外),符合中文排版习惯
- 表格在窄屏时容器横向滚动,图片
max-width:100%自适应
异常处理
- 文件无法解码:跳过并在结果中列出,提示用户转存为 UTF-8 后重试
- md 中引用的本地图片不存在:保留原路径并在控制台输出警告,不中断整体流程
- 输出目录不存在:自动创建
- 脚本报错:读取脚本排查修复后重试,不要改用手写转换替代脚本
注意事项
- 多文件转换时逐个报告结果,格式:
源文件 → md ✓ → html ✓ - 不要修改用户源文件内容,只读取
- 转换完成后必须调用 present_files 展示 HTML 产物
```