ฉันจะผสม LaTeX เข้ากับ Markdown ได้อย่างไร [ปิด]


181

ฉันใช้ Markdown สำหรับบันทึกในชั้นเรียนแล้วมันเยี่ยมมาก ฉันยังทำ preprocessing ใน Markdown เพื่อให้ฉันสามารถทำสิ่งต่าง ๆ เช่นตาราง แต่เทอมนี้ฉันกำลังสอนวิชาคณิตศาสตร์จำนวนมากและฉันชอบที่จะใส่สูตร 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 ที่มีการลบล้างอย่างดีซึ่งฉันสามารถรวมไว้ใน Markdown ของฉันผ่าน<img>แท็กHTML แต่ฉันไม่รู้จริง ๆ ว่าจะใช้น้ำยาง LaTeX อย่างไรและได้ภาพลักษณ์ที่ดี

  • มีกรอบด้านขวา
  • ถูกลดรอยหยัก

ทั้งหมดที่ฉันรู้วิธีการทำคือรับหน้าเต็มในรูปแบบ DVI, PostScript หรือ PDF

ฉันแน่ใจว่าปัญหานี้ได้รับการแก้ไขแล้ว แต่ฉันไม่สามารถคาดเดาคำค้นหาที่ถูกต้องได้ ข้อเสนอแนะวิธีการแก้ปัญหาหรือที่จะมองหาทางออกที่มีอยู่?


แก้ไข : มีการติดตั้ง mathTeX ฉันสามารถพูดได้ว่ารหัสนั้นยืดหยุ่นได้ซึ่งเป็นการละเมิดมาตรฐานลำดับขั้นของระบบแฟ้ม Linux และเป็นงานสมัครเล่น - ทั้งความรู้สึกดีและไม่ดีของคำนั้น รหัสมีความซับซ้อนจนไม่มีข้อบกพร่องที่เห็นได้ชัด ฉันจะมองหาทางเลือกอื่น

dvipngนอกจากนี้ก็เป็นที่ชัดเจนว่าที่ด้านล่างแก้ปัญหาจะขึ้นอยู่กับ


หนึ่งปีต่อมา : ฉันไม่เคยได้รับการบูรณาการที่ไร้รอยต่อที่ฉันหวังไว้ แต่ฉันก็กระโจนเข้าใส่บทบทของฉันเอง ปรากฎว่าแทนที่จะdvipngใช้งานได้ง่ายกว่าเล็กน้อยdvips -Eและconvertโปรแกรมของ ImageMagick ข้อดีคือการควบคุมสิ่งต่าง ๆ เช่นการปรับขนาดและความง่ายในการสร้างพื้นหลังที่โปร่งใส อยากรู้อยากเห็นสามารถตรวจสอบตัวอย่างนี้

ฉันไม่สามารถแนะนำวิธีแก้ปัญหานี้ให้กับทุกคน แต่ฉันก็ไม่สามารถแนะนำ MathTeX ได้เช่นกัน


คำถามที่ดี ฉันได้เตรียมการของฉันโดยตรงใน LaTeX แต่มันเป็นคำพูดเล็ก ๆ น้อย ๆ สำหรับวัตถุประสงค์นั้นแม้ใช้ auctex ...
--- อดีตผู้ดูแลลูกแมว

6
คุณลอง Pandoc หรือไม่? ไม่เพียง แต่จะแปลง Markdown + LaTeX เป็น (อะไรก็ตาม) แต่ยังมีรีลีสล่าสุดซึ่งช่วยให้คุณเขียนสคริปต์ที่ทำงานบนแผนผังการแยกวิเคราะห์เพื่อให้คุณสามารถทำสิ่งที่คุณต้องการได้อย่างง่ายดาย
ShreevatsaR

@ShreevatsaR ฉันจะลองทั้ง pandoc และ multimarkdown น่าจะเป็นช่วงฤดูร้อนนี้
นอร์แมนแรมซีย์

