web-dev-qa-db-fra.com

Comment puis-je mélanger LaTeX avec Markdown?

J'utilise Markdown pour les notes de cours et c'est génial. Je fais même du prétraitement sur le Markdown pour pouvoir faire des choses comme des tables. Mais ce terme, j'enseigne une classe avec beaucoup de maths, 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 fichier PNG anti-aliasé de Nice que je pourrais ensuite inclure dans mon Markdown via le code HTML <img> tag. Mais je ne sais absolument pas comment prendre un fragment de LaTeX et obtenir une belle image qui

  • A la bonne boîte de sélection
  • Est antialiasé

Tout ce que je sais, 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 termes de recherche appropriés. Des suggestions sur la façon de le résoudre ou sur la recherche d’une solution existante?


[~ # ~] edit [~ # ~] : Ayant installé mathTeX, je peux dire que le code est inflexible, qu'il viole la hiérarchie du système de fichiers Linux. standard, et que c’est un travail d’amateur - dans le bon comme dans le mauvais sens de cette Parole. Le code est si complexe qu'il n'y a pas de défauts évidents. Je vais chercher des alternatives.

En outre, il est clair qu'au fond, les solutions sont basées sur dvipng .


UN AN PLUS TARD : Je n'ai jamais obtenu l'intégration transparente que j'espérais, mais je suis en train de boiter avec un script de ma propre création. Il s'avère qu'au lieu de dvipng, il est un peu plus facile d'utiliser dvips -E et le programme convert de ImageMagick. Les avantages sont un peu plus de contrôle de choses comme la mise à l'échelle et la facilité de créer 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.

167
Norman Ramsey

Avez-vous essayé avec Pandoc ?

Peut-être mathJAX est le ticket. Il est construit sur jsMath , une bibliothèque JavaScript de 2004.

Depuis le 5 février 2015, je recommanderais KaTeX - la bibliothèque JavaScript LaTeX la plus performante de Khan Academy.

40
duffymo

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>

et ensuite `$ x ^ 2 $` ou `$$ x ^ 2 $$` seront rendus 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.

[~ # ~] met à jour [~ # ~] : ces jours-ci, j'utilise simplement pandoc au lieu du démarquage canonique, mais le ci-dessus est toujours utile.

22
fommil

Je vais répondre à votre question avec 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 à utiliser, et cela permet l'intégration de Latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Postscript

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

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

représente exactement ce que vous pensez qu'il va ...

Et le latex est rendu en morceaux en utilisant le latex de prévisualisation de tex-mode.

11
Charles Stewart

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 tableaux, asciimath, mathml, hell, je suis sûr que vous pouvez y insérer du code mathématique latex. c'est fondamentalement une extension à ajouter pour ajouter toutes ces fonctionnalités très utiles. Il utilise XSLT, vous pouvez donc créer facilement vos propres styles LaTeX et les convertir directement. Je l'utilise tout le temps et je l'aime beaucoup.

Je souhaite que le démarcation incorpore simplement multimarkdown. ce serait plutôt gentil.

Edit : Multimarkdown produira du HTML, du latex et quelques autres formats. html peut venir avec 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.

8
Mica

RStudio a un bon libre IDE qui permet Markdown et LaTeX.

6
rsacc

kramdown fait exactement ce que vous décrivez:

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

Et c'est beaucoup plus fiable et bien défini que Markdown.

5
matt

Vous pourriez trouver mimeTeX utile.

4

Hé, ce n’est peut-être pas la solution 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 utilisant une syntaxe $ math $ et% text%. L'extension est un préprocesseur qui utilisera latex/dvipng pour générer des pngs pour les équations/texte respectives, puis en base64 pour coder les données afin de les insérer directement dans les images, plutôt que d'avoir des images externes.

Les données sont ensuite placées dans un fichier cache simplement délimité qui code l'expression en représentation base64. Cela limite le nombre de fois où le 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 constater, il s’agit d’une sortie commentée, mais ce n’est vraiment pas un problème puisque vous utilisez déjà Markdown :)

3
Justin Van Horne

Je suis tombé sur cette discussion seulement maintenant, alors j'espère que mon commentaire est toujours utile. Je suis impliqué dans MathJax et, d’après ce que je comprends 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 restituer les mathématiques à l’affichage.

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

2
Hylke Koers

oui, mais vous devrez le pirater vous-même. J'ai écrit un filtre qui remplace les balises en latex $\some\inline\latex$ ou $$\some\equation$$ avec les 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 __== "__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
brice

Quelle langue utilisez-vous?

Si vous pouvez utiliser Ruby, alors maruk peut être configuré pour traiter les mathématiques à l'aide de divers convertisseurs latex-> MathML. Instiki utilise ceci. Il est également possible d'étendre PHPMarkdown pour utiliser itex2MML afin de convertir les mathématiques. Fondamentalement, vous insérez des étapes supplémentaires dans le moteur de réduction au niveau des 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 l'extension itex2MML pour produire des liaisons Perl.

1
Loop Space

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

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 présente une qualité similaire (c'est-à-dire excellente).

Khaled Hosny a écrit un module Context, offrant un support pratique pour les macros. La réponse de Michal à la question . Existe-t-il un package prenant en charge Markdown? question donne un code fournissant un support similaire pour Latex.

1
Charles Stewart

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

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

1
John

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

1
traviscj