Markdown ile LaTeX'i nasıl karıştırabilirim? [kapalı]


181

Markdown'u ders notları için kullanıyorum ve harika. Hatta Markdown üzerinde bazı önişleme yapmak böylece tablo gibi şeyler yapabilirsiniz. Ama bu terim çok fazla matematik dersi veriyorum ve LaTeX formüllerini Markdown'a ekleyebilmeyi çok isterim:

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'in her parçasını alıp HTML <img>etiketiyle Markdown'uma ekleyebileceğim hoş bir antialiased PNG dosyasına önceden işleyebilmek istiyorum . Ama LaTeX'in bir parçasını nasıl alacağımı ve

  • Doğru sınırlayıcı kutuya sahiptir
  • Kenar yumuşatma uygulandı

Tüm yapmamı bildiğim tek şey, DVI, PostScript veya PDF formatlarında tam sayfalar almak.

Eminim bu sorun giderildi, ancak doğru arama terimlerini tahmin edemedim. Herhangi bir öneri veya mevcut bir çözümü nerede arayacağınız konusunda herhangi bir öneriniz var mı?


EDIT : mathTeX yükledikten sonra kodun esnek olmadığını, Linux Dosya Sistemi Hiyerarşi standardını ihlal ettiğini ve amatör bir iş olduğunu söyleyebilirim - bu kelimenin hem iyi hem de kötü duyularında. Kod o kadar karmaşıktır ki, belirgin hatalar yoktur. Alternatifler arayacağım.

Ayrıca, altta çözümlerin dayandığı açıktır dvipng.


BİR YIL SONRA : Asla umduğum kusursuz entegrasyonu alamadım, ama kendi tasarladığım bir senaryo üzerinde toplanıyorum. Bunun yerine dvipngkullanımı dvips -Eve convertImageMagick programının biraz daha kolay olduğu ortaya çıkıyor . Faydaları, ölçekleme ve şeffaf bir arka plan oluşturma kolaylığı gibi şeylerin biraz daha kontrolüdür. Meraklı bu örneği inceleyebilir .

Bu çözümü kimseye tavsiye edemem. Ama MathTeX'i de tavsiye edemem.


Güzel sorular. Hazırlığımı doğrudan LaTeX'te yaptım, ancak bu amaç için biraz alay, hatta auctex kullanıyor ...
dmckee --- eski moderatör yavru kedi

6
Pandoc'u denedin mi? Sadece Markdown + LaTeX'i (ne olursa olsun) dönüştürmekle kalmaz, aynı zamanda en son sürümü ile ayrıştırma ağacı üzerinde çalışan komut dosyaları yazmanıza izin verir, böylece istediğinizi kolayca yapabilirsiniz.
ShreevatsaR

@ShreevatsaR Muhtemelen bu yaz hem pandoc hem de multimarkdown'u deneyeceğim.
Norman Ramsey

4
o kadar karmaşık ki belirgin bir hata yok - ilk defa okuduğumda bu hoş referansı kaçırdım.
Charles Stewart

6
Birisi bu sorunun konu dışı olduğunu açıklayabilir mi?
AnnanFay

Yanıtlar:




25

MathJax görüntü oluşturma desteği almak için Markdown dosyalarınızın üstüne aşağıdaki kodu ekleyin

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

ve sonra "$ x ^ 2 $" veya "$$ x ^ 2 $$" beklendiği gibi görüntülenecektir :-)

Çevrimiçi dağıtımı kullanmak istemiyorsanız, her zaman MathJax'ın yerel bir sürümünü yükleyebilirsiniz, ancak yerel bir web sunucusu üzerinden barındırmanız gerekebilir.

GÜNCELLEME : Bu günlerde kanonik işaretleme yerine sadece pandoc kullanıyorum, ancak yukarıdakiler hala faydalı.


Gelecekten not: cdn.mathjax.org kullanım ömrünün sonuna yaklaşıyor, geçiş ipuçları için mathjax.org/cdn-shutting-down adresini kontrol edin (ve belki de yazılarınızı gelecekteki okuyucular için güncelleyin).
Peter Krautzberger

12

Soruna karşı bir soru ile cevap vereceğim ...

Kuruluş kipi hakkında ne düşünüyorsun? Markdown kadar saf değil, ancak Markdown benzeri ve birlikte çalışmayı kolay buluyorum ve Lateks'in gömülmesine izin veriyor. Krş http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

dipnot

Kuruluş moduna bakmadıysanız, Markdown üzerinde genel bir amaç olan "doğal biçimlendirme dili" olarak büyük bir gücü vardır, yani tabloların tedavisi. Kaynak:

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

sadece düşündüğünüzü temsil eder ...

Lateks, tex-mode'un önizleme lateksini kullanarak parçalara ayrılır.


1
Org moduna baktım ve gömülü LaTeX çok iyi yapılmış gibi görünse de, istediğim şey için tam bir overkill gibi görünüyor (emacs tipik). İlginç bir şekilde, altta yatan oluşturma motorunun tekrar olduğunu not ediyorum dvipng. Masa problemi önemli ama bunu çözmek için bir önişlemci yazdım :-) +1
Norman Ramsey

8

multimarkdown'a bakmalısın http://fletcherpenney.net/multimarkdown/

