1.7.2 函数好了

This commit is contained in:
跨越晨昏 2024-10-11 17:01:00 +08:00
parent 30670780e8
commit 990f72763a
3 changed files with 57 additions and 7 deletions

View File

@ -31,9 +31,8 @@ Extensions = {
} }
try: # 检测当前平台是否支持扩展语法 try: # 检测当前平台是否支持扩展语法
import Extra from .Extra import *
EXTRA_ABLE = True
Extensions += Extra.EXTRA
except ModuleNotFoundError: except ModuleNotFoundError:
EXTRA_ABLE = False EXTRA_ABLE = False
@ -206,9 +205,20 @@ class CodeLine(Treeprocessor):
elem.remove(code) elem.remove(code)
elif re.match(r'¥[^$]*¥', code.text): # 是数学函数(单行) elif re.match(r'¥[^$]*¥', code.text): # 是数学函数(单行)
if EXTRA_ABLE: if EXTRA_ABLE:
expression, range_ = re.findall(r'¥([^$]*)¥(€[^$]*€)?', code)[0] # 分离表达式与范围(如果有) expression, range_ = re.findall(r'¥([^$]*)¥(€[^$]*€)?', code.text)[0] # 分离表达式与范围(如果有)
x_r = (-10, 10) x_r = (-10, 10)
y_r = (-20, 20) y_r = (-20, 20)
if range_ != '': # 定义了范围
ranges = range_[1:-1].split('|')
if len(ranges) in (1, 2): # 定义的范围正确
x_r = tuple(int(i) for i in ranges[0].split(','))
if len(ranges) == 2: # 定义了y范围
y_r = tuple(int(i) for i in ranges[1].split(','))
code.tag = 'img'
code.set('src', f"""data:image/png;base64,{(function_drawing(
function=lambda x: eval(expression.split('=')[1]), x_range=x_r, y_range=y_r
))}""") # 绘制函数图像
code.set('alt', 'Base64 函数图片')
elif re.match(r'\{[^$]*}', code.text): # 是强调 elif re.match(r'\{[^$]*}', code.text): # 是强调
code.tag = 'span' code.tag = 'span'
code.set('class', 'block') code.set('class', 'block')

View File

@ -1,3 +1,43 @@
import matplotlib.pyplot as plt
import numpy as np
import base64
from io import BytesIO
EXTRA = [ EXTRA = [
] ]
def function_drawing(function, x_range=(-10, 10), y_range=(-20, 20), dpi=100):
# 创建一个图像和坐标轴对象
fig, ax = plt.subplots()
# 生成x值
x = np.linspace(x_range[0], x_range[1], 400)
# 计算y值
y = function(x)
# 绘制图像
ax.plot(x, y)
# 设置坐标轴范围
ax.set_xlim(x_range)
ax.set_ylim(y_range)
# 隐藏坐标轴
ax.axis('on')
# 将图像保存到BytesIO对象
buf = BytesIO()
fig.savefig(buf, format='png', dpi=dpi)
# 获取图像数据的Base64编码
data = base64.b64encode(buf.getbuffer()).decode("ascii")
# 关闭图像和坐标轴对象
plt.close(fig)
# 返回Base64编码的字符串
return data

File diff suppressed because one or more lines are too long