2010-02-03 158 views
144

我一直在使用Markdown作为课堂笔记,它很棒。我甚至在Markdown上做了一些预处理,所以我可以做一些事情,比如表格。但是,这学期我教了很多数学类,我很想能够把LaTeX的公式与降价,这样的事情:如何将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中。但我完全不知道如何采取乳胶片段,并得到一个不错的形象,

  • 拥有
  • 是抗锯齿右侧边框

所有我知道该怎么做的就是全DVI,PostScript或PDF格式的页面。

我确定这个问题已经解决,但我一直没能猜到正确的搜索条件。任何建议如何解决它或在哪里寻找现有的解决方案?


编辑:无需安装mathTeX,我可以说,代码是不灵活的,它违反了Linux文件系统层次的标准,这是业余工作—两个这个词的好的和坏的感觉。代码非常复杂,没有明显的缺陷。我会寻找替代品。

此外,很明显在底部,解决方案基于dvipng


一年后:我从来没有得到的无缝集成我一直希望,但我对我自己设计的脚本艰难维持。事实证明,代替dvipng,使用ImageMagick的dvips -Econvert程序要容易一些。好处是略微控制诸如缩放等事物,并且易于制作透明背景。 好奇可以检查this example

我不能向任何人推荐这个解决方案。但我不能推荐MathTeX。

+0

好问题。我已经在LaTeX中直接做了准备工作,但是为了这个目的,我甚至使用auctex做了一点罗嗦...... – dmckee 2010-02-03 00:41:14

+5

您是否尝试过Pandoc?它不仅自己将Markdown + LaTeX转换为(不管),还有它的最新版本,它可以让你编写在分析树上工作的脚本,这样你就可以轻松地做你想做的事情。 – ShreevatsaR 2010-04-23 21:51:57

+0

@ShreevatsaR我可能会在今年夏天尝试pandoc和multimarkdown。 – 2010-04-23 22:16:07

回答

57

您是否尝试过Pandoc

+0

另请参阅http://stackoverflow.com/questions/663532/lighweight-markup-wiki-language-for-documenting – 2010-03-31 12:11:31

+0

您也可以直接使用RMarkdown。 Pandoc使用它。 – felipecrp 2016-10-26 01:36:43

4

您可能会感兴趣mimeTeX有用。

+2

后继mathTeX看起来更好---很明显,'dvipng'是主力。感谢一个伟大的指针! +1 – 2010-02-03 01:58:35

+0

现在我会推荐KaTeX - 来自Khan Academy的性能最高的Javascript LaTeX库。 – duffymo 2015-02-05 23:22:06

+0

该链接已更改为:http://www.forkosh.com/mimetex.html – quine 2017-03-26 23:47:39

37

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

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

2

是的,但是你必须自己修改一下。我已经编写了一个过滤器,用适当的图像标签将$\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) 

当然,你得自己的CSS定义适合。块和.inline图像...

11

我会回答一个反问你的问题......

你认为组织模式的是什么?它不像Markdown那么纯净,但它是Markdown式的,我觉得它很容易处理,并且它允许嵌入Latex。参看http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

后记

如果你没有看过组织模式,它有一个强大的实力作为了降价通用“自然标记语言”,即其治疗表。来源:

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

代表正是你认为它会...

而且乳胶使用TEX-mode的预览乳胶在片呈现。

+0

我查看了org-mode,虽然嵌入的LaTeX看起来非常好,但它看起来像我想要的完全矫枉过正(典型的emacs的)。有趣的是,我注意到底层渲染引擎又是'dvipng'。表格问题很重要,但我已经编写了一个预处理程序来解决它:-) +1 – 2010-02-03 23:24:58

8

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

它有元数据(标题,关键字,日期,作者等),表格,asciimath支持,MathML和地狱我敢肯定,你可以坚持乳胶数学代码权那里。它基本上是markdown的扩展,可以添加所有这些其他非常有用的功能。它使用XSLT,因此您可以轻松创建自己的LaTeX样式,并直接转换。我一直都在使用它,而且我非常喜欢它。

我希望减价只会包含multimarkdown。这将是相当不错的。

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

+0

看起来比我想要的更复杂,并且它不太清楚表达能力是什么(除了MathML被引用引用0) 。 – 2010-02-03 23:28:48

1

有可能使用Lunamark代码来解析降价在Lua(参见其Github repo),这意味着标记符可以直接由宏在LuaTEX等程序的解析和支持转化成许多由Pandoc支持的格式(即,该库是非常适合在lualatex,context,Metafun,Plain Luatex和texlua脚本中使用)。

该项目由Pandoc的作者John MacFarlane开始,该工具的开发非常接近Pandoc,并具有相似(即极好)的质量。

Khaled Hosny写一个Context模块,提供方便的宏支持。 Michal's answer to the Is there any package with Markdown support? question提供了为Latex提供类似支持的代码。

1

你在用什么语言?

如果可以用红宝石,然后maruku可以被配置为处理使用各种的胶乳> MATHML变换器数学。 Instiki使用此。也可以扩展PHPMarkdown以使用itex2MML来转换数学。基本上,您可以在适当的位置在Markdown引擎中插入额外的步骤。

所以用ruby和PHP,这是完成的。我想这些解决方案也可以适应其他语言 - 我已经获得了itex2MML扩展来生成perl绑定。

1

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

有没有什么原因让你更喜欢图像?

+1

某些堆栈交换站点Math.Se,Physics.SE等*现在*使用MathJax,尽管管理的位置是MathJax太重,除非绝对必要,否则无法部署。但是这不适用于演示文稿,因为它需要作品在浏览器中运行。 – dmckee 2011-01-17 21:54:36

1

我在寻找完全一样的东西时,我发现teqhtml。它将$和$$公式转换为图像,并将结果图像与周围文本垂直对齐。不是很多文件,但它非常简单。

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

3

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

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

它增加了使用$ $数学和文字%语法%内嵌数学和文本表达式的支持。该扩展是一个预处理程序,它将使用latex/dvipng为各个公式/文本生成png,然后base64对数据进行编码以直接嵌入图像,而不是使用外部图像。

然后将数据放入一个简单分隔的缓存文件,该文件将表达式编码为base64表示形式。这限制了胶乳实际上必须运行的次数。

下面是一个例子:

%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 :)

1

对不起,唤醒了一个非常古老的线程,但我一直在使用jemdoc几年,它非常出色。

18

下面的代码添加到您的降价文件的顶部得到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 $`或`$$χ^ 2 $$'将呈现为预期:-)

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

UPDATE:这几天我只是用pandoc代替canonical markdown,但上面的方法仍然有用。

+0

来自未来的提示:cdn.mathjax.org即将到期,请检查https://www.mathjax.org/cdn-shutting-down以获取迁移提示(也许可以为将来的读者更新您的文章)。 – 2017-04-21 07:44:36

6

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

+0

但是,它是否让您将它们结合到同一文档/句子中,就像OP要求的那样? – matt 2012-11-29 02:26:28

+0

您可以在Markdown模式下嵌入Equasions。请参阅http://www.rstudio.com/ide/docs/authoring/using_markdown_equations – 2012-12-06 15:40:42

4

kramdown不正是你的描述:

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

而且它的方式更可靠,比降价明确。

+0

上的示例,目前看起来此页面处于关闭状态,但以下是根据wayback机器301重定向到的页面:kramdown .gettalong.org:80 / – Derwent 2017-07-30 01:25:17