meta veriler (başlıklar, anahtar kelimeler, tarih, yazar, vb.), Tablolar, asciimath, mathml, cehennem için destek var. temelde tüm bu çok kullanışlı özellikleri eklemek için markdown'un bir uzantısıdır. XSLT kullanır, böylece kendi LaTeX stillerinizi kolayca kamçılayabilir ve doğrudan dönüştürebilirsiniz. Her zaman kullanıyorum ve çok beğendim.

Keşke markdown sadece multimarkdown içerir. oldukça iyi olurdu.

Düzenleme : Multimarkdown html, lateks ve diğer birkaç format üretecektir. html, seçtiğiniz bir stil sayfasıyla birlikte gelebilir. doğru hatırlarsam Firefox ve Safari / Chrome'da görüntülenen MathML'ye de dönüşür.


İstediğimden daha karmaşık görünüyor ve etkileyici gücün ne olduğu net değil (MathML, reference0 tarafından dahil edilmiştir).
Norman Ramsey




3

Hey, bu en ideal çözüm olmayabilir, ama benim için işe yarıyor. Bir Python-Markdown LaTeX uzantısı oluşturdum.

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

$ Math $ ve% text% sözdizimi kullanarak satır içi matematik ve metin ifadeleri için destek ekler. Uzantı, ilgili denklemler / metin için png oluşturmak üzere lateks / dvipng kullanacak ve sonra base64, harici görüntüler yerine görüntüleri doğrudan satır içine almak için verileri kodlayacak bir ön işlemcidir.

Veriler daha sonra ifadeyi base64 temsiline kodlayan basit bir sınırlandırılmış önbellek dosyasına yerleştirilir. Bu, lateksin gerçekte kaç kez çalıştırılması gerektiğini sınırlar.

İşte bir örnek:

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

Çıktı:

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

Gördüğünüz gibi ayrıntılı bir çıktı, ancak Markdown'u kullandığınız için bu gerçekten bir sorun değil :)


2

evet, ama biraz kendiniz kesmek zorunda kalacaksınız. Bir mimetex.cgi komut dosyasına lateks etiketlerini $\some\inline\latex$veya $$\some\equation$$uygun resim etiketlerini değiştiren bir filtre yazdım . Tüm 5 dakika sürdü.

Uyarı: muhteşem çirkin ...

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

Tabii ki, .block ve .inline görüntüler için kendinize uygun css tanımlamanız gerekir ...


2

Bu tartışmaya sadece şimdi rastladım, umarım yorumum hala yararlıdır. MathJax ile ilgiliyim ve durumunuzu nasıl anladığımdan, sorunu çözmenin iyi bir yolu olacağını düşünüyorum: LaTeX kodunuzu olduğu gibi bırakın ve MathJax'ın matematiği görüntüleme üzerine oluşturmasına izin verin.

Görüntüleri tercih etmenizin bir nedeni var mı?


1
Bazı Stack Exchange siteleri Math.Se, Physics.SE, vb ... do yönetiminin pozisyonu MathJax nerede mutlaka gerekli haricinde dağıtılan edilemeyecek kadar ağır olmasıdır olsa şimdi MathJax kullanın. Ancak bu, çalışmaların bir tarayıcıda çalışmasını gerektirdiği için sunumlar için geçerli değildir.
dmckee --- eski moderatör yavru kedi

1

Hangi dili kullanıyorsun

Ruby'yi kullanabiliyorsanız, maruku çeşitli lateks-> MathML dönüştürücülerini kullanarak matematik işlemek üzere yapılandırılabilir. Instiki kullanıyor. PHPMarkdown'u matematik dönüştürmek için itex2MML kullanacak şekilde genişletmek de mümkündür. Temel olarak, Markdown motoruna uygun noktalarda ilave adımlar eklersiniz.

Yani yakut ve PHP ile bu yapılır. Sanırım bu çözümler diğer dillere de uyarlanabilir - ben de perl bağları üretmek için itex2MML uzantısını aldım.


1

Ben teqhtml bulduğumda tamamen aynı şeyi arıyordum . Ortaya çıkan görüntüyü çevreleyen metinle dikey olarak hizalamanın güzel bir bonusu ile $ ve $$ denklemlerinin görüntülere dönüştürülmesini sağlar. Çok fazla doktor değil ama oldukça basit.

Umarım gelecekteki okuyuculara yardımcı olur.



1

Lua'daki Markdown'u Lunamark kodunu kullanarak ayrıştırmak mümkündür ( Github deposuna bakın ), bu da Markdown'un Luatex'teki makrolar tarafından doğrudan ayrıştırılabileceği ve Pandoc tarafından desteklenen birçok biçime dönüştürmeyi desteklediği anlamına gelir (yani, kütüphane çok uygundur kullanmak lualatex, context, Metafun, Düz Luatex ve texluakomut dosyaları).

Proje Pandoc'un yazarı John MacFarlane tarafından başlatıldı ve aracın gelişimi Pandoc'un projesini oldukça yakından takip ediyor ve benzer (yani, mükemmel) kalitede.

Khaled Hosny , uygun makro desteği sağlayan bir Bağlam modülü yazdı. İçin Michal'ın cevabı Markdown desteği ile herhangi bir paketi var mı? soru Lateks için benzer destek sağlayan kod verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.