我怎样才能把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很有用。
嘿,这可能不是最理想的解决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支持的许多格式(即,该库非常适合在lualatex
, context
,Metafun,Plain Luatex和texlua
脚本中使用)。
该项目由Pandoc的作者John MacFarlane创build ,该工具的开发跟踪Pandoc的相当密切,质量相似(即优秀)。
Khaled Hosny写了一个Context模块,提供方便的macros支持。 Michal的答案是否有包含Markdown支持的软件包? 问题提供了对Latex提供类似支持的代码。