Bagaimana saya bisa menggabungkan LaTeX dengan Markdown? [Tutup]

181

Saya telah menggunakan Markdown untuk catatan kelas, dan itu bagus. Saya bahkan melakukan beberapa preprocessing pada Markdown sehingga saya dapat melakukan hal-hal seperti tabel. Tapi istilah ini saya sedang mengajar kelas dengan banyak matematika, dan saya ingin dapat menempatkan formula LaTeX dengan Markdown, sesuatu seperti ini:

The refinement relation is written $a \sqsubseteq b$, which can be 
pronounced "$a$ approximates $b$" or "$b$ is at least as defined as $a$".

Saya ingin dapat mengambil setiap fragmen LaTeX dan memprosesnya menjadi file PNG antialiased yang bagus yang kemudian dapat saya sertakan dalam Markdown melalui <img>tag HTML . Tapi saya sama sekali tidak tahu bagaimana cara mengambil fragmen LaTeX dan mendapatkan gambar yang bagus

  • Memiliki kotak pembatas kanan
  • Antialiased

Yang saya tahu bagaimana melakukannya adalah mendapatkan halaman penuh dalam format DVI, PostScript, atau PDF.

Saya yakin masalah ini telah diatasi, tetapi saya belum dapat menebak istilah pencarian yang tepat. Adakah saran bagaimana mengatasinya atau ke mana harus mencari solusi yang ada?


EDIT : Setelah menginstal mathTeX, saya dapat mengatakan bahwa kodenya tidak fleksibel, bahwa ia melanggar standar Linux Filesystem Hierarchy, dan itu adalah pekerjaan amatir — baik dalam arti baik maupun buruk dari kata itu. Kode ini sangat kompleks sehingga tidak ada kesalahan yang jelas. Saya akan mencari alternatif.

Juga, jelas bahwa pada dasarnya, solusi didasarkan pada dvipng.


SATU TAHUN KEMUDIAN : Saya tidak pernah mendapatkan integrasi mulus seperti yang saya harapkan, tetapi saya tertatih-tatih mengikuti skrip yang saya buat sendiri. Ternyata alih-alih dvipngitu sedikit lebih mudah digunakan dvips -Edan convertprogram dari ImageMagick. Manfaatnya sedikit lebih mengontrol hal-hal seperti penskalaan, dan kemudahan membuat latar belakang yang transparan. Yang penasaran dapat memeriksa contoh ini .

Saya tidak bisa merekomendasikan solusi ini kepada siapa pun. Tapi saya juga tidak bisa merekomendasikan MathTeX.

Norman Ramsey
sumber
Pertanyaan yang bagus Saya sudah melakukan persiapan saya langsung di LaTeX, tetapi sedikit bertele-tele untuk tujuan itu, bahkan menggunakan auctex ...
dmckee --- ex-moderator kitten
6
Apakah Anda mencoba Pandoc? Tidak hanya itu sendiri mengkonversi Markdown + LaTeX ke (apa pun), tetapi juga, dengan rilis terbaru, itu memungkinkan Anda menulis skrip yang berfungsi pada pohon parse, sehingga Anda dapat dengan mudah melakukan apa yang Anda inginkan.
ShreevatsaR
@ ShreevatsaR Saya akan mencoba pandoc dan multimarkdown, mungkin musim panas ini.
Norman Ramsey
4
begitu rumit sehingga tidak ada kesalahan yang jelas - saya melewatkan referensi yang menyenangkan ini pertama kali saya membacanya.
Charles Stewart
6
Adakah yang bisa menjelaskan bagaimana pertanyaan ini di luar topik?
AnnanFay

Jawaban:

41

Mungkin mathJAX adalah tiketnya. Ini dibangun di jsMath , perpustakaan JavaScript vintage 2004.

Pada 5-Feb-2015 saya akan beralih untuk merekomendasikan KaTeX - kebanyakan perpustakaan Javascript LaTeX dari Khan Academy.

Duffymo
sumber
Terkait: stackoverflow.com/questions/11256433/... Saya juga mempertimbangkan sisi server Katex, misalnya dengan github.com/asciidoctor/asciidoctor/pull/3338
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
25

Tambahkan kode berikut ke bagian atas file penurunan harga Anda untuk mendapatkan dukungan render 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>

dan kemudian `$ x ^ 2 $` atau `$$ x ^ 2 $$` akan ditampilkan seperti yang diharapkan :-)

Anda selalu dapat menginstal versi lokal MathJax jika Anda tidak ingin menggunakan distribusi online, tetapi Anda mungkin perlu menghostingnya melalui server web lokal.

