2010-02-03 13 views
144

Ich habe Markdown für Klassennotizen verwendet, und es ist großartig. Ich mache sogar eine Vorverarbeitung auf dem Markdown, damit ich Dinge wie Tabellen machen kann. Aber dieser Begriff mir eine Klasse mit einer Menge Mathematik unterrichtet, und ich würde gerne in der Lage sein, LaTeX Formeln zu setzen mit Markdown, etwa so:Wie kann ich LaTeX mit Markdown mischen?

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

Ich möchte in der Lage sein zu nehmen jedes Fragment von LaTeX und vorverarbeiten es in eine schöne Antialias-PNG-Datei, die ich dann in meinem Markdown über den HTML-Code <img> einfügen könnte. Aber ich habe absolut keine Ahnung, wie ein Fragment von LaTeX zu nehmen und ein schönes Bild bekommen, dass

  • das Recht hat, Begrenzungsbox
  • antialiased Ist

Alles, was ich weiß, wie zu tun ist, erhalten volle Seiten in den Formaten DVI, PostScript oder PDF.

Ich bin sicher, dass dieses Problem angesprochen wurde, aber ich konnte die richtigen Suchbegriffe nicht erraten. Irgendwelche Vorschläge, wie man es löst oder wo man nach einer vorhandenen Lösung sucht?


EDIT: mathTeX installiert haben, kann ich sagen, dass der Code unflexibel ist, dass es den Linux Filesystem Hierarchy Standard verletzt, und dass es Amateur-Arbeit ist — sowohl die guten und schlechten Sinne des Wortes . Der Code ist so komplex, dass es keine offensichtlichen Fehler gibt. Ich werde nach Alternativen suchen.

Es ist auch klar, dass Lösungen im Grunde auf dvipng basieren.


ein Jahr später: Ich habe nie die nahtlose Integration bekomme ich gehofft hatte, aber ich bin hinkend auf einem Skript meines eigenen Planens zusammen. Es stellt sich heraus, dass anstelle von dvipng ist es ein wenig einfacher, dvips -E und das convert Programm von ImageMagick zu verwenden. Die Vorteile sind etwas mehr Kontrolle über Dinge wie Skalierung und Leichtigkeit, einen transparenten Hintergrund zu machen. Der Neugierige kann this example inspizieren.

Ich kann diese Lösung niemandem empfehlen. Aber ich kann MathTeX auch nicht empfehlen.

+0

Gute Fragen. Ich habe meine Vorbereitung direkt in LaTeX gemacht, aber es ist ein wenig wortreich für diesen Zweck, sogar mit auctex ... – dmckee

+5

Haben Sie versucht Pandoc? Es konvertiert nicht nur Markdown + LaTeX in (was auch immer), sondern ermöglicht Ihnen auch, mit seiner neuesten Version Skripte zu schreiben, die auf dem Parse-Baum arbeiten, so dass Sie leicht machen können, was Sie wollen. – ShreevatsaR

+0

@ShreevatsaR Ich werde sowohl Pandov als auch Multimarkdown versuchen, wahrscheinlich in diesem Sommer. –

Antwort

57

Haben Sie versucht mit Pandoc?

+0

Siehe auch http://stackoverflow.com/questions/663532/lighweight-markup-wiki-language-for-documenting –

+0

Sie können RMarkdown auch direkt verwenden. Pandoc benutzt es. – felipecrp

4

Sie könnten mimeTeX nützlich finden.

+2

Nachfolger mathTeX sieht noch besser aus --- und es ist klar, dass 'dvipng' das Arbeitspferd ist . Danke für einen tollen Zeiger! +1 –

+0

Jetzt würde ich KaTeX - die performanteste Javascript LaTeX-Bibliothek von Khan Academy empfehlen. – duffymo

+0

Der Link wurde geändert in: http://www.forkosh.com/mimetex.html – quine

37

Vielleicht mathJAX ist das Ticket. Es ist auf jsMath, eine 2004 Vintage JavaScript-Bibliothek gebaut.

Ab dem 5. Februar 2015 würde ich empfehlen, KaTeX - die performanteste Javascript LaTeX-Bibliothek von Khan Academy zu empfehlen.

2

