Comment puis-je mélanger LaTeX avec Markdown? [fermé]


181

J'utilise Markdown pour les notes de cours, et c'est génial. Je fais même du prétraitement sur le Markdown afin de pouvoir faire des choses comme des tables. Mais ce terme, j'enseigne à une classe avec beaucoup de mathématiques, et j'aimerais pouvoir mettre des formules LaTeX avec Markdown, quelque chose comme ceci:

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

J'aimerais pouvoir prendre chaque fragment de LaTeX et le prétraiter dans un joli fichier PNG anti-crénelé que je pourrais ensuite inclure dans mon Markdown via la <img>balise HTML . Mais je ne sais absolument pas comment prendre un fragment de LaTeX et obtenir une belle image qui

  • A la bonne boîte englobante
  • Est anti-crénelé

Tout ce que je sais faire, c'est obtenir des pages complètes aux formats DVI, PostScript ou PDF.

Je suis sûr que ce problème a été résolu, mais je n'ai pas été en mesure de deviner les bons termes de recherche. Des suggestions pour le résoudre ou où chercher une solution existante?


ÉDITER : Après avoir installé mathTeX, je peux dire que le code est inflexible, qu'il viole le standard Linux Filesystem Hiérarchie, et qu'il s'agit d'un travail amateur - dans les bons et les mauvais sens de ce mot. Le code est si complexe qu'il n'y a pas de défauts évidents. Je chercherai des alternatives.

De plus, il est clair qu'au fond, les solutions reposent sur dvipng.


UN AN PLUS TARD : Je n'ai jamais obtenu l'intégration parfaite que j'espérais, mais je suis en train de boiter sur un scénario de ma propre conception. Il s'avère qu'au lieu de dvipngcela, il est un peu plus facile à utiliser dvips -Eet le convertprogramme d'ImageMagick. Les avantages sont un peu plus de contrôle sur des éléments tels que la mise à l'échelle et la facilité de création d'un arrière-plan transparent. Les curieux peuvent inspecter cet exemple .

Je ne peux recommander cette solution à personne. Mais je ne peux pas non plus recommander MathTeX.


Bonnes questions. J'ai fait ma préparation directement dans LaTeX, mais c'est un peu verbeux pour ça, même en utilisant auctex ...
dmckee --- ex-moderator chaton

6
Avez-vous essayé Pandoc? Non seulement il convertit lui-même Markdown + LaTeX en (peu importe), mais aussi, avec sa dernière version, il vous permet d'écrire des scripts qui fonctionnent sur l'arborescence d'analyse, afin que vous puissiez facilement faire ce que vous voulez.
ShreevatsaR

@ShreevatsaR Je vais essayer à la fois pandoc et multimarkdown, probablement cet été.
Norman Ramsey

4
si complexe qu'il n'y a pas de défauts évidents - j'ai manqué cette référence agréable la première fois que je l'ai lu.
Charles Stewart

6
Quelqu'un peut-il expliquer en quoi cette question est hors sujet?
AnnanFay

Réponses:




25

Ajoutez le code suivant en haut de vos fichiers Markdown pour obtenir la prise en charge du rendu 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>

puis `$ x ^ 2 $` ou `$$ x ^ 2 $$` s'affichera comme prévu :-)

Vous pouvez toujours installer une version locale de MathJax si vous ne souhaitez pas utiliser la distribution en ligne, mais vous devrez peut-être l'héberger via un serveur Web local.

MISE À JOUR : ces jours-ci, j'utilise simplement pandoc au lieu du démarquage canonique, mais ce qui précède est toujours utile.


Note du futur: cdn.mathjax.org approche de sa fin de vie, consultez mathjax.org/cdn-shutting-down pour des conseils de migration (et peut-être mettez à jour votre message pour les futurs lecteurs).
Peter Krautzberger

12

Je répondrai à votre question par une contre-question ...

Que pensez-vous du mode Org? Ce n'est pas aussi pur que Markdown, mais il ressemble à Markdown, et je le trouve aussi facile à travailler, et cela permet l'incorporation de Latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Postscript

Dans le cas où vous n'avez pas regardé le mode org, il a une grande force en tant que "langage de balisage naturel" à usage général par rapport à Markdown, à savoir son traitement des tables. La source:

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

représente exactement ce que vous pensez que ce sera ...

Et le Latex est rendu en morceaux à l'aide du preview-latex de tex-mode.


1
J'ai regardé le mode org, et bien que le LaTeX intégré semble très bien fait, cela semble être une exagération totale pour ce que je veux (typique d'emacs). Fait intéressant, je note que le moteur de rendu sous-jacent est à nouveau dvipng. Le problème de table est important mais j'ai déjà écrit un préprocesseur pour le résoudre :-) +1
Norman Ramsey

8

vous devriez regarder multimarkdown http://fletcherpenney.net/multimarkdown/

