Come posso mescolare LaTeX con Markdown? [chiuso]


181

Ho usato Markdown per le note di classe, ed è fantastico. Faccio anche un po 'di preelaborazione sul Markdown in modo da poter fare cose come le tabelle. Ma questo termine sto insegnando a una lezione con molta matematica e mi piacerebbe poter mettere le formule LaTeX con Markdown, qualcosa del genere:

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

Mi piacerebbe essere in grado di prendere ogni frammento di LaTeX e preelaborarlo in un bel file PNG con antialias che potrei quindi includere nel mio Markdown tramite il <img>tag HTML . Ma non ho assolutamente idea di come prendere un frammento di LaTeX e ottenere una bella immagine

  • Ha il rettangolo di selezione giusto
  • È antialiasing

Tutto quello che so fare è ottenere pagine intere in formato DVI, PostScript o PDF.

Sono sicuro che questo problema è stato risolto, ma non sono stato in grado di indovinare i termini di ricerca corretti. Qualche suggerimento su come risolverlo o dove cercare una soluzione esistente?


EDIT : Dopo aver installato mathTeX, posso dire che il codice non è flessibile, che viola lo standard della gerarchia del filesystem Linux e che è un lavoro amatoriale, sia nel senso buono che in quello negativo di quella parola. Il codice è così complesso che non ci sono errori evidenti. Cercherò alternative.

Inoltre, è chiaro che in fondo si basano le soluzioni dvipng.


UN ANNO DOPO : Non ho mai avuto la perfetta integrazione che speravo, ma sto zoppicando su una sceneggiatura della mia idea. Si scopre che invece dvipngè un po 'più facile da usare dvips -Ee il convertprogramma di ImageMagick. I vantaggi sono un po 'più controllo di cose come il ridimensionamento e la facilità di creare uno sfondo trasparente. I curiosi possono ispezionare questo esempio .

Non posso raccomandare questa soluzione a nessuno. Ma non posso nemmeno consigliare MathTeX.


Buone domande. Ho fatto la mia preparazione direttamente in LaTeX, ma è un po 'prolisso a tale scopo, anche usando auctex ...
dmckee --- ex gattino moderatore

6
Hai provato Pandoc? Non solo converte Markdown + LaTeX in (qualunque cosa), ma anche, con la sua ultima versione, ti consente di scrivere script che funzionano sull'albero di analisi, in modo da poter facilmente fare quello che vuoi.
ShreevatsaR,

@ShreevatsaR Proverò sia il pandoc che il multimarkdown, probabilmente questa estate.
Norman Ramsey,

4
così complesso che non ci sono difetti evidenti : ho perso questo piacevole riferimento la prima volta che l'ho letto.
Charles Stewart,

6
Qualcuno può spiegare come questa domanda è fuori tema?
AnnanFay,

Risposte:




25

Aggiungi il seguente codice all'inizio dei tuoi file Markdown per ottenere il supporto per il rendering 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>

e quindi `$ x ^ 2 $` o `$$ x ^ 2 $$` verranno visualizzati come previsto :-)

È sempre possibile installare una versione locale di MathJax se non si desidera utilizzare la distribuzione online, ma potrebbe essere necessario ospitarla tramite un server Web locale.

AGGIORNAMENTO : in questi giorni uso semplicemente pandoc invece del markdown canonico, ma quanto sopra è ancora utile.


Nota dal futuro: cdn.mathjax.org si sta avvicinando alla fine della sua vita, controlla mathjax.org/cdn-shutting-down per suggerimenti sulla migrazione (e forse aggiorna il tuo post per i futuri lettori).
Peter Krautzberger,

12

Risponderò alla tua domanda con una contro-domanda ...

Cosa ne pensi della modalità Org? Non è puro come Markdown, ma è simile a Markdown e lo trovo facile da lavorare e consente l'incorporamento di Latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

poscritto

Nel caso in cui non abbiate esaminato la modalità org, ha un grande punto di forza come "linguaggio di markup naturale" per scopi generali su Markdown, vale a dire il suo trattamento delle tabelle. La fonte:

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

rappresenta proprio quello che pensi che ...

E il Latex viene reso in pezzi usando l'anteprima-latex di tex-mode.


1
Ho esaminato la modalità org e, sebbene LaTeX integrato sembra molto ben fatto, sembra un overkill totale per quello che voglio (tipico di emacs). È interessante notare che noto che il motore di rendering sottostante è di nuovo dvipng. Il problema del tavolo è importante ma ho già scritto un preprocessore per risolverlo :-) +1
Norman Ramsey

8

dovresti guardare il multimarkdown http://fletcherpenney.net/multimarkdown/

