🧪 Skills

Md Wechat

将 Markdown 文档转换为微信公众号格式的技能。当用户需要将 Markdown 文件排版为微信公众号文章格式时使用此技能。支持自定义主题、字体、颜色、代码

v0.1.1
❤️ 1
⬇️ 21
👁 1
Share

Description


name: md-wechat description: 将 Markdown 文档转换为微信公众号格式的技能。当用户需要将 Markdown 文件排版为微信公众号文章格式时使用此技能。支持自定义主题、字体、颜色、代码高亮等配置。触发词:微信排版、公众号格式、md转微信、markdown转wechat、公众号文章。

微信 Markdown 排版 (md-wechat)

Overview

将 Markdown 文档转换为适配微信公众号的 HTML 格式。支持三种预设主题(经典、优雅、简洁),可自定义字体、颜色、代码高亮等样式,生成的 HTML 可直接复制粘贴到微信公众号编辑器使用。

版本 2.0.0 - 使用 Node.js 重写,完整支持所有功能!

核心功能

基础语法

  • 标题:h1-h6,带样式装饰
  • 段落:自动排版,支持缩进和两端对齐
  • 列表:有序/无序列表,支持嵌套
  • 引用:单层和多级嵌套引用
  • 表格:GFM 表格语法
  • 分隔线:水平分割线

扩展语法

  • 删除线~~删除线~~
  • 高亮==高亮==
  • 下划线++下划线++
  • Ruby 注音[文字]{注音}[文字]^(注音)

高级功能

  • 代码高亮:使用 highlight.js,支持 100+ 语言
  • Mac 风格代码块:带红黄绿装饰按钮
  • 数学公式:KaTeX 渲染,支持行内和块级公式
  • Mermaid 图表:流程图、时序图、饼图等
  • PlantUML 图表:UML 类图、时序图等
  • Infographic 信息图:数据可视化图表

Workflow

1. 环境准备

前提条件:Node.js >= 18.0.0

推荐安装方式(更安全)

# 手动安装依赖,可审查 package.json
npm install

# 然后运行转换
node scripts/convert.js article.md --no-auto-install

自动安装方式

# 脚本会自动检测并安装缺失依赖
node scripts/convert.js article.md

安全提示:建议在隔离环境(Docker/沙盒)中首次运行,或使用 --no-auto-install 参数手动控制依赖安装。

2. 转换流程

输入

  • Markdown 文件路径(必需)
  • 配置选项(可选)

处理流程

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ 读取 MD 文件 │ -> │ 解析 Markdown │ -> │ 渲染特殊元素 │ -> │ 生成 HTML   │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
                         │                   │
                         v                   v
                ┌─────────────┐    ┌─────────────────────┐
                │ marked 解析  │    │ KaTeX 渲染公式      │
                │ 扩展语法处理 │    │ Puppeteer 渲染图表  │
                └─────────────┘    └─────────────────────┘

输出

  • 文件名:{原文件名}-wechat.html
  • 特点:样式内联,可直接复制到微信公众号

3. 输出格式

生成的 HTML 特点:

  • 所有样式内联(微信公众号要求)
  • 支持 GFM(GitHub Flavored Markdown)
  • 代码块带 Mac 风格装饰
  • 图片带图注
  • 外链自动添加引用标记
  • 数学公式已渲染为 HTML
  • 图表已渲染为 SVG

Configuration

配置文件 md-config.json

{
  "version": "1.0.0",
  "theme": {
    "name": "default"
  },
  "style": {
    "fontFamily": "-apple-system-font, BlinkMacSystemFont, Helvetica Neue, PingFang SC, sans-serif",
    "fontSize": "16px",
    "primaryColor": "#0F4C81",
    "textColor": "#3f3f3f",
    "bgColor": "#ffffff",
    "lineHeight": 1.75
  },
  "codeBlock": {
    "themeUrl": "https://cdn.jsdelivr.net/npm/highlight.js@11.9.0/styles/atom-one-dark.min.css",
    "themeName": "atom-one-dark",
    "isMacStyle": true,
    "showLineNumber": false
  },
  "image": {
    "legend": "alt-title",
    "borderRadius": "4px"
  },
  "link": {
    "citeStatus": false,
    "color": "#0F4C81"
  },
  "content": {
    "countStatus": true,
    "useIndent": false,
    "useJustify": false,
    "padding": "20px"
  },
  "headingStyles": {
    "h1": "default",
    "h2": "default",
    "h3": "default",
    "h4": "default",
    "h5": "default",
    "h6": "default"
  },
  "customCSS": ""
}

配置提取功能

从已排版好的 HTML 文件中提取样式配置,实现样式复用:

# 从渲染后的 HTML 提取配置
node scripts/extract-config.js example-result.html -o my-style.json

# 同时提供 Markdown 源文件,增强分析
node scripts/extract-config.js example-result.html -m example.md -o my-style.json

# 指定配置名称
node scripts/extract-config.js output.html --name "my-brand" -o my-brand-config.json

可提取的样式参数

参数 说明 提取方式
主色调 链接、标题等元素的颜色 分析 HTML 中的颜色值
字体 文章正文字体 从 CSS 中提取
字号 正文字号 从 CSS 中提取
代码块主题 highlight.js 主题 从 CSS URL 中识别
Mac 风格代码块 是否有红黄绿按钮 检测 SVG 元素
背景色 文章背景色 从 body 样式中提取
文本颜色 正文颜色 从段落样式中提取
行高 文本行高 从 CSS 中提取
图片圆角 图片边框圆角 从 img 样式中提取

使用提取的配置

# 使用提取的配置文件进行转换
node scripts/convert.js article.md -c my-style.json -o article-output.html