il prend en charge les métadonnées (en-têtes, mots-clés, date, auteur, etc.), les tables, asciimath, mathml, diable je suis sûr que vous pouvez coller du code mathématique latex juste là-dedans. c'est fondamentalement une extension de markdown pour ajouter toutes ces autres fonctionnalités très utiles. Il utilise XSLT, vous pouvez donc facilement créer vos propres styles LaTeX et les convertir directement. Je l'utilise tout le temps et je l'aime beaucoup.

Je souhaite que la démarque n'intègre que multimarkdown. ce serait plutôt sympa.

Edit : Multimarkdown produira html, latex et quelques autres formats. html peut être accompagné d'une feuille de style de votre choix. il se convertira également en MathML, qui s'affiche dans Firefox et Safari / Chrome, si je me souviens bien.


Cela semble plus compliqué que ce que je veux, et la puissance expressive est loin d'être claire (autre que MathML est incorporé par reference0).
Norman Ramsey




3

Hé, ce n'est peut-être pas la solution la plus idéale, mais cela fonctionne pour moi. J'ai fini par créer une extension Python-Markdown LaTeX.

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

Il ajoute la prise en charge des expressions mathématiques et textuelles en ligne en utilisant une syntaxe $ math $ et% text%. L'extension est un préprocesseur qui utilisera latex / dvipng pour générer des png pour les équations / texte respectifs, puis en base64 encodera les données pour insérer directement les images, plutôt que d'avoir des images externes.

Les données sont ensuite placées dans un fichier cache simple délimité qui code l'expression dans la représentation en base64. Cela limite le nombre de fois où latex doit être exécuté.

Voici un exemple:

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

Le résultat:

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

Comme vous pouvez le voir, c'est une sortie verbeuse, mais ce n'est vraiment pas un problème puisque vous utilisez déjà Markdown :)


2

oui, mais vous devrez le pirater un peu vous-même. J'ai écrit un filtre qui remplace les balises latex $\some\inline\latex$ou $$\some\equation$$par des balises d'image appropriées dans un script mimetex.cgi . Cela a pris 5 minutes.

Attention: spectaculairement moche ...

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

Bien sûr, vous devez définir vous-même le css approprié pour les images .block et .inline ...


2

Je suis tombé sur cette discussion seulement maintenant, donc j'espère que mon commentaire sera toujours utile. Je suis impliqué avec MathJax et, d'après ma compréhension de votre situation, je pense que ce serait un bon moyen de résoudre le problème: vous laissez votre code LaTeX tel quel et laissez MathJax rendre les mathématiques lors de la visualisation.

Y a-t-il une raison pour laquelle vous préférez les images?


1
Certains sites Stack échange Math.Se, Physics.SE, etc ... n'utilisent MathJax maintenant, bien que la position de la direction est que MathJax est trop lourd pour être déployé , sauf lorsque cela est absolument nécessaire. Mais cela ne s'applique pas aux présentations car cela nécessite que les travaux s'exécutent dans un navigateur.
dmckee --- ex-moderator chaton

1

Quelle langue utilisez-vous?

Si vous pouvez utiliser ruby, alors maruku peut être configuré pour traiter les mathématiques en utilisant divers convertisseurs latex-> MathML. Instiki l' utilise. Il est également possible d'étendre PHPMarkdown pour utiliser itex2MML ainsi que pour convertir les mathématiques. Fondamentalement, vous insérez des étapes supplémentaires dans le moteur Markdown aux points appropriés.

Donc, avec ruby ​​et PHP, c'est fait. Je suppose que ces solutions pourraient également être adaptées à d'autres langages - j'ai également eu l'extension itex2MML pour produire des liaisons Perl.


1

Je cherchais exactement la même chose quand j'ai trouvé teqhtml . Il convertit les équations $ et $$ en images avec le bonus intéressant d'aligner l'image résultante verticalement avec le texte environnant. Pas beaucoup de doc mais c'est assez simple.

J'espère que cela aidera certains futurs lecteurs.


1

Désolé de réveiller un très vieux fil, mais j'utilise jemdoc depuis quelques années et il est vraiment excellent.


1

Il est possible d'analyser Markdown dans Lua en utilisant le code Lunamark (voir son dépôt Github ), ce qui signifie que Markdown peut être analysé directement par des macros dans Luatex et prend en charge la conversion vers de nombreux formats pris en charge par Pandoc (c'est-à-dire que la bibliothèque est bien adaptée à utiliser dans lualatex, context, Metafun, plaine luatex ettexlua scripts).

Le projet a été lancé par John MacFarlane , auteur de Pandoc, et le développement de l'outil suit de très près celui de Pandoc et est de qualité similaire (c'est-à-dire excellente).

Khaled Hosny a écrit un module contextuel, fournissant un support macro pratique. La réponse de Michal à la question Existe - t-il un package avec le support Markdown? question donne un code fournissant un support similaire pour Latex.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.