ja, aber Sie müssen es ein wenig selbst hacken. Ich habe einen Filter geschrieben, der Latex-Tags $\some\inline\latex$ oder $$\some\equation$$ mit entsprechenden Bild-Tags zu einem mimetex.cgi Skript ersetzt. Es dauerte ganze 5 Minuten.

Achtung: spektakulär hässlich ...

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

Natürlich haben Sie die entsprechende CSS selbst zu definieren.Block und .inline Bilder ...

11

ich Ihre Frage mit einer Gegenfrage ...

Was halten Sie von Org-Modus beantwortet werden? Es ist nicht so rein wie Markdown, aber es ist Markdown-like, und ich finde es so einfach zu arbeiten, und es ermöglicht das Einbetten von Latex. Vgl. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Postscript

Falls Sie an org-Modus nicht ausgesehen haben, hat es eine große Stärke als Allzweck „natürliche Auszeichnungssprache“ über Markdown, nämlich die Behandlung von Tabellen. Die Quelle:

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

repräsentiert genau das, was Sie denken, es wird ...

und der Latex wird in Stücke mit tex-Modus des Vorschau-Latex gemacht.

+0

Ich schaute auf Org-Modus, und obwohl die eingebettete LaTeX sehr gut gemacht scheint, sieht es aus wie totaler Overkill für das, was ich will (typisch für Emacs). Interessanterweise stelle ich fest, dass die zugrunde liegende Rendering-Engine wieder "dvipng" ist. Das Tabellenproblem ist wichtig, aber ich habe bereits einen Präprozessor geschrieben, um es zu lösen :-) +1 –

8

Sie bei Multimark aussehen sollte http://fletcherpenney.net/multimarkdown/

es hat die Unterstützung für Metadaten (Header, Schlüsselwörter, Datum, Autor, etc), Tabellen, asciimath, MathML, Hölle ich bin sicher, dass Sie Latex Mathe-Code halten könnte rechts in Dort. Es ist im Grunde eine Erweiterung zu Markdown, um all diese anderen sehr nützlichen Funktionen hinzuzufügen. Es verwendet XSLT, so dass Sie Ihre eigenen LaTeX-Stile ganz einfach aufrüsten und direkt konvertieren können. Ich benutze es die ganze Zeit, und ich mag es sehr.

Ich wünschte, der Abschlag würde nur Multiparkdown enthalten. es wäre ziemlich nett.

Bearbeiten: Multimarkdown wird HTML, Latex und ein paar andere Formate produzieren. HTML kann mit einem Style Sheet Ihrer Wahl kommen. Es wird auch in MathML konvertiert, was in Firefox und Safari/Chrome angezeigt wird, wenn ich mich richtig erinnere.

+0

Sieht komplizierter aus als das, was ich will, und es ist weniger als klar, was die Ausdruckskraft ist (außer MathML ist durch Referenz0 enthalten) . –

1

Es ist möglich, Markdown in Lua mit dem Lunamark-Code zu parsen (siehe Github repo), was bedeutet, dass Markdown direkt von Makros in Luatex analysiert werden kann und die Konvertierung in viele von Pandoc unterstützte Formate unterstützt (dh die Bibliothek ist gut geeignet für die Verwendung in lualatex, context, Metafun, Plain Luatex und texlua Skripte).

Das Projekt wurde von John MacFarlane, Autor von Pandoc, gestartet, und die Entwicklung des Tools verfolgt die von Pandoc ziemlich genau und ist von ähnlicher (d. H. Ausgezeichneter) Qualität.

Khaled Hosny schrieb ein Kontextmodul, das bequeme Makrounterstützung bietet. Michal's answer to the Is there any package with Markdown support? question gibt Code, der ähnliche Unterstützung für Latex bietet.

1

Welche Sprache verwenden Sie? Wenn Sie Ruby verwenden können, kann maruku konfiguriert werden, um Mathe mit verschiedenen Latex-> MathML-Konvertern zu verarbeiten. Instiki verwendet dies. Es ist auch möglich, PHPMarkdown zu erweitern, um auch itex2MLML zu verwenden, um Mathe zu konvertieren. Grundsätzlich fügen Sie zusätzliche Schritte in die Markdown-Engine an den entsprechenden Punkten ein.

Also mit Ruby und PHP ist dies getan. Ich denke, dass diese Lösungen auch an andere Sprachen angepasst werden können - ich habe die itex2ML-Erweiterung erhalten, um auch Perl-Bindungen zu erzeugen.