UPDATE : hari ini saya hanya menggunakan pandoc bukan markdown kanonik, tetapi di atas masih berguna.

fommil
sumber
Catatan dari masa depan: cdn.mathjax.org hampir berakhir, periksa mathjax.org/cdn-shutting-down untuk tip migrasi (dan mungkin perbarui posting Anda untuk pembaca masa depan).
Peter Krautzberger
12

Saya akan menjawab pertanyaan Anda dengan pertanyaan balasan ...

Apa pendapat Anda tentang mode-Org? Ini tidak semurni Markdown, tetapi seperti Markdown, dan saya merasa mudah untuk bekerja dengannya, dan memungkinkan penanaman Lateks. Lih http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Nota bene

Jika Anda belum melihat mode-org, ia memiliki satu kekuatan besar sebagai tujuan umum "bahasa markup alami" dibandingkan Markdown, yaitu perlakuannya terhadap tabel. Sumber:

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

mewakili apa yang Anda pikir akan ...

Dan Lateks dirender menjadi potongan menggunakan preview-mode tex-mode lateks.

Charles Stewart
sumber
1
Saya melihat mode-org, dan meskipun LaTeX yang disematkan tampaknya dilakukan dengan sangat baik, sepertinya total berlebihan untuk apa yang saya inginkan (khas emacs). Menariknya, saya perhatikan bahwa mesin rendering yang mendasarinya lagi dvipng. Masalah tabel adalah yang penting tapi saya sudah menulis preprocessor untuk menyelesaikannya :-) +1
Norman Ramsey
8

Anda harus melihat multimarkdown http://fletcherpenney.net/multimarkdown/

ini memiliki dukungan untuk metadata (header, kata kunci, tanggal, penulis, dll), tabel, asciimath, mathml, neraka saya yakin Anda dapat menempelkan kode lateks matematika tepat di sana. itu pada dasarnya merupakan ekstensi untuk penurunan harga untuk menambahkan semua fitur yang sangat berguna lainnya Ini menggunakan XSLT, sehingga Anda dapat dengan mudah menyiapkan gaya LaTeX Anda sendiri, dan memilikinya langsung dikonversi. Saya menggunakannya sepanjang waktu, dan saya sangat menyukainya.

Saya berharap penurunan harga hanya akan menggabungkan multimarkdown. itu akan lebih baik.

Sunting : Multimarkdown akan menghasilkan html, lateks, dan beberapa format lainnya. html dapat hadir dengan style sheet pilihan Anda. itu akan dikonversi menjadi MathML juga, yang ditampilkan di Firefox dan Safari / Chrome, jika saya ingat dengan benar.

Mika
sumber
Terlihat lebih rumit daripada yang saya inginkan, dan kurang jelas apa kekuatan ekspresifnya (selain MathML digabungkan dengan reference0).
Norman Ramsey
6

RStudio memiliki IDE gratis yang bagus yang memungkinkan untuk Markdown dan LaTeX.

rsacc
sumber
Tapi apakah itu membiarkan Anda menggabungkannya dalam dokumen / kalimat yang sama, seperti yang diminta OP?
matt
Anda dapat menyematkan persamaan dalam mode penurunan harga. Lihat contoh di rstudio.com/ide/docs/authoring/using_markdown_equations
Roman Luštrik
6

kramdown melakukan persis seperti yang Anda gambarkan:

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

Dan itu jauh lebih dapat diandalkan dan didefinisikan dengan baik daripada penurunan harga.

matt
sumber
sepertinya halaman ini sedang down saat ini, tetapi di sini adalah halaman yang digunakannya untuk redirect sesuai dengan mesin wayback: kramdown.gettalong.org:80/
Derwent
5

Anda mungkin menemukan mimeTeX berguna.

Ignacio Vazquez-Abrams
sumber
2
MathTeX penggantinya bahkan terlihat lebih baik --- dan jelas itu dvipngadalah pekerjaan kerasnya. Terima kasih atas penunjuk yang bagus! +1
Norman Ramsey
1
Sekarang saya akan merekomendasikan KaTeX - kebanyakan perpustakaan Javascript LaTeX dari Khan Academy.
duffymo
Tautan diubah menjadi: forkosh.com/mimetex.html
quine
3

Hei, ini mungkin bukan solusi yang paling ideal, tetapi itu bekerja untuk saya. Saya akhirnya membuat ekstensi Python-Markdown LaTeX.

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

