Wie kann ich LaTeX mit Markdown mischen? [geschlossen]

181

Ich habe Markdown für Unterrichtsnotizen verwendet und es ist großartig. Ich mache sogar eine Vorverarbeitung für den Markdown, damit ich Dinge wie Tabellen machen kann. Aber in diesem Semester unterrichte ich eine Klasse mit viel Mathematik, und ich würde gerne in der Lage sein, LaTeX-Formeln mit Markdown zu versehen, ungefähr so:

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, jedes Fragment von LaTeX in eine schöne PNG-Datei mit Antialiasing umzuwandeln, die ich dann über das HTML- <img>Tag in meinen Markdown aufnehmen kann . Aber ich habe absolut keine Ahnung, wie ich ein Fragment von LaTeX nehmen und ein schönes Bild davon bekommen soll

  • Hat den richtigen Begrenzungsrahmen
  • Ist antialiased

Ich weiß nur, wie man ganze Seiten in den Formaten DVI, PostScript oder PDF erhält.

Ich bin sicher, dass dieses Problem behoben 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 : Nachdem installiert mathTeX, kann ich sagen , dass der Code unflexibel ist, dass es den Linux Filesystem Hierarchy Standard verletzt, und dass es Amateur ist arbeits sowohl die guten und schlechten Sinne des Wortes. Der Code ist so komplex, dass keine offensichtlichen Fehler vorliegen. Ich werde nach Alternativen suchen.

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


EIN JAHR SPÄTER : Ich habe nie die nahtlose Integration erhalten, auf die ich gehofft hatte, aber ich humple an einem Skript, das ich mir selbst ausgedacht habe. Es stellt sich heraus, dass es stattdessen dvipngetwas einfacher zu bedienen ist dvips -Eund das convertProgramm von ImageMagick. Die Vorteile sind etwas mehr Kontrolle über Dinge wie Skalierung und die einfache Erstellung eines transparenten Hintergrunds. Der Neugierige kann dieses Beispiel inspizieren .

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

Norman Ramsey
quelle
Gute Fragen. Ich habe meine Vorbereitung direkt in LaTeX gemacht, aber es ist ein wenig wortreich für diesen Zweck, sogar mit auctex ...
dmckee --- Ex-Moderator Kätzchen
6
Hast du Pandoc ausprobiert? Es konvertiert nicht nur Markdown + LaTeX selbst in (was auch immer), sondern ermöglicht es Ihnen mit seiner neuesten Version auch, Skripte zu schreiben, die auf dem Analysebaum funktionieren, sodass Sie problemlos tun können, was Sie wollen.
ShreevatsaR
@ShreevatsaR Ich werde sowohl Pandoc als auch Multimarkdown ausprobieren, wahrscheinlich diesen Sommer.
Norman Ramsey
4
so komplex, dass es keine offensichtlichen Fehler gibt - ich habe diese erfreuliche Referenz beim ersten Lesen verpasst.
Charles Stewart
6
Kann jemand erklären, wie diese Frage nicht zum Thema gehört?
AnnanFay

Antworten:

41

Vielleicht ist mathJAX das Ticket. Es basiert auf jsMath , einer alten JavaScript-Bibliothek aus dem Jahr 2004.

Ab dem 5. Februar 2015 würde ich zu empfehlen wechseln KaTeX - die leistungsstärkste Javascript LaTeX-Bibliothek der Khan Academy.

Duffymo
quelle
Siehe auch : stackoverflow.com/questions/11256433/… Ich erwäge auch die Katex-Serverseite, z. B. mit github.com/asciidoctor/asciidoctor/pull/3338
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功
25

Fügen Sie den folgenden Code oben in Ihre Markdown-Dateien ein, um Unterstützung für das MathJax-Rendering zu erhalten

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

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

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

UPDATE : Heutzutage verwende ich nur Pandoc anstelle von kanonischem Markdown, aber das oben Genannte ist immer noch nützlich.

Fommil
quelle
Hinweis aus der Zukunft: cdn.mathjax.org nähert sich dem Ende seiner Lebensdauer. Überprüfen Sie mathjax.org/cdn-shutting-down auf Migrationstipps (und aktualisieren Sie Ihren Beitrag möglicherweise für zukünftige Leser).
Peter Krautzberger
12