1

Ich bin erst jetzt auf diese Diskussion gestoßen, also hoffe ich, dass mein Kommentar immer noch nützlich ist. Ich bin involviert in MathJax und, wie ich Ihre Situation verstehe, denke ich, dass es ein guter Weg wäre, das Problem zu lösen: Sie lassen Ihren LaTeX-Code unverändert und lassen MathJax die Mathematik beim Betrachten rendern.

Gibt es einen Grund, warum Sie Bilder bevorzugen würden?

+1

Bestimmte Stack Exchange-Sites Math.Se, Physics.SE, etc ... * verwenden jetzt MathJax, obwohl die Position des Managements darin besteht, dass MathJax zu schwer ist, um es zu implementieren, außer dort, wo es absolut notwendig ist. Dies gilt jedoch nicht für Präsentationen, da die Arbeiten in einem Browser ausgeführt werden müssen. – dmckee

1

Ich suchte genau das gleiche, als ich teqhtml fand. Es macht die Umwandlung von $ und $$ Gleichungen in Bilder mit dem netten Bonus, das resultierende Bild vertikal mit dem umgebenden Text auszurichten. Nicht viel Doc, aber es ist ziemlich einfach.

Ich hoffe, es hilft einigen zukünftigen Lesern.

3

Hey, das ist vielleicht nicht die ideale Lösung, aber es funktioniert für mich. Ich habe schließlich eine Python-Markdown LaTeX-Erweiterung erstellt.

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

Es fügt Unterstützung für die Inline Mathematik und Text Ausdrücke ein $ math $ und% text% Syntax. Die Erweiterung ist ein Präprozessor, der latex/dvipng verwendet, um PNGs für die jeweiligen Gleichungen/Texte zu generieren, und dann base64, um die Daten zu codieren, um die Bilder direkt zu verknüpfen, anstatt externe Bilder zu haben.

Die Daten werden dann in eine Cache-Datei mit einfacher Trennzeichenfolge eingefügt, die den Ausdruck in die base64-Darstellung codiert. Dies begrenzt die Anzahl von Malen, die Latex tatsächlich ausgeführt werden muss. Hier

ein Beispiel:

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

Der Ausgang:

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

Wie Sie es ist eine ausführliche Ausgabe sehen, aber das ist nicht wirklich ein Problem, da Sie bereits verwenden Markdown :)

1

Entschuldigung, einen wirklich alten Thread zu erwecken, aber ich habe jemdoc seit ein paar Jahren verwendet, und es ist wirklich hervorragend.

18

Fügen Sie den folgenden Code am Anfang Ihrer Markdown-Dateien erhalten Mathjax Unterstützung Rendering

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

und `dann x $^2 $` oder `$$ x^2 $$` machen wird wie erwartet :-)

Sie können immer eine lokale Version von MathJax installieren, wenn Sie die Online-Verteilung nicht verwenden möchten, aber möglicherweise über einen lokalen Webserver hosten müssen.

UPDATE: In diesen Tagen verwende ich nur pandoc anstelle von kanonischen Abschriften, aber das obige ist immer noch nützlich.

+0

Hinweis aus der Zukunft: cdn.mathjax.org nähert sich dem Ende seines Lebens, überprüfen Sie https://www.mathjax.org/cdn-shutting-down auf Migrations-Tipps (und aktualisieren Sie Ihren Beitrag eventuell für zukünftige Leser). –

6

RStudio hat eine gute freie IDE, die Markdown und LaTeX ermöglicht.

+0

Aber erlaubt es Ihnen, sie im selben Dokument/Satz zu kombinieren, wie es das OP verlangt? – matt

+0

Sie können Equasions im Markdown-Modus einbetten. Siehe Beispiele unter http://www.rstudio.com/ide/docs/authoring/using_markdown_equations –

4

kramdown tut genau das, was Sie beschreiben:

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

Und es ist viel zuverlässiger und gut definiert als Markdown.

+0

Es sieht so aus als wäre diese Seite im Moment nicht verfügbar, aber hier ist die Seite, die 301 verwendet, um nach dem Wayback-Rechner umzuleiten: kramdown .gettalong.org: 80 / – Derwent

Verwandte Themen