作为一个科班出身的人经常会使用公式,在本博客的写作中使用WordPress经常会有公式的问题,在使用不同的插件调试之后,选择了最后的WP Githuber MD
插件,并且使用Mathjax
语法。不要问我为什么捏,是因为经常顾此失彼,想要达到一个完美的使用情况最后不得不综合使用。
对于使用段间公式是需要双美元符号$$
的,有的时候会出错可能导致第一个可以,第二个就会出现错误(经常不知道为什么出错),这导致我耗费了很长一段时间,这两天下定决心解决这个问题终于有了改善。例如我现在写一个勾股定理:
$$
a^2=b^2+c^2
$$
但是往往在我加入了其他东西之后就会出错,例如:
这是我的座右铭:悟已往之不谏,知来者之可追。
$$
\lambda = a + b
$$
其实不是用mathjax写法则会出现以上错误,类似于不可兼容的情况,但是如果不适用mathjax写法就无法顺利书写。
这里使用了Mathjax写法,也就是使用代码块去渲染公式,例如:
\lambda = a + b
则需要在代码块使用mathjax
进行渲染,而行内公式则需要在双美元符号加上a+b
但是我们在做markdown笔记的时候是不可能是用mathjax语法的,所以编写了python代码只需要导入转换即可
version1.0
import re
def process_text(input_text):
# 删除所有的 '==' 删除高亮
input_text = input_text.replace('==', '')
# 将段间公式 $$ 变为 mathjax 代码块
modified_text = re.sub(r'\$\$(.*?)\$\$', r'\n```mathjax\n\1\n```\n', input_text, flags=re.DOTALL)
# 将行内公式 $a$ 变为 `$a$`
modified_text = re.sub(r'\$(.*?)\$', r'`$\1$`', modified_text)
return modified_text
# 从 in.md 读取输入
with open("in.md", "r", encoding="utf-8") as f:
input_text = f.read()
output_text = process_text(input_text)
# 输出到终端
# print(output_text)
# 保存到 output.md
with open("output.md", "w", encoding="utf-8") as f:
f.write(output_text)
例如下面这段话的markdown如下:
$\nabla$的LaTeX是`\nalba`
> 梯度的定义:
>
> 给定函数$f:\mathbb{R}^n\rightarrow\mathbb{R}$,且$f$再点$x$的一个邻域内有意义,若存在向量$g\in\mathbb{R}^n$满足:
> $$
> \lim_{p\rightarrow 0}\frac{f(x+p)-f(x)-g^T p}{\Vert p\Vert}=0
> $$
> 其中$\Vert \cdot\Vert$是任意向量范数,就称$f$在点$x$处可微.此时$g$称为$f$在点$x$处的梯度,记作$\nabla f(x)$
若$f$在点$x$处梯度存在,在定义式中令$p=\varepsilon e_i$,$e_i$是第$i$个分量为$1$的单位向量(其余是$0$),可知$\nabla f(x)$的第$i$个分量$\frac{\partial f(x)}{\partial x_i}$.因此,
$$
\nabla f(x)=\left[\frac{\partial f(x)}{\partial x_{1}}, \frac{\partial f(x)}{\partial x_{2}}, \cdots, \frac{\partial f(x)}{\partial x_{n}}\right]^{\mathrm{T}}
$$
我原封不动的将其放置in.md
中并且运行程序,生成的output.md
如下:
(由于mathjax渲染的时候需要三个反单引号,所以我这里在代码块中只显示两个)
`$\nabla$`的LaTeX是`\nalba`
> 梯度的定义:
>
> 给定函数`$f:\mathbb{R}^n\rightarrow\mathbb{R}$`,且`$f$`再点`$x$`的一个邻域内有意义,若存在向量`$g\in\mathbb{R}^n$`满足:
>
``mathjax
> \lim_{p\rightarrow 0}\frac{f(x+p)-f(x)-g^T p}{\Vert p\Vert}=0
>
``
> 其中`$\Vert \cdot\Vert$`是任意向量范数,就称`$f$`在点`$x$`处可微.此时`$g$`称为`$f$`在点`$x$`处的梯度,记作`$\nabla f(x)$`
若`$f$`在点`$x$`处梯度存在,在定义式中令`$p=\varepsilon e_i$`,`$e_i$`是第`$i$`个分量为`$1$`的单位向量(其余是`$0$`),可知`$\nabla f(x)$`的第`$i$`个分量`$\frac{\partial f(x)}{\partial x_i}$`.因此,
``mathjax
\nabla f(x)=\left[\frac{\partial f(x)}{\partial x_{1}}, \frac{\partial f(x)}{\partial x_{2}}, \cdots, \frac{\partial f(x)}{\partial x_{n}}\right]^{\mathrm{T}}
``
至此,这段markdown渲染如下:
\nabla
的LaTeX是\nalba
梯度的定义:
给定函数
f:\mathbb{R}^n\rightarrow\mathbb{R}
,且f
再点x
的一个邻域内有意义,若存在向量g\in\mathbb{R}^n
满足:\lim_{p\rightarrow 0}\frac{f(x+p)-f(x)-g^T p}{\Vert p\Vert}=0
其中
\Vert \cdot\Vert
是任意向量范数,就称f
在点x
处可微.此时g
称为f
在点x
处的梯度,记作\nabla f(x)
若f
在点x
处梯度存在,在定义式中令p=\varepsilon e_i
,e_i
是第i
个分量为1
的单位向量(其余是),可知\nabla f(x)
的第i
个分量\frac{\partial f(x)}{\partial x_i}
.因此,
\nabla f(x)=\left[\frac{\partial f(x)}{\partial x_{1}}, \frac{\partial f(x)}{\partial x_{2}}, \cdots, \frac{\partial f(x)}{\partial x_{n}}\right]^{\mathrm{T}}
version2.0
增加了让图片居中的功能
import re
def process_text(input_text):
# 删除所有的 '==' 删除高亮
input_text = input_text.replace('==', '')
# 将段间公式 $$ 变为 mathjax 代码块
modified_text = re.sub(r'\$\$(.*?)\$\$', r'\n```mathjax\n\1\n```\n', input_text, flags=re.DOTALL)
# 将行内公式 $a$ 变为 `$a$`
modified_text = re.sub(r'\$(.*?)\$', r'`$\1$`', modified_text)
# 处理带 zoom 的图片标签,保持 zoom 并居中对齐
modified_text = re.sub(
r'<img src="(.*?)" alt="(.*?)" style="zoom:(\d+)%;" />',
r'<div align="center">\n <img src="\1" alt="\2" style="zoom:\3%;" />\n</div>',
modified_text
)
# 处理没有 zoom 的 <img> 标签,默认 zoom 为 100%,并居中对齐
modified_text = re.sub(
r'<img src="(.*?)" alt="(.*?)" ?/>',
r'<div align="center">\n <img src="\1" alt="\2" style="zoom:100%;" />\n</div>',
modified_text
)
# 处理 Markdown 格式的图片标签,转换为 <img> 标签并默认 zoom 为 100%
modified_text = re.sub(
r'!\[(.*?)\]\((.*?)\)',
r'<div align="center">\n <img src="\2" alt="\1" style="zoom:100%;" />\n</div>',
modified_text
)
return modified_text
# 从 in.md 读取输入
with open("in.md", "r", encoding="utf-8") as f:
input_text = f.read()
output_text = process_text(input_text)
# 输出到终端
# print(output_text)
# 保存到 output.md
with open("output.md", "w", encoding="utf-8") as f:
f.write(output_text)
文章评论