# 命令行参数覆盖配置文件
node scripts/convert.js article.md -c my-style.json --color "#FF6600"

命令行参数

md-wechat <input> [options]

选项:
  -o, --output <path>     输出 HTML 文件路径
  -c, --config <path>     配置文件路径 (默认: md-config.json)
  --theme <name>          主题名称 (default/grace/simple)
  --color <color>         主题颜色 (覆盖配置文件)
  --font <font>           字体系列 (覆盖配置文件)
  --font-size <size>      字体大小 (覆盖配置文件)
  --bg-color <color>      背景颜色 (覆盖配置文件)
  --text-color <color>    文本颜色 (覆盖配置文件)
  --no-auto-install       禁用自动安装依赖

Usage Examples

基础用法

# 转换单个文件
node scripts/convert.js article.md

# 指定输出路径
node scripts/convert.js article.md -o output.html

# 使用自定义主题色
node scripts/convert.js article.md --color "#009874"

npm scripts

# 安装依赖
npm install

# 测试转换
npm run test

编程方式使用

import { MDToWechatConverter } from './scripts/convert.js';

const converter = new MDToWechatConverter({
  primaryColor: '#0F4C81',
  macStyleCode: true
});

const html = await converter.convert(markdownText);
console.log(html);

Dependencies

核心依赖

依赖 版本 用途
marked ^12.0.0 Markdown 解析
highlight.js ^11.9.0 代码语法高亮
katex ^0.16.9 数学公式渲染
juice ^10.0.0 CSS 内联化
puppeteer ^22.0.0 图表渲染(无头浏览器)
commander ^12.0.0 命令行参数解析
chalk ^5.3.0 终端彩色输出

自动安装机制

脚本会自动检测缺失的依赖并安装:

  1. 检查 node_modules 目录
  2. 缺失时自动执行 npm install
  3. 安装完成后继续执行

可选依赖

对于 PlantUML 支持,需要安装 Java 运行时环境。

功能支持矩阵

功能 Python 版本 Node.js 版本
基础 Markdown
GFM 扩展
删除线/高亮/下划线
Ruby 注音
代码高亮
数学公式 ❌ 原始代码 ✅ KaTeX 渲染
Mermaid 图表 ❌ 原始代码 ✅ SVG 渲染
PlantUML ❌ 原始代码 ⚠️ 部分
Infographic ❌ 原始代码 ⚠️ 部分
样式内联 ✅ juice

Implementation Notes

架构设计

convert.js
├── 扩展语法处理器
│   ├── strikethrough  删除线
│   ├── highlight      高亮
│   ├── underline      下划线
│   ├── rubyBrace      Ruby 注音 {}
│   └── rubyCaret      Ruby 注音 ^()
│
├── 数学公式渲染
│   ├── mathExtension  块级公式
│   └── inlineMath     行内公式
│
├── 图表渲染
│   └── mermaidExtension  Mermaid → SVG
│
├── 代码块处理
│   └── codeBlockExtension  代码高亮 + Mac 装饰
│
└── 核心转换器
    └── MDToWechatConverter
        ├── setupMarked()     配置解析器
        ├── convert()         主转换流程
        ├── renderMermaid()   渲染 Mermaid
        └── wrapHTML()        包装输出

关键技术点

  1. marked 扩展系统:使用 marked 的 extension API 实现自定义语法
  2. KaTeX 服务端渲染:在 Node.js 中直接渲染数学公式为 HTML
  3. Puppeteer 无头浏览器:渲染 Mermaid 等 JavaScript 依赖的图表
  4. CSS 内联化:使用 juice 库将 CSS 样式内联到 HTML 元素

微信公众号适配

关键适配点:

  1. 样式内联:所有 CSS 必须内联到 style 属性
  2. 选择器限制:不支持 class 选择器,使用标签和内联样式
  3. 外部链接:微信会屏蔽外链,建议添加引用标记
  4. 图片处理:需上传到微信服务器或使用支持的图床
  5. 代码块:使用 pre + code 标签,添加 Mac 装饰
  6. KaTeX 样式:通过 CDN 引入,复制时需保留

Troubleshooting

常见问题

Q: Puppeteer 安装失败? A: Puppeteer 需要下载 Chromium,可能需要配置镜像:

npm config set puppeteer_download_host=https://cdn.npmmirror.com/mirrors
npm install puppeteer

Q: 数学公式显示异常? A: 确保 KaTeX CSS 正确加载,检查网络连接。

Q: Mermaid 图表渲染失败? A: 检查 Puppeteer 是否正确安装,可能需要额外的系统依赖。

Q: 复制到公众号后样式丢失? A:

  1. 使用浏览器打开 HTML 文件
  2. 全选复制(Ctrl+A)
  3. 粘贴到公众号编辑器

Q: 图片不显示? A: 微信公众号不支持外链图片,需要:

  1. 上传图片到微信后台
  2. 使用微信支持的图床(如腾讯云)

File Structure

md-wechat/
├── skill.md                    # 本文档
├── package.json                # Node.js 依赖配置
├── md-config.json              # 默认配置文件
├── scripts/
│   ├── convert.js              # 核心转换脚本 (Node.js)
│   ├── extract-config.js       # 配置提取脚本
│   └── convert.py              # Python 备用脚本
├── references/
│   ├── config-reference.md     # 配置参考
│   └── theme-reference.md      # 主题参考
└── assets/
    └── themes/
        ├── base.css            # 基础样式
        ├── default.css         # 经典主题
        ├── grace.css           # 优雅主题
        └── simple.css          # 简洁主题

Version History

  • 2.0.0 (2024-03) - 使用 Node.js 重写,完整支持数学公式和图表渲染
  • 1.0.0 (2024-03) - Python 版本,支持基础 Markdown 和扩展语法

Based on

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs