2010-02-03 101 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