4
ซับซ้อนมากจนไม่มีข้อบกพร่องที่เห็นได้ชัด - ฉันพลาดการอ้างอิงที่น่าพอใจนี้เป็นครั้งแรกที่ฉันอ่าน
Charles Stewart

6
บางคนสามารถอธิบายได้ว่าคำถามนี้เป็นอย่างไร
AnnanFay

คำตอบ:



41

บางทีmathJAXคือตั๋ว มันสร้างขึ้นบนjsMathซึ่งเป็นห้องสมุด JavaScript โบราณปี 2004

ตั้งแต่วันที่ 5 ก.พ. 2558 ฉันจะเปลี่ยนมาแนะนำKaTeXซึ่งเป็นห้องสมุด Javascript LaTeX ที่มีประสิทธิภาพมากที่สุดจาก Khan Academy


ที่เกี่ยวข้อง: stackoverflow.com/questions/11256433/ …ฉันกำลังพิจารณาฝั่งเซิร์ฟเวอร์ Katex เช่นกับgithub.com/asciidoctor/asciidoctor/pull/3338
Ciro Santilli 郝海东冠状病六四事件法轮功

25

เพิ่มรหัสต่อไปนี้ที่ด้านบนของไฟล์ 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 รุ่นในเครื่องได้ตลอดเวลาหากคุณไม่ต้องการใช้การกระจายออนไลน์ แต่คุณอาจต้องโฮสต์มันผ่านเว็บเซิร์ฟเวอร์ท้องถิ่น

อัปเดต : ทุกวันนี้ฉันเพิ่งใช้แพนโดกแทนที่จะเป็นเครื่องหมายมาตรฐาน แต่สิ่งที่กล่าวมาข้างต้นยังคงมีประโยชน์


หมายเหตุจากอนาคต: cdn.mathjax.org ใกล้จะสิ้นสุดการตรวจสอบmathjax.org/cdn-shutting-downสำหรับเคล็ดลับการย้ายข้อมูล (และอาจอัปเดตโพสต์ของคุณสำหรับผู้อ่านในอนาคต)
ปีเตอร์ Krautzberger

12

ฉันจะตอบคำถามของคุณด้วยคำถามตอบโต้ ...

คุณคิดอย่างไรกับ Org-mode มันไม่ได้บริสุทธิ์เหมือนมาร์กดาวน์ แต่มันก็เหมือนมาร์กดาวน์และฉันคิดว่ามันง่ายที่จะทำงานด้วยและมันช่วยให้การฝังยางพารา cf เลย http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

ป.ล.

ในกรณีที่คุณยังไม่ได้ดูโหมด org ก็มีจุดแข็งที่ดีอย่างหนึ่งสำหรับวัตถุประสงค์ทั่วไป "ภาษามาร์กอัปธรรมชาติ" เหนือ Markdown นั่นคือการรักษาตาราง แหล่งที่มา:

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

แสดงให้เห็นถึงสิ่งที่คุณคิดว่ามันจะ ...

และลาเท็กซ์นั้นจะถูกเรนเดอร์เป็นชิ้นโดยใช้โหมดดูตัวอย่างของเท็กซ์โหมด


1
ฉันดูที่โหมดองค์กรและถึงแม้ว่า LaTeX แบบฝังจะทำได้ดีมาก แต่ดูเหมือนว่าเกินความเป็นจริงสำหรับสิ่งที่ฉันต้องการ (โดยทั่วไปคือ emacs) dvipngที่น่าสนใจผมทราบว่าเครื่องมือแสดงผลอ้างอิงคืออีกครั้ง ปัญหาของตารางเป็นสิ่งสำคัญ แต่ฉันได้เขียน preprocessor เพื่อแก้ปัญหาแล้ว :-) +1
Norman Ramsey

8

คุณควรดูที่ multimarkdown http://fletcherpenney.net/multimarkdown/

