在短弦上使用plasTeX

时间:2018-04-05 14:55:47

标签: html python

我试图找到一个python包,它会转换像

这样的短字符串
A closed-form solution of 
$\textbf{R}\textbf{R}_1=\textbf{R}_2\textbf{R}$
w.r.t $\textbf{R}$ 

到合理的HTML表示,比如

A closed-form solution of 
<i><b>R</b><b>R<b><sub>1</sub> = <b>R</b><sub>2</sub> <b>R</b></i>
w.r.t <i><b>R</b></i>

不涉及LaTeX包或文档布局命令(\section等);只是在stackexchange帖子中允许的TeX子集。

虽然Mathjax确实可以很好地处理这个问题,但遗憾的是Javascript选项不在桌面上,因为这是一个电子邮件摘要 - 它必须是静态HTML输出。内联CSS很好。我知道有一个Node.js版本的Mathjax可以用静态形式估算它的输出(关于结果如何赢得浏览器响应以及其他我不关心的事情的一些警告关于),但我想要Python。

我发现的最佳选择似乎是plasTeX,但所有文档似乎都是关于将整个.tex文件转换为.html,或者出于某种原因将.xml文件转换为比我想做的要多得多。

我想,如果需要的话,我可以生成临时的.html文件然后使用BeautifulSoup来解析我感兴趣的部分,但这看起来有点傻。由于我在谈论每次脚本调用时可能会这样做50次,这肯定是可行的。

有没有一种简单的方法可以使用plasTeX或任何其他python包来获取html等效的短乳胶片段?

1 个答案:

答案 0 :(得分:0)

您可能会发现https://github.com/alvinwan/TexSoup有用。使用此库,您可以用两行替换粗体部分。虽然足够数量的正则表达式可以做,但TexSoup可以为您提供更多的灵活性。

from TexSoup import TexSoup
soup = TexSoup(r"$\textbf{R}\textbf{R}_1=\textbf{R}_2\textbf{R}$")

for b in soup.find_all('textbf'):
    b.replace("<b>{args[0]}</b>".format(args=b.args))