我怎样才能把LaTeX与Markdown混合?

我一直在使用Markdown的课堂笔记,这是很好的。 我甚至在Markdown上做了一些预处理,所以我可以做一些像表格一样的事情。 但是这个术语我正在教一个有很多math的课,我很乐意把LaTeX公式和Markdown放在一起,就像这样:

The refinement relation is written $a \sqsubseteq b$, which can be pronounced "$a$ approximates $b$" or "$b$ is at least as defined as $a$". 

我希望能够把LaTeX的每一个片段预处理成一个很好的抗混淆的PNG文件,然后通过HTML <img>标签将其包含在我的Markdown中。 但我绝对不知道如何把LaTeX的一个片段,并得到一个很好的形象

  • 有正确的边界框
  • 是antialiased

我所知道的只是以DVI,PostScript或PDF格式获取完整页面。

我确信这个问题已经解决了,但我还没有能够猜出正确的search条件。 任何build议如何解决或在哪里寻找现有的解决scheme?


编辑 :安装mathTeX,我可以说,代码是僵化的,它违反了Linux文件系统层次结构标准,而且它是业余的工作,在这个词的好和坏的意义。 代码非常复杂,没有明显的缺陷。 我会寻找替代品。

另外,很明显,解决scheme基于dvipng


一年之后 :我从来没有得到过我一直期待的无缝整合,但是我正在用我自己devise的脚本来徘徊。 事实certificate,而不是dvipng使用dvips -E和ImageMagick的convert程序有点容易。 好处是稍微控制一些东西,比如缩放,以及轻松制作透明背景。 好奇可以检查这个例子 。

我不能向任何人推荐这个解决scheme。 但是我也不能推荐MathTeX。

你尝试过Pandoc吗?

也许mathJAX是票。 它build立在jsMath ,一个2004年份的JavaScript库上。

截至2015年2月5日,我会转而推荐KaTeX–来自可汗学院的性能最高的Javascript LaTeX库。

将以下代码添加到Markdown文件的顶部以获得MathJax渲染支持

 <style TYPE="text/css"> code.has-jax {font: inherit; font-size: 100%; background: inherit; border: inherit;} </style> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']], skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'] // removed 'code' entry } }); MathJax.Hub.Queue(function() { var all = MathJax.Hub.getAllJax(), i; for(i = 0; i < all.length; i += 1) { all[i].SourceElement().parentNode.className += ' has-jax'; } }); </script> <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 

然后`$ x ^ 2 $`或`$$ x ^ 2 $$`将按预期渲染:-)

如果您不想使用联机分发,您可以随时安装本地版本的MathJax,但是您可能需要通过本地Web服务器来托pipe它。

更新 :这几天我只是使用pandoc而不是规范降价,但上述仍然有用。

我会用一个反问的方式来回答你的问题

你觉得组织模式怎么样? 它不像Markdown那么纯粹,但是它是Markdown式的,我觉得它很容易处理,它允许embeddedLatex。 参看 http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

后记

如果你没有看过org-mode,那么Markdown就有一个很大的优势,就是对Markdown的一种通用的“自然标记语言”,即对表格的处理。 来源:

 |  1 |  0 |  0 |
 |  -1 |  1 |  0 |
 |  -1 |  -1 |  1 |

只是代表你的想法

乳胶是使用tex模式的预览胶乳呈现的片段。

你应该看看multimarkdown http://fletcherpenney.net/multimarkdown/

它支持元数据(标题,关键字,date,作者等),表格,asciimath,mathml,地狱我相信你可以坚持在那里的乳胶math代码。 它基本上是一个扩展到降价添加所有这些其他非常有用的function。 它使用XSLT,所以你可以很容易地掀起你自己的LaTeX风格,并直接转换。 我一直使用它,而且我喜欢它。

我希望减价只会包含多马克标志。 这将是相当不错的。

编辑 :Multimarkdown将产生HTML,乳胶和其他一些格式。 HTML可以带有你select的样式表。 它会转换成MathML,如果我没有记错的话,它会显示在Firefox和Safari / Chrome中。

RStudio有一个很好的免费IDE,允许Markdown和LaTeX。

你可能会发现mimeTeX很有用。

kramdown完全按照你的描述:

https://kramdown.gettalong.org/syntax.html#math-blocks

而且它比Markdown更加可靠和明确。

嘿,这可能不是最理想的解决scheme,但它适用于我。 我最终创build了一个Python-Markdown LaTeX扩展。

https://github.com/justinvh/Markdown-LaTeX

它使用$ math $和%text%语法添加对内联math和文本expression式的支持。 该扩展是一个预处理器,将使用latex / dvipng生成各自的公式/文本的pngs,然后base64编码数据直接内联图像,而不是有外部图像。

然后将数据放在一个简单分隔的caching文件中,该caching文件将expression式编码为base64表示forms。 这限制了胶乳实际运行的次数。

这里是一个例子:

 %Hello, world!% This is regular text, but this: $y = mx + b$ is not. 