Ich werde Ihre Frage mit einer Gegenfrage beantworten ...

Was denkst du über den Org-Modus? Es ist nicht so rein wie Markdown, aber es ist Markdown-ähnlich, und ich finde es so einfach, damit zu arbeiten, und es ermöglicht das Einbetten von Latex. Vgl. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Nachtrag

Falls Sie sich den Organisationsmodus nicht angesehen haben, hat er eine große Stärke als allgemeine "natürliche Auszeichnungssprache" gegenüber Markdown, nämlich die Behandlung von Tabellen. Die Quelle:

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

repräsentiert genau das, was du denkst ...

Und der Latex wird mit dem Preview-Latex des Tex-Modus in Teilen gerendert.

Charles Stewart
quelle
1
Ich habe mir den Org-Modus angesehen, und obwohl das eingebettete LaTeX sehr gut gemacht zu sein scheint, sieht es für das, was ich will (typisch für Emacs), wie ein totaler Overkill aus. Interessanterweise stelle ich fest, dass die zugrunde liegende Rendering-Engine wieder vorhanden ist dvipng. Das Tabellenproblem ist wichtig, aber ich habe bereits einen Präprozessor geschrieben, um es zu lösen :-) +1
Norman Ramsey
8

Sie sollten sich Multimarkdown ansehen http://fletcherpenney.net/multimarkdown/

Es unterstützt Metadaten (Header, Schlüsselwörter, Datum, Autor usw.), Tabellen, Asciimath, Mathml, verdammt noch mal, ich bin sicher, Sie könnten Latex-Mathe-Code genau dort hineinstecken. Es ist im Grunde eine Erweiterung von Markdown, um all diese anderen sehr nützlichen Funktionen hinzuzufügen. Es verwendet XSLT, sodass Sie ganz einfach Ihre eigenen LaTeX-Stile erstellen und direkt konvertieren können. Ich benutze es die ganze Zeit und ich mag es sehr.

Ich wünschte, der Abschlag würde nur Multimarkdown beinhalten. es wäre ziemlich schön

Bearbeiten : Multimarkdown erzeugt HTML, Latex und einige andere Formate. HTML kann mit einem Stylesheet Ihrer Wahl geliefert werden. Es wird auch in MathML konvertiert, das in Firefox und Safari / Chrome angezeigt wird, wenn ich mich richtig erinnere.

Glimmer
quelle
Sieht komplizierter aus als ich möchte, und es ist weniger als klar, was die Ausdruckskraft ist (außer MathML wird durch reference0 aufgenommen).
Norman Ramsey
6

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

rsacc
quelle
Aber können Sie sie damit in demselben Dokument / Satz kombinieren, wie es das OP verlangt?
Matt
Sie können Equasions im Markdown-Modus einbetten. Siehe Beispiele unter rstudio.com/ide/docs/authoring/using_markdown_equations
Roman Luštrik
6

kramdown macht genau das, was Sie beschreiben:

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

Und es ist viel zuverlässiger und klarer als Markdown.

matt
quelle
Es sieht so aus, als ob diese Seite im Moment nicht verfügbar ist, aber hier ist die Seite, auf die sie laut Wayback-Maschine umgeleitet wurde: kramdown.gettalong.org:80/
Derwent
5

Möglicherweise ist mimeTeX hilfreich.

Ignacio Vazquez-Abrams
quelle
2
Nachfolger mathTeX sieht noch besser aus - und es ist klar, dass dies dvipngdas Arbeitstier ist. Danke für einen tollen Hinweis! +1
Norman Ramsey
1
Jetzt würde ich KaTeX empfehlen - die leistungsstärkste Javascript LaTeX-Bibliothek der Khan Academy.
Duffymo
Der Link wurde geändert in: forkosh.com/mimetex.html
quine
3

Hey, das ist vielleicht nicht die idealste Lösung, aber es funktioniert für mich. Am Ende habe ich eine Python-Markdown LaTeX-Erweiterung erstellt.

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

Es bietet Unterstützung für Inline-Mathematik und Textausdrücke mithilfe der Syntax $ math $ und% text%. Die Erweiterung ist ein Präprozessor, der Latex / DVIPNG verwendet, um PNGs für die jeweiligen Gleichungen / Texte zu generieren, und dann Base64 die Daten codiert, um die Bilder direkt zu inlineieren, anstatt externe Bilder zu haben.