มันมีการรองรับข้อมูลเมตา (ส่วนหัวคำหลักวันที่ผู้เขียน ฯลฯ ) ตาราง asciimath, mathml, นรกฉันแน่ใจว่าคุณสามารถใส่รหัสคณิตศาสตร์ยางในนั้นได้ มันเป็นส่วนขยายของ markdown เพื่อเพิ่มคุณสมบัติที่มีประโยชน์อื่น ๆ มันใช้ XSLT เพื่อให้คุณสามารถตีสไตล์ LaTeX ของคุณได้อย่างง่ายดายและแปลงเป็นไฟล์โดยตรง ฉันใช้มันตลอดเวลาและฉันชอบมันมาก

ฉันหวังว่า markdown จะรวม multimarkdown มันจะค่อนข้างดี

แก้ไข : Multimarkdown จะสร้าง html, latex และรูปแบบอื่น ๆ html สามารถมาพร้อมกับสไตล์ชีทที่คุณเลือก มันจะแปลงเป็น MathML เช่นกันซึ่งแสดงใน Firefox และ Safari / Chrome ถ้าฉันจำได้อย่างถูกต้อง


ดูซับซ้อนกว่าที่ฉันต้องการและมันก็น้อยกว่าที่ชัดเจนว่าพลังการแสดงออกคืออะไร (นอกเหนือจาก MathML ถูกรวมเข้าด้วยกันโดยการอ้างอิง 0)
นอร์แมนแรมซีย์

6

RStudioมี IDE ฟรีที่ดีสำหรับ Markdown และ LaTeX


แต่มันช่วยให้คุณรวมพวกเขาในเอกสาร / ประโยคเดียวกันได้หรือไม่ในขณะที่ OP กำลังขอให้ทำ?
Matt

คุณสามารถฝัง equasions ในโหมด markdown ดูตัวอย่างได้ที่rstudio.com/ide/docs/authoring/using_markdown_equations
Roman Luštrik

6

kramdown ทำสิ่งที่คุณอธิบาย:

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

และเป็นวิธีที่น่าเชื่อถือและชัดเจนกว่ามาร์กดาวน์


ดูเหมือนว่าหน้านี้ลงในขณะนี้ แต่นี่คือหน้าเว็บที่ใช้ในการเปลี่ยนเส้นทาง 301 ไปตามเครื่อง wayback: kramdown.gettalong.org:80/
Derwent

5

คุณอาจพบว่าmimeTeXมีประโยชน์


2
ตัวตายตัวแทน mathTeX ดูดียิ่งขึ้น --- และเป็นที่ชัดเจนว่าdvipngเป็นสิ่งที่ต้องใช้ ขอบคุณสำหรับตัวชี้ที่ยอดเยี่ยม! +1
นอร์แมนแรมซีย์

1
ตอนนี้ฉันขอแนะนำ KaTeX - ห้องสมุดจาวาสคริปต์ LaTeX ที่มีประสิทธิภาพมากที่สุดจาก Khan Academy
duffymo

การเชื่อมโยงก็เปลี่ยนไป: forkosh.com/mimetex.html
ควิน

3

เฮ้นี่อาจไม่ใช่ทางออกที่ดีที่สุด แต่ใช้ได้สำหรับฉัน ฉันสิ้นสุดการสร้างส่วนขยาย Python-Markdown LaTeX

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

มันเพิ่มการสนับสนุนสำหรับคณิตศาสตร์แบบอินไลน์และการแสดงออกของข้อความโดยใช้ $ math $ และ% text% ไวยากรณ์ ส่วนขยายเป็นตัวประมวลผลล่วงหน้าที่จะใช้ latex / dvipng เพื่อสร้าง pngs สำหรับสมการ / ข้อความที่เกี่ยวข้องและจากนั้น 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>

อย่างที่คุณเห็นมันเป็นเอาต์พุตแบบ verbose แต่นั่นไม่ใช่ปัญหาจริง ๆ เพราะคุณใช้ Markdown อยู่แล้ว :)


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 ที่เหมาะสมด้วยตัวคุณเองสำหรับ. block และ. inline images ...


2