输出:

 $ markdown -x latex test.markdown <p><img class='latex-inline math-false' alt='Hello, world!' id='Helloworld' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAAAQBAMAAABpWwV8AAAAMFBMVEX///8iIiK6urpUVFTu7u6YmJgQEBDc3NxERESqqqqIiIgyMjJ2dnZmZmbMzMwAAAAbX03YAAAAAXRSTlMAQObYZgAAAVpJREFUKM9jYICDOgb2BwzYAVji8AQg8fb/PZ79u4AMvv0Mrz/gUA6W8F7AmcLAsJuBYT7Y1PcMfLiUgyWYF/B8Z2DYAVReABKrZ2DHpZwdopzrA0nKOeHKj66CKOcKPQJWwJo2NVFhfwCQyymhYwCUYD0avIApgYFh2927/QUcE3gDwMpvMhRCDJzNMIPhKZg7UW8DUOIMg9sCPgGo6e8ZODeAlAP9xLEArNy/IIwhAMx9D3IM+3cgi70BqnxZaNQFkHJWAQbeBrByjgURExaAuc9AyjnB5hjAlEO9ygVXzrplpskEMPchQvkBmGMcGApgjjkAVs7yhyWVAcwFK2f/AlJeAI0m5gMsEK+aMhQ6aDuA1DcDIZirBg7IOwxlB5g2QBJBF8OZVUz95hqfC3hOXWGYrwBSHskwk4EByGXab8QAlOBaGizFKYAtUlgUGEgBTCSpZnDCLQUA+y6MXeYnPDgAAAAASUVORK5CYII='> This is regular text, but this: <img class='latex-inline math-true' alt='y = mx + b' id='ymxb' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAAAOBAMAAABOTlYkAAAAMFBMVEX///9ERETu7u4yMjK6urp2dnZUVFSIiIjMzMwQEBDc3NwiIiJmZmaYmJiqqqoAAADS00rKAAAAAXRSTlMAQObYZgAAAOtJREFUKM9jYCAACsCk4wYGgiABTLInEKuS+QGxKvkVGBj47jBwI8tcffI84e45BoZ7GVcLECo9751iWLeSoRPITBQEggMMDBy9sxj2MDgz8DIE8yCpPMxwjWFBGUMMkpFcbAEMvxjKGLgYxIE8NkHBiYIyQMY+hmoGhi0Mdsi2czawbGCQBTJ+ILvzE0MaA9MHIIWwnWE9A+sBpk8LGDgmMCnAVXJNYPgCJHhRQvUiA/cDXoECZx4DXoSZTBtYgaaEPw5AVnkOGBRc5xTcbsReQrL9+nWwyxbgC88DcJZ+QygDcYD1+QPiFAIAtLA8KPZOGFEAAAAASUVORK5CYII='> is not.</p> 

正如你可以看到它是一个详细的输出,但是这真的不是一个问题,因为你已经使用Markdown 🙂

是的,但你必须自己破解一下。 我已经写了一个filter,用适当的图像标签replace乳胶标签$\some\inline\latex$$$\some\equation$$到mimetex.cgi脚本。 花了所有的5分钟。

警告:壮观难看…

 #!/usr/bin/env python import sys, markdown,re MIMETEX_LOC="http://some.server.com/cgi-bin/mimetex.cgi" def sanitizeLatex(text): return re.sub(r"\\",r"%5C", text) def wrapLatexBlock(text): return '<img alt="equation" class="block" src="%s?%s"></img>'%(MIMETEX_LOC,text) def wrapLatexInline(text): return '<img alt="equation" class="inline" src="%s?%s"></img>'%(MIMETEX_LOC,text) def prepLatexBlock(matchobj): return wrapLatexBlock(sanitizeLatex(matchobj.group()[2:-2])) def prepLatexInline(matchobj): return wrapLatexInline(sanitizeLatex(matchobj.group()[1:-1])) if __name__ == "__main__": # initialise markdown md=markdown.Markdown() raw_md=open(sys.argv[1],"r").read() ## # deal with embedded latex ## raw_md=re.sub(r'\$\$(.*?)\$\$',prepLatexBlock, raw_md) raw_md=re.sub(r'\$(.*?)\$',prepLatexInline, raw_md) ## # once latex is parsed, convert md to html ## main_html=md.convert(raw_md) # hey presto! print(main_html) 

当然,你必须为.block和.inline图片自己定义合适的css …

你使用什么语言?

如果你可以使用ruby,那么maruku可以configuration为使用各种乳胶 – > MathML转换器来处理math。 Instiki使用这个。 也可以将PHPMarkdown扩展为使用itex2MML来转换math。 基本上,您可以在Markdown引擎中的相应位置插入额外的步骤。

所以用Ruby和PHP,这是完成。 我想这些解决scheme也可以适应其他语言 – 我已经得到了itex2MML扩展来产生perl绑定。

我现在才知道这个讨论,所以我希望我的意见仍然有用。 我参与了MathJax,从我理解你的情况出发,我认为这将是一个很好的解决问题的方法:让你的LaTeX代码保持原样,让MathJax在查看的时候渲染math。

你有什么理由更喜欢图像?

当我findteqhtml时,我正在寻找完全一样的东西。 它将$和$$方程式转换为图像,并将所得图像与周围文本垂直alignment。 不是很多文件,但它非常简单。

希望它有助于未来的读者。

很抱歉唤起一个非常古老的线程,但我一直在使用jemdoc几年,这是非常好的。

可以使用Lunamark代码parsingLua中的Markdown(参见它的Github回购 ),这意味着Markdown可以被Luatex中的macros直接parsing,并且支持转换为Pandoc支持的许多格式(即,该库非常适合在lualatexcontext ,Metafun,Plain Luatex和texlua脚本中使用)。

该项目由Pandoc的作者John MacFarlane创build ,该工具的开发跟踪Pandoc的相当密切,质量相似(即优秀)。

Khaled Hosny写了一个Context模块,提供方便的macros支持。 Michal的答案是否有包含Markdown支持的软件包? 问题提供了对Latex提供类似支持的代码。