# MD2WeChat
**Repository Path**: mapoet/MD2WeChat
## Basic Information
- **Project Name**: MD2WeChat
- **Description**: No description available
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-14
- **Last Updated**: 2025-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Markdown to WeChat HTML Converter
将 Markdown 文件转换为微信公众号兼容的 HTML 格式。
## 特性
- ✅ 支持多种风格模板
- **学术灰风格** (`academic_gray`) - 适合学术论文和技术文档
- **节日快乐色彩系** (`festival`) - 适合节日祝福和庆祝内容
- **科技产品介绍色彩系** (`tech`) - 适合产品介绍和科技文章
- **重大事情告知色彩系** (`announcement`) - 适合重要通知和公告
- ✅ 代码块缩进保留(使用 `
` + ` `,逐行 `span + nowrap`)
- ✅ 代码块左侧显示行号(灰色、右对齐、不可选择)
- ✅ 代码块不插入零宽字符(可安全复制到 IDE)
- ✅ 代码块支持横向滚动(长代码行不换行)
- ✅ 图片自动转换为 Base64 嵌入
- ✅ 支持数学公式渲染(CodeCogs / 本地渲染),使用浅色背景强调
- ✅ 支持 Mermaid 图表转换,使用极浅绿色背景强调
- ✅ 代码语法高亮(Pygments)
- ✅ H2/H3 标题卡片式布局
- ✅ 支持列表(有序/无序,支持嵌套)
- ✅ 列表项智能换行(冒号不会单独出现在行首,描述文本可正常换行)
- ⚠️ **限制**:列表项中不要使用 `XXX:YYY` 格式(可能导致解析错误)
- ⚠️ **限制**:内联公式在微信公众号中会被过滤,建议优先使用块级公式
- ✅ 支持表格(支持对齐方式)
- ✅ 支持链接(支持带标题的链接)
- ✅ 支持水平分割线(`---`, `***`, `___`)
- ✅ 支持文字颜色和加粗组合(`**文字**{color:#ff0000}`、`[文字]{color:#ff0000}`)
- ✅ 100% 微信兼容(仅使用白名单标签)
- ✅ **自动发表功能**(基于 Playwright)
- 自动登录(持久化登录态)
- 自动填充标题和作者(从 Markdown front matter 提取)
- 智能编辑器查找(基于实际 DOM 结构)
- 自动插入 HTML 内容
- 支持定时发表
## 安装
详细安装说明请参考 [INSTALL.md](INSTALL.md)
## Markdown 文件格式
MD2WeChat 使用 YAML Front Matter 来定义文章元信息。详细格式说明请参考 [docs/MARKDOWN_FORMAT.md](docs/MARKDOWN_FORMAT.md)。
快速参考:
- Front Matter 必须用 `---` 包裹
- 必需字段:`title`、`date`
- 可选字段:`author`、`excerpt`、`permalink`、`tags`
- Tags 使用 YAML 列表格式:每行以 `-` 开头(注意缩进)
- **`permalink` 功能**:如果提供了 `permalink`,会在生成的 HTML 文尾自动添加"原文链接"链接
### ⚠️ 重要限制
1. **内联公式限制**:内联公式(`$...$`)在微信公众号中会被过滤,需要不用或慎用
- 当前程序可以识别并精准输出内联公式
- 但微信公众号平台会过滤掉内联公式(小图片)
- 建议:优先使用块级公式 `$$...$$`,对于复杂的内联公式可谨慎使用
- 注意:简单的块状公式也有被过滤的现象,需要根据实际情况测试
2. **列表格式限制**:列表项中不要使用 `XXX:YYY` 格式
- 无论使用英文冒号(`:`)还是中文冒号(`:`),无论冒号前后是否有空格,都可能导致解析错误
- 建议使用其他格式,如 `**标题** 描述` 或 `标题 - 描述`
详细说明请参考 [docs/MARKDOWN_FORMAT.md](docs/MARKDOWN_FORMAT.md) 和 [docs/USAGE.md](docs/USAGE.md)。
## 许可证
本项目采用 [MIT License](LICENSE)。
### 快速安装学术灰风格
```bash
# 1. 克隆仓库
git clone
cd MD2WeChat
# 2. 安装 Python 依赖(推荐完整安装)
pip install -r requirements.txt
# 3. 安装 Mermaid CLI(可选,用于 Mermaid 图表转换)
npm install -g @mermaid-js/mermaid-cli
```
### 依赖说明
- **必需**:`requests` - 用于网络请求
- **推荐**:`pygments` - 代码语法高亮
- **可选**:`matplotlib`, `sympy` - 公式本地渲染
- **外部工具**:`@mermaid-js/mermaid-cli` - Mermaid 图表转换(需通过 npm 安装)
## 快速开始
### 基本使用
```bash
python md2wechat.py input.md
```
或指定输出文件和风格:
```bash
# 指定输出文件
python md2wechat.py input.md -o output.html
# 指定风格(默认:academic_gray)
python md2wechat.py input.md -s festival # 节日快乐色彩系
python md2wechat.py input.md -s tech # 科技产品介绍色彩系
python md2wechat.py input.md -s announcement # 重大事情告知色彩系
```
### 使用示例
```bash
# 转换示例文件
python md2wechat.py examples/2020-05-22-blog-post-13.md
```
## 项目结构
```
MD2WeChat/
├── md2wechat.py # 命令行入口脚本
├── requirements.txt # Python 依赖
├── README.md # 项目说明
├── .gitignore # Git 忽略文件
├── src/ # 源代码目录
│ ├── __init__.py # 包初始化文件
│ ├── md2wechat.py # 主程序模块
│ └── inline_formatter.py # Pygments 内联样式格式化器
├── docs/ # 文档目录
│ ├── USAGE.md # 使用文档
│ └── type.md # 微信支持的 HTML 标签说明
├── examples/ # 示例文件
│ ├── 2020-05-22-blog-post-13.md # 示例 Markdown(包含各种元素)
│ ├── 2020-05-22-blog-post-13.html # 示例输出 HTML
│ ├── 2025-11-05-md2wechat-intro.md # 项目介绍文档
│ ├── 2025-11-05-md2wechat-intro.html # 项目介绍 HTML
│ └── images/ # 示例图片
└── tests/ # 测试目录
```
## 依赖说明
### 必需依赖
- **requests** (>=2.25.0): 用于从网络 URL 下载图片和公式
### 推荐依赖
- **pygments** (>=2.7.0): 用于代码块的语法高亮,强烈推荐安装
### 可选依赖
- **matplotlib** (>=3.3.0): 用于本地渲染数学公式(当 CodeCogs 不可用时)
- **sympy** (>=1.7.0): 用于优化和渲染复杂的 LaTeX 公式
### 外部工具
- **@mermaid-js/mermaid-cli**: 用于将 Mermaid 图表转换为 PNG 图片
- 安装方式:`npm install -g @mermaid-js/mermaid-cli`
- 需要先安装 Node.js
## 功能说明
### 支持的 Markdown 元素
- 标题(H1-H6)
- 段落和换行
- **粗体** 和 *斜体*
- `行内代码`
- 代码块(支持语法高亮)
- 图片(本地路径或 URL,自动转换为 Base64)
- 链接(支持带标题的链接)
- 数学公式(`$...$` 行内,`$$...$$` 块级)
- ⚠️ **重要限制**:内联公式在微信公众号中会被过滤,需要不用或慎用(详见上方"重要限制"部分)
- Mermaid 图表
- 列表(有序列表和无序列表,支持嵌套)
- ⚠️ **重要限制**:不要使用 `XXX:YYY` 格式(无论英文或中文冒号,无论是否有空格,都可能导致解析错误,详见上方"重要限制"部分)
- 表格(支持对齐方式:左对齐、居中、右对齐)
- 文字颜色和加粗组合(支持多种颜色格式)
### 样式特性
- **多种主题风格**:
- 学术灰风格:灰色标题条 + 白色卡片,适合学术论文和技术文档
- 节日快乐色彩系:红色/金色主题,适合节日祝福和庆祝内容
- 科技产品介绍色彩系:蓝色/青色主题,适合产品介绍和科技文章
- 重大事情告知色彩系:红色/橙色主题,适合重要通知和公告
- **H2/H3 卡片布局**:H2 和 H3 标题后的内容自动包裹在卡片中,每个主题有独特的配色
- **代码块横向滚动**:长代码自动横向滚动,代码块颜色随主题变化
- **代码块安全复制**:不插入零宽字符,可直接复制到 IDE 使用
- **列表项智能换行**:冒号和前面的文本保持在同一行,描述文本可正常换行
- **透明背景**:公式和 Mermaid 图表使用透明背景
## 使用文档
- **Markdown 转换使用**:详细使用说明请参考 [docs/USAGE.md](docs/USAGE.md)
- **自动发表功能**:详细发表指南请参考 [docs/PUBLISH_GUIDE.md](docs/PUBLISH_GUIDE.md)
### 快速发表示例
```bash
# 1. 首次使用:设置登录(打开浏览器,手动登录)
python publish_wechat.py --interactive
# 2. 发表文章(自动填充标题、作者和正文)
python publish_wechat.py article.md --style academic_gray
# 3. 定时发表(使用配置文件)
python schedule_publish.py --config publish_config.json
```
**发表功能特性**:
- ✅ 自动从 Markdown 提取标题和作者,填充到编辑器
- ✅ 智能查找编辑器(支持 uEditor/edui1 iframe)
- ✅ 自动插入转换后的 HTML 内容
- ✅ 支持多种风格模板
## 许可证
MIT License