ha il supporto per metadati (intestazioni, parole chiave, data, autore, ecc.), tabelle, asciimath, matematica, inferno, sono sicuro che potresti attaccare il codice matematico in lattice proprio lì. è fondamentalmente un'estensione al markdown per aggiungere tutte queste altre funzionalità molto utili. Utilizza XSLT, quindi puoi facilmente montare i tuoi stili LaTeX e convertirli direttamente. Lo uso sempre e mi piace molto.

Vorrei che il markdown includesse solo il multimarkdown. sarebbe piuttosto carino.

Modifica : Multimarkdown produrrà html, latex e pochi altri formati. html può venire con un foglio di stile a tua scelta. si convertirà anche in MathML, che viene visualizzato in Firefox e Safari / Chrome, se ricordo bene.


Sembra più complicato di quello che voglio ed è meno che chiaro quale sia il potere espressivo (oltre al MathML è incorporato da reference0).
Norman Ramsey,




3

Ehi, questa potrebbe non essere la soluzione più ideale, ma funziona per me. Ho finito per creare un'estensione LaTeX di Python-Markdown.

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

Aggiunge il supporto per le espressioni matematiche e testuali incorporate usando una sintassi $ math $ e% text%. L'estensione è un preprocessore che utilizzerà latex / dvipng per generare png per le rispettive equazioni / testo e quindi base64 codificherà i dati per incorporare direttamente le immagini, anziché avere immagini esterne.

I dati vengono quindi inseriti in un file cache delimitato da semplice che codifica l'espressione nella rappresentazione base64. Ciò limita il numero di volte in cui il lattice deve essere effettivamente eseguito.

Ecco un esempio:

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

Il risultato:

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

Come puoi vedere, è un output dettagliato, ma non è un problema dato che stai già utilizzando Markdown :)


2

sì, ma dovrai hackerarlo un po 'da solo. Ho scritto un filtro che sostituisce i tag in lattice $\some\inline\latex$o $$\some\equation$$con i tag immagine appropriati in uno script mimetex.cgi . Ci sono voluti tutti e 5 i minuti.

Attenzione: spettacolare brutto ...

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

Naturalmente, devi definire tu stesso il css appropriato per le immagini .block e .inline ...


2

Mi sono imbattuto in questa discussione solo ora, quindi spero che il mio commento sia ancora utile. Sono coinvolto con MathJax e, da come capisco la tua situazione, penso che sarebbe un buon modo per risolvere il problema: lasci il tuo codice LaTeX così com'è e lasci che MathJax visualizzi la matematica alla visualizzazione.

C'è qualche motivo per preferire le immagini?


1
Alcuni siti di Exchange Stack Math.Se, Physics.SE, ecc ... non usano mathjax ora, anche se la posizione del management è che mathjax è troppo pesante per essere distribuito tranne quando assolutamente necessario. Ciò non si applica alle presentazioni in quanto richiede l'esecuzione dei lavori in un browser.
dmckee --- ex gattino moderatore

1

Che lingua stai usando?

Se puoi usare ruby, allora maruku può essere configurato per elaborare la matematica usando vari convertitori di lattice-> MathML. Instiki lo usa. È anche possibile estendere PHPMarkdown per utilizzare itex2MML e per convertire la matematica. Fondamentalmente, si inseriscono passaggi aggiuntivi nel motore Markdown nei punti appropriati.

Quindi con ruby ​​e PHP, questo è fatto. Immagino che queste soluzioni potrebbero anche essere adattate ad altre lingue - ho ottenuto l'estensione itex2MML per produrre anche collegamenti perl.


1

Stavo cercando esattamente la stessa cosa quando ho trovato teqhtml . Fa la conversione di $ e $$ equazioni in immagini con il bel vantaggio di allineare l'immagine risultante verticalmente con il testo circostante. Non c'è molta documentazione, ma è abbastanza semplice.

Spero che aiuti alcuni lettori futuri.


1

Mi dispiace di risvegliare un thread molto vecchio, ma uso jemdoc da un paio d'anni ed è davvero eccellente.


1

È possibile analizzare Markdown in Lua usando il codice Lunamark (vedere il suo repository Github ), il che significa che Markdown può essere analizzato direttamente dalle macro in Luatex e supporta la conversione in molti dei formati supportati da Pandoc (ovvero, la libreria è adatta da utilizzare in lualatex, context, Metafun, Pianura LuaTEX, e texluascript).

Il progetto è stato avviato da John MacFarlane , autore di Pandoc, e lo sviluppo dello strumento segue da vicino quello di Pandoc ed è di qualità simile (cioè eccellente).

Khaled Hosny ha scritto un modulo di contesto, fornendo un comodo supporto per le macro. La risposta di Michal al C'è qualche pacchetto con supporto Markdown? domanda fornisce codice che fornisce un supporto simile per Latex.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.