688 字
2 分钟
数学公式渲染技能
Math Formula Rendering Skill
这个技能用于在 QQ 群聊中渲染数学公式为图片,避免直接发送 LaTeX 源码导致乱码。
概述
当用户询问数学问题或需要在 QQ 群聊中输出数学公式时,必须使用 Matplotlib 将公式渲染成图片发送,而不是直接发送 LaTeX 文本。
工作流程
1. 公式收集
- 整理需要呈现的所有数学内容
- 分类:题目区、提示区、答案区、解析区
2. 渲染配置
- 使用 Matplotlib 创建画布
- 字体配置:
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP', 'DejaVu Sans']plt.rcParams['axes.unicode_minus'] = False- 中文正常显示,数学公式用 LaTeX 渲染
3. 排版布局
- 标题区:大字号、醒目颜色(如紫色 #8e44ad)
- 题目区:题号 + 题目名称 + 公式
- 提示区:小字号、灰色(#95a5a6)
- 答案区:绿色标记(#27ae60)+ 推导过程
- 分隔线:用
ax.plot()画浅色分隔线
4. 输出规范
- 保存路径:
/root/AstrBot/data/workspaces/default_GroupMessage_1087337904/ - DPI:200(保证清晰度)
- 格式:PNG
- 发送后立即删除(可选,节省空间)
使用方法
渲染数学图片
使用 astrbot_execute_python 工具执行 Python 代码生成图片:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP', 'DejaVu Sans']plt.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots(figsize=(宽, 高))ax.set_xlim(0, 1)ax.set_ylim(0, 1)ax.axis('off')fig.patch.set_facecolor('#fafafa')
# 从上到下依次添加内容ax.text(x, y, r'$LaTeX公式$', fontsize=字号, ha='对齐', va='top', color='颜色')
plt.savefig('路径', dpi=200, bbox_inches='tight', pad_inches=边距)plt.close()发送图片
使用 send_message_to_user 工具:
{ "messages": [ {"type": "image", "path": "生成的图片路径"} ]}重要规则
-
禁止直接发送 LaTeX 源码到 QQ
- QQ 不支持 LaTeX 渲染,直接发会导致乱码
- 必须渲染成图片
-
LaTeX 公式格式
- 行内公式:
r'$...$' - 独立公式:
r'$$...$$' - 注意转义:Python 字符串中用
\frac而非\frac
- 行内公式:
-
中文混排
- 中文字符放在
r'...'字符串外,或确保字体支持 - 数学符号用
$...$包裹
- 中文字符放在
-
配色建议
- 标题:
#8e44ad(紫色) - 正文:
#2c3e50(深灰) - 答案标记:
#27ae60(绿色) - 提示:
#95a5a6(浅灰) - 强调答案:
#8e44ad(紫色粗体)
- 标题:
-
表情包规则
- 仅当狐狸(ID:2127074778)明确要求时才调用
upload_image - 普通数学渲染直接用本地路径发送,无需上传图床
- 仅当狐狸(ID:2127074778)明确要求时才调用
示例结构
一个完整的数学挑战卷应包含:
- 主标题(如「爱丽丝的数学挑战卷」)
- 副标题/引言
- 题目区块(题号 + 题目名 + 公式)
- 提示(可选)
- 答案区块(推导过程 + 最终答案)
- 分隔线
- 结语
每个题目独立成块,结构清晰,便于阅读。
常见问题
- 字体警告:不影响渲染,可忽略
- LaTeX 解析失败:检查转义字符,确保使用原始字符串
r'...' - 中文显示方框:确认
Noto Sans CJK JP字体已安装 - 公式截断:增大
figsize高度或调整y坐标
记住:在 QQ 群聊中,数学公式 = 必须渲染成图片。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
1
用Python给超级战队队员的五色分工写个负载均衡与协同调度算法
奇思妙想 从Python负载均衡、权重调度与故障转移视角,拆解超级战队五色阵容的战斗协同与仇恨拉取机制。
2
用Python给假面骑士腰带音效写个上下文无关文法解析器
极客漫游 从Decade的Card Reading到Gotchard的Chemy组合,当变身音效繁复到必须用抽象语法树防规避,这就是属于特摄代码人的硬核浪漫。
3
用Python给奥特曼彩色计时器闪红灯写个防抖与状态监听器
ACG随笔 为什么奥特曼胸前的彩色计时器一开始闪红灯,怪兽就突然招架不住了?从Python异步防抖与状态监听的角度,聊聊这神奇的3分钟倒计时机制。
4
用Python给Black Souls的童话誓约写个违约异常捕获器
极客与游戏 当你试图在黑童话和克苏鲁的狂气誓约里用 try-except 捕获精神污染与破灭结局……
5
用Python给光之美少女的肉搏物理引擎写个碰撞检测
ACG与代码 谁说光之美少女是魔法少女?那明明是传说中的物理战士!如果用 Python 给 Precure 的拳拳到肉和波状必杀技写个物理碰撞与异步协程引擎……