Itu menambahkan dukungan untuk inline matematika dan ekspresi teks menggunakan sintaksis $ matematika $ dan% teks%. Ekstensi adalah preprosesor yang akan menggunakan lateks / dvipng untuk menghasilkan pngs untuk masing-masing persamaan / teks dan kemudian base64 menyandikan data untuk inline gambar secara langsung, daripada memiliki gambar eksternal.

Data tersebut kemudian dimasukkan ke dalam file cache sederhana-terbatas yang menyandikan ekspresi ke representasi base64. Ini membatasi berapa kali lateks sebenarnya harus dijalankan.

Berikut ini sebuah contoh:

%Hello, world!% This is regular text, but this: $y = mx + b$ is not.

Hasil:

$ 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>

Seperti yang Anda lihat itu adalah keluaran verbose, tapi itu sebenarnya bukan masalah karena Anda sudah menggunakan penurunan harga :)

Justin Van Horne
sumber
2

ya, tetapi Anda harus sedikit meretasnya sendiri. Saya telah menulis filter yang menggantikan tag lateks $\some\inline\latex$atau $$\some\equation$$dengan tag gambar yang sesuai ke skrip mimetex.cgi . Butuh semua 5 menit.

Peringatan: sangat jelek ...

#!/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)

Tentu saja, Anda harus menentukan sendiri css yang sesuai untuk gambar .block dan .inline ...

brice
sumber
2

Saya baru saja menemukan diskusi ini, jadi saya harap komentar saya masih berguna. Saya terlibat dengan MathJax dan, dari cara saya memahami situasi Anda, saya pikir itu akan menjadi cara yang baik untuk menyelesaikan masalah: Anda membiarkan kode LaTeX Anda apa adanya, dan membiarkan MathJax membuat matematika setelah melihatnya.

Apakah ada alasan mengapa Anda lebih suka gambar?

Hylke Koers
sumber
1
Situs-situs Stack Exchange tertentu Math.Se, Physics.SE, dll ... lakukan gunakan MathJax sekarang, meskipun posisi manajemen adalah bahwa MathJax terlalu berat untuk digunakan kecuali jika benar-benar diperlukan. Tapi itu tidak berlaku untuk presentasi karena membutuhkan karya untuk dijalankan di browser.
dmckee --- ex-moderator kitten
1

Bahasa apa yang Anda gunakan?

Jika Anda dapat menggunakan ruby, maka maruku dapat dikonfigurasikan untuk memproses matematika menggunakan berbagai lateks-> Konverter MathML. Instiki menggunakan ini. Dimungkinkan juga untuk memperluas PHPMarkdown untuk menggunakan itex2MML juga untuk mengonversi matematika. Pada dasarnya, Anda memasukkan langkah-langkah tambahan di mesin Penurunan harga pada titik yang sesuai.

Jadi dengan ruby ​​dan PHP, ini dilakukan. Saya kira solusi ini juga dapat disesuaikan dengan bahasa lain - Saya telah mendapatkan ekstensi itex2MML untuk menghasilkan perl binding juga.

Andrew Stacey
sumber
1

Saya mencari hal yang persis sama ketika saya menemukan teqhtml . Itu konversi $ dan $$ persamaan untuk gambar dengan bonus bagus menyelaraskan gambar yang dihasilkan secara vertikal dengan teks sekitarnya. Tidak banyak dokumen tetapi cukup mudah.

Semoga ini membantu beberapa pembaca di masa depan.

John
sumber
1

Maaf telah membangunkan utas yang sangat lama, tetapi saya telah menggunakan jemdoc selama beberapa tahun dan ini sangat bagus.

traviscj
sumber
1

Dimungkinkan untuk mengurai Markdown di Lua menggunakan kode Lunamark (lihat repo Github -nya ), yang berarti bahwa Markdown dapat diuraikan langsung oleh makro di Luatex dan mendukung konversi ke banyak format yang didukung oleh Pandoc (yaitu, perpustakaan sangat cocok untuk digunakan dalam lualatex,, contextMetafun, Plain Luatex, dan texluaskrip).

Proyek ini dimulai oleh John MacFarlane , penulis Pandoc, dan pengembangan alat ini melacak Pandoc dengan sangat dekat dan memiliki kualitas yang sama (yaitu sangat baik).

Khaled Hosny menulis modul Konteks, memberikan dukungan makro yang nyaman. Jawaban Michal untuk Apakah ada paket dengan dukungan Markdown? pertanyaan memberikan kode yang menyediakan dukungan serupa untuk Lateks.

Charles Stewart
sumber