首页 文章

如何将LaTeX与Markdown混合使用? [关闭]

提问于
浏览
154

我一直在使用Markdown作为课堂笔记,这很棒 . 我甚至在Markdown上做了一些预处理,所以我可以做像 table 这样的事情 . 但是这个学期我正在教一个有很多数学课的课程,我很乐意将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片段并获得一个漂亮的图像

  • 有正确的边界框

  • 是抗锯齿的

我所知道的是如何获得DVI,PostScript或PDF格式的完整页面 .

我确信这个问题已得到解决,但我无法猜出正确的搜索条件 . 有任何建议如何解决或在哪里寻找现有的解决方案?


EDIT :安装了mathTeX之后,我可以说代码是不灵活的,它违反了Linux文件系统层次结构标准,并且它是业余工作 - 无论是好词还是坏词 . 代码非常复杂,没有明显的错误 . 我会寻找替代品 .

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


ONE YEAR LATER :我从来没有得到过我一直希望的无缝集成,但是我正在按照自己设计的脚本一瘸一拐 . 事实证明,使用 dvips -E 和ImageMagick的 convert 程序更容易,而不是 dvipng . 这样做的好处是可以稍微控制缩放等内容,并且可以轻松实现透明背景 . 好奇的人可以检查this example .

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

15 回答

  • 3

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

  • 1

    我现在才想到这个讨论,所以我希望我的评论仍然有用 . 我参与了MathJax,从我如何理解你的情况来看,我认为这将是一个解决问题的好方法:你将LaTeX代码保留原样,让MathJax在查看时渲染数学 .

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

  • 8

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

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

    它使用$ math $和%text%语法添加对内联数学和文本表达式的支持 . 扩展是一个预处理器,它将使用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了:)

  • 2

    您可能会发现mimeTeX很有用 .

  • 6

    当我找到teqhtml时,我正在寻找完全相同的东西 . 它将$和$$方程式转换为图像,并将生成的图像与周围文本垂直对齐 . 不是很多文档,但它非常简单 .

    希望它能帮助一些未来的读者 .

  • 11

    也许mathJAX是票 . 它 Build 在jsMath上,这是一个2004年的老式JavaScript库 .

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

  • 4

    kramdown正是你所描述的:

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

    它比Markdown更可靠,定义更明确 .

  • 1

    可以使用Lunamark代码解析Lua中的Markdown(参见其Github repo),这意味着Markdown可以直接由Luatex中的宏解析,并支持转换为Pandoc支持的许多格式(即,该库非常适合于在 lualatexcontext ,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

    是的,但你'll have to hack it a little yourself. I'已经编写了一个过滤器,用适当的图像标签替换乳胶标签 $\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 ...

  • 5

    将以下代码添加到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="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS_HTML-full"></script>
    

    然后$ x ^ 2 $$$ x ^ 2 $$将按预期呈现:-)

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

    UPDATE :这些我只使用pandoc而不是规范降价,但上述内容仍然有用 .

  • 19

    很抱歉找到一个非常老的线程,但我已经使用了jemdoc几年,它真的很棒 .

  • 38

    你试过Pandoc吗?

  • 2

    我会用反问题回答你的问题......

    您如何看待Org-mode?它不像Markdown那样纯净,但它与Markdown一样,我发现它很容易使用,它允许嵌入Latex . 参看http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

    Postscript

    如果你没有看过org-mode,它有一个强大的力量作为Markdown的通用“自然标记语言”,即它对表格的处理 . 来源:

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

    代表你认为它会...

    而Latex则使用tex-mode的preview-latex进行渲染 .

  • 1

    你用的是什么语言?

    如果你可以使用ruby,那么maruku可以配置为使用各种latex-> MathML转换器处理数学 . Instiki使用这个 . 也可以扩展PHPMarkdown以使用itex2MML来转换数学 . 基本上,您在适当的位置在Markdown引擎中插入额外的步骤 .

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

  • 61

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

    它支持元数据( Headers ,关键字,日期,作者等),表格,asciimath,mathml,我敢肯定你可以在那里粘贴乳胶数学代码 . 它基本上是降价的扩展,以添加所有这些其他非常有用的功能 . 它使用XSLT,因此您可以轻松地制作自己的LaTeX样式,并直接进行转换 . 我一直都在使用它,我非常喜欢它 .

    我希望降价只会包含多标记 . 这会很不错 .

    Edit :Multimarkdown将生成html,latex和其他一些格式 . html可以附带您选择的样式表 . 如果我没记错的话,它也将转换为MathML,显示在Firefox和Safari / Chrome中 .

相关问题