Die Daten werden dann in eine einfach begrenzte Cache-Datei gestellt, die den Ausdruck in die base64-Darstellung codiert. Dies begrenzt die Häufigkeit, mit der Latex tatsächlich ausgeführt werden muss.

Hier ist ein Beispiel:

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

Die Ausgabe:

$ 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 sehen, handelt es sich um eine ausführliche Ausgabe, aber das ist wirklich kein Problem, da Sie bereits Markdown verwenden :)

Justin Van Horne
quelle
2

Ja, aber du musst es selbst ein wenig hacken. Ich habe einen Filter geschrieben, der Latex-Tags $\some\inline\latex$oder $$\some\equation$$entsprechende Bild-Tags durch ein mimetex.cgi- Skript ersetzt. Es dauerte alle 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 müssen Sie das entsprechende CSS für .block- und .inline-Bilder selbst definieren ...

brice
quelle
2

Ich bin erst jetzt auf diese Diskussion gestoßen, daher hoffe ich, dass mein Kommentar immer noch nützlich ist. Ich bin mit MathJax beschäftigt und nach meinem Verständnis Ihrer Situation wäre dies ein guter Weg, um das Problem zu lösen: Sie lassen Ihren LaTeX-Code unverändert und lassen MathJax die Mathematik beim Anzeigen rendern.

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

Hylke Koers
quelle
1
Bestimmte Stapel Exchange - Standorte Math.Se, Physics.SE, etc ... Sie Mathjax jetzt verwenden, obwohl die Position des Managements besteht darin , dass Mathjax zu schwer ist , es sei denn, absolut notwendig , eingesetzt zu werden. Dies gilt jedoch nicht für Präsentationen, da die Arbeiten in einem Browser ausgeführt werden müssen.
dmckee --- Ex-Moderator Kätzchen
1

Welche Sprache benutzt du?

Wenn Sie Ruby verwenden können, kann Maruku so konfiguriert werden, dass Mathematik mit verschiedenen Latex-> MathML-Konvertern verarbeitet wird. Instiki nutzt dies. Es ist auch möglich, PHPMarkdown zu erweitern, um itex2MML auch zum Konvertieren von Mathematik zu verwenden. Grundsätzlich fügen Sie an den entsprechenden Stellen zusätzliche Schritte in die Markdown-Engine ein.

Mit Ruby und PHP ist dies also erledigt. Ich denke, diese Lösungen könnten auch an andere Sprachen angepasst werden - ich habe die itex2MML-Erweiterung erhalten, um auch Perl-Bindungen zu erzeugen.

Andrew Stacey
quelle
1

Ich habe genau das Gleiche gesucht, als ich teqhtml gefunden habe . Es konvertiert $ und $$ Gleichungen in Bilder mit dem netten Bonus, das resultierende Bild vertikal am umgebenden Text auszurichten. Nicht viel doc, aber es ist ganz einfach.

Hoffe, es hilft einigen zukünftigen Lesern.

John
quelle
1

Es tut mir leid, einen wirklich alten Thread zu wecken, aber ich benutze jemdoc seit ein paar Jahren und es ist wirklich exzellent.

traviscj
quelle
1

Es ist möglich, Markdown in Lua mithilfe des Lunamark-Codes zu analysieren (siehe Github-Repo ). Dies bedeutet, dass Markdown in Luatex direkt von Makros analysiert werden kann und die Konvertierung in viele der von Pandoc unterstützten Formate unterstützt (dh die Bibliothek ist gut geeignet zu verwenden , in lualatex, context, Metafun, Ebene LuaTeX und texluaSkripte).

Das Projekt wurde von John MacFarlane , Autor von Pandoc, gestartet. Die Entwicklung des Tools verfolgt die von Pandoc sehr genau und ist von ähnlicher (dh ausgezeichneter) Qualität.

Khaled Hosny hat ein Kontextmodul geschrieben, das bequeme Makrounterstützung bietet. Michals Antwort auf Gibt es ein Paket mit Markdown-Unterstützung? Frage gibt Code, der ähnliche Unterstützung für Latex bietet.

Charles Stewart
quelle