ฉันเจอการสนทนานี้แล้วตอนนี้ดังนั้นฉันหวังว่าความคิดเห็นของฉันจะยังคงมีประโยชน์ ฉันเกี่ยวข้องกับ MathJax และจากวิธีที่ฉันเข้าใจสถานการณ์ของคุณฉันคิดว่ามันจะเป็นวิธีที่ดีในการแก้ปัญหา: คุณปล่อยให้รหัส LaTeX ของคุณเป็นอย่างนั้นและให้ MathJax แสดงคณิตศาสตร์เมื่อดู

มีเหตุผลใดที่คุณต้องการภาพ


1
บางไซต์ Stack Exchange Math.Se, Physics.SE และอื่น ๆอย่าใช้ MathJax ในขณะนี้แม้ว่าตำแหน่งของการจัดการคือ MathJax นั้นหนักเกินกว่าจะใช้งานได้เว้นแต่ที่จำเป็นจริงๆ แต่นั่นไม่ได้ใช้กับงานนำเสนอเนื่องจากต้องใช้งานเพื่อทำงานในเบราว์เซอร์
dmckee --- ผู้ดูแลอดีตลูกแมว

1

คุณใช้ภาษาอะไร

หากคุณสามารถใช้ ruby ​​ได้คุณสามารถกำหนดค่าmarukuเพื่อประมวลผลทางคณิตศาสตร์โดยใช้ตัวแปลง latex-> MathML Instikiใช้สิ่งนี้ นอกจากนี้ยังเป็นไปได้ที่จะขยาย PHPMarkdown เพื่อใช้ itex2MML เช่นกันในการแปลงคณิตศาสตร์ โดยทั่วไปคุณแทรกขั้นตอนพิเศษในเอ็นจิ้น Markdown ที่จุดที่เหมาะสม

ดังนั้นด้วยทับทิมและ PHP สิ่งนี้ก็เสร็จสิ้น ฉันเดาว่าโซลูชันเหล่านี้สามารถปรับใช้กับภาษาอื่นได้ด้วย - ฉันได้รับส่วนขยาย itex2MML เพื่อสร้างการเชื่อมโยงภาษาด้วยเช่นกัน


1

ผมกำลังมองหาสิ่งเดียวกันเมื่อผมพบว่าteqhtml มันทำการแปลงสมการ $ และ $$ เป็นภาพด้วยโบนัสที่ดีของการจัดแนวภาพที่ได้ตามแนวตั้งกับข้อความที่อยู่รอบ ๆ เอกสารไม่มากนัก แต่ค่อนข้างตรงไปตรงมา

หวังว่ามันจะช่วยให้ผู้อ่านบางคนในอนาคต


1

ขออภัยในการปลุกด้ายเก่าจริง ๆ แต่ฉันใช้jemdocสองสามปีและมันยอดเยี่ยมจริง ๆ


1

มีความเป็นไปได้ที่จะแยกวิเคราะห์ Markdown ใน Lua โดยใช้รหัส Lunamark (ดูGithub repo ) ซึ่งหมายความว่า Markdown อาจถูกแยกวิเคราะห์โดยตรงโดยมาโครใน Luatex และรองรับการแปลงเป็นหลายรูปแบบที่รองรับโดย Pandoc (เช่นห้องสมุดนั้นเหมาะสมอย่างยิ่ง เพื่อใช้ในlualatex,, contextMetafun, Plain Luatex และtexluaสคริปต์)

โครงการเริ่มต้นโดยJohn MacFarlaneผู้เขียน Pandoc และการพัฒนาเครื่องมือติดตามว่า Pandoc ค่อนข้างใกล้ชิดและมีคุณภาพใกล้เคียงกัน (กล่าวคือยอดเยี่ยม)

Khaled Hosnyเขียนโมดูลบริบทให้การสนับสนุนแมโครที่สะดวก คำตอบของ Michal ต่อแพคเกจใด ๆ ที่มี Markdown รองรับหรือไม่ คำถามให้รหัสที่ให้การสนับสนุนที่คล้ายกันสำหรับลาเท็กซ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.