Publier un document Markdown+LaTeX en PDF et sur un blog

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 06 Sep 2016, 20:04

Bonjour à tous,

Je suis actuellement en formation agreg et je vais essayer de rédiger au maximum les corrigés. Ça me permet d'échanger avec mes profs, avec mes autres collègues, et d'avoir pour plus tard une base de papiers déjà rédigés.

Pour des facilités, j'écris le texte en Markdown, parce que c'est plus fun. Mais j'intègre du LaTeX pour les maths parce que c'est top.

Je me retrouve donc avec un document LaTeX/Markdown, mais il y a des conflits, notamment avec le tiret underscore _, qui signifie "mettre en italique" en Markdown et "mettre en indice" en LaTeX.

La chaîne d'édition

— J'écris un fichier Markdown, dans lequel je mets du LaTeX.
— Je peux ensuite, depuis mon PC qui tourne sous Debian, fabriquer soit du PDF avec pandoc (pandoc utilise pdflatex, donc c'est le même rendu qu'un "vrai" document LaTeX), soit publier l'article comme un article sur un blog. Celui-ci est généré avec un générateur de site statique (Hexo, ma solution actuelle, ou Hugo). Sur le blog, tout le contenu Markdown est transcrit en HTML, et c'est Mathjax, une bibliothèque Javascript, qui s'occupe de faire le rendu du LaTeX sur le navigateur web de l'internaute.

Les incompatibilités

La solution Pandoc fonctionne très bien (et je le conseille !). Pandoc transforme le document Markdown en fichier LaTeX, puis compile le tout. Donc l'inclusion directe de tout code LaTeX est bien gérée (en particulier, les \begin{equation}).

Pour le site web, il y a deux solutions en ce qui me concerne : Hexo et Hugo. Ce sont deux générateurs de sites statiques (on fabrique le site en local et on met ça sur un serveur, ça permet de soulager les serveurs et d'avoir un site super-rapide).

La solution Hugo est plus cohérente (ou extrémiste) : tout code LaTeX doit être inséré entre des signes `, ce qui signifie en Markdown "laisser tel quel" (ou plus précisément "afficher du code verbatim"). Du coup, un document qui fonctionne avec Pandoc ne fonctionnera pas avec Hugo. Il faut rajouter ces signes ` à chaque fois qu'on met du LaTeX. Mais si on fait ça, Pandoc ne fonctionne plus.

La solution Hexo fait la chose suivante : il tente de reconnaître qu'il y a du LaTeX et n'y touche pas. Sauf qu'il y a des bugs, notamment avec le tiret bas (underscore). Voyez plutôt : http://x16.fr/2016-09-06/2016-09-supelec-jp/. Dès le début du sujet (I.A.1), voyez la ligne "Pour calculer la norme, on doit sommer les valeurs absolues [...]. La suite fait apparaître $|\sum{k = 1}[...]. Ce que j'ai écrit est le suivant :

Code: Tout sélectionner
$|\sum_{k = 1}^n a_{ik}b_{kj}|$


et cela devrait donner

C'est bien l'underscore qui a posé problème car il a transformé en italique ce qui suit. Ce phénomène est relaté ici : http://docs.mathjax.org/en/latest/tex.html

Avez-vous déjà essayé cela ? Avez-vous trouvé un moyen de rendre compatible une présentation web et des documents LaTeX faits pour le PDF ?

Merci de vos lumières !



Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 06 Sep 2016, 20:37

N'est il pas possible de réaffecter sous Markdown la transformation en italique à une autre instruction?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par fatal_error » 06 Sep 2016, 20:50

salut,

une solution immédiate et naturelle est de simplement considérer le tex comme du code.
A savoir:
blabla
```(LA)tex
some tex formula or tex code to be parsed and rendered by a (LA)tex parser
```

D'une manière générale, pandoc c'est puissant toussa, mais sémantiquement ca apporte rien. Si tu rédiges en markdown c'est pas pour le convertir en tex. C'est pour avoir un rendu associé __prévisible__.
il en va de même pour le tex. Markdown te permet de déléguer le rendu d'un code, autant t'en servir pour le tex.
la vie est une fête :)

Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 06 Sep 2016, 21:20

Je plussoie à vos deux réponses qui amènent de réjouissantes perspectives.

@Razes : Du coup, en regardant comment désactiver ça, je vois que je pourrais utiliser dans Hexo une variante de Markdown qui accepte les underscores (c'est le cas de Github flavored markdown). Et même (peut-être encore mieux), il y a un plugin Hexo qui utilise Pandoc pour la génération des pages.

@fatal_error : As-tu des exemples où cela a été utilisé (et quelle configuration) ?

Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 06 Sep 2016, 21:47

Je suis content pour toi.

Ça me rappelle les années bidouillage sur , , et METAFONT. Et dire qu'à cette époque on était en contact direct avec Leslie Lamport qui nous avait beaucoup aidé par ses conseil pour l'implantation de sous Lunix SystemV et sur PC. Et nous avait fourni plusieurs macros.

Bref, peux tu me dire quelle produit pourrais je installer pour utiliser sur PC. Car actuellement je l'utilise uniquement sur les forums.

Merci

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par fatal_error » 06 Sep 2016, 21:51

non j'ai pas d'exemples mais on doit s'en sortir très rapidement (30 minutes)
par ex:
via nodejs et https://github.com/chjj/marked on parse du markdown
en particulier, si lang=='tex', alors on parse le code via https://github.com/mathjax/MathJax-node/ (mj-single) qui génère du mathml puis c'est fini...
la vie est une fête :)

Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 06 Sep 2016, 21:52

@Razes : Sous Linux, tu peux utiliser texlive-latex en l'installant depuis ton gestionnaire de paquets. Sous Windows, c'est plutôt MiKTeX apparemment.
Tu as un bon article écrit ici : https://openclassrooms.com/courses/redi ... ller-latex

Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 06 Sep 2016, 22:09

Garamond a écrit:@Razes : Sous Linux, tu peux utiliser texlive-latex en l'installant depuis ton gestionnaire de paquets. Sous Windows, c'est plutôt MiKTeX apparemment.
Tu as un bon article écrit ici : https://openclassrooms.com/courses/redi ... ller-latex

Ça sera sur PC. Merci pour le lien, je vais y jeter un coup d’œil.

Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 06 Sep 2016, 22:15

@Razes : Avec plaisir :-) Attention, le PC c'est la machine, pas le système : sur un PC tu peux mettre windows, linux, freebsd, macos, ...

Merci @fatal_error pour ta réponse :

1) Utilisant des triples backquotes, effectivement c'est ce qui semble le plus cohérent dans le langage. Et comment ferais-tu pour du code en ligne ?

2) En faisant ça, c'est Pandoc qui est dans les choux. Il ne sait apparemment pas interpréter en tant que code (La)TeX. Si j'écris ça :

Code: Tout sélectionner
```tex                          # (ou latex)
\left|\sum_{k = 1}^n a_{ik}b_{kj}\right| \leq \sum_{k = 1}^n |a_{ik}b_{kj}|
```

Ça ne fonctionne pas. J'ai aussi essayé de mettre des doubles dollars ($$), c'est pareil.

Je ne suis pas contre utiliser autre chose, mais je souhaite quand-même pouvoir produire de beaux documents imprimables avec des maths. Dans l'ordre des priorités, c'est plus important pour moi de pouvoir générer du PDF avec des maths que pouvoir mettre ça sur le web.

Aurais-tu une idée pour ? Je regarde ça sans succès pour le moment.

Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 06 Sep 2016, 22:19

Merci pour le lien, ça parait très intéressant. Je vais essayer de l'installer ce weekend.

Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 06 Sep 2016, 22:32

Vidéo de l'installation disponible sur Youtube.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par fatal_error » 07 Sep 2016, 22:30

@garamond
effectivement pour la mise en page (pdf) ce n'est pas immédiat
si tu considères l'arborescence suivante
./app.js
Code: Tout sélectionner
var fs = require('fs');
var marked = require('marked');
var Promise = require('bluebird');
var path = require('path');
var mjAPI = require("mathjax-node/lib/mj-single.js");
var htmlPdf = require('html-pdf');
mjAPI.start();
marked.setOptions({
  highlight: function (code, lang, callback) {
    if(lang=='tex'){
        return mjAPI.typeset({
            math: code,
            format: "TeX", // "inline-TeX", "MathML"
            svg:true, //  mml:true,
        }, function (data) {
            if (!data.errors){
                return callback(null, data.svg);//data.mml
            }
            console.log('failed to convert ', code, data.errors)
            return callback(data.errors);
        });
    }
    return callback(code);
  }
});
var input = process.argv.splice(2)[0];
var inputStr = fs.readFileSync(input).toString();
var basename = path.basename(input, '.md');
return toHtml(inputStr, basename+'.html').then(function(htmlStr){
    return toPdf(htmlStr, basename+'.pdf');
}).then(()=>console.log('done')).catch((err)=>console.log(err, err.stack));

function toHtml(str, output){
    return new Promise(function(resolve, reject){
        return marked(str, function(err, res){
            if(err){return reject(err)}
            return resolve(res);
        }) 
    }).then(function(html){
        fs.writeFileSync(output, html);
        console.log('written '+output);
        return html;
    })
}
function toPdf(htmlStr, output){
    return new Promise(function(resolve, reject){
        return htmlPdf.create(htmlStr, {}).toFile(output, function(err, res) {
            if(err){return reject(err)};
            console.log('written '+res.filename);
            return resolve();
        });
    })
}

./package.json
Code: Tout sélectionner
{
  "name": "md2mml",
  "version": "0.0.1",
  "dependencies": {
     "marked":"0.2.x",
    "mathjax-node":"0.5.1",
    "bluebird":"3.4.6",
    "html-pdf":"2.1.0"
  }
}

./test.md
Code: Tout sélectionner
blabla
```tex
\left|\sum_{k = 1}^n a_{ik}b_{kj}\right| \leq \sum_{k = 1}^n |a_{ik}b_{kj}|
```
whatever
```js
 console.log("hello");
```

si tu es sous windows, mes condoléances
Code: Tout sélectionner
bob$ npm install
bob$ node app test.md


te génèrent test.html et test.pdf
le premier pb est que phantomJS (que j'utilise pour créer un pdf) ne (2.1) ne semble pas supporter le mathml, ce qui oblige à convertir les formules tex du markdown en svg au lieu de bénéficier directement du mathml et c'est pas très joli. On pourrait installer une extension pour firefox pour lancer la convertion html en pdf depuis ligne de commande mais ca nous amène au deuxième pb:

le deuxième pb c'est que pour avoir un beau pdf, il faut également définir une feuille de style (@media print) et c'est assez relou (ca prend 3h au lieu de 30min si on est une quiche du css et/ou qu'on veut être fin...)

donc effectivement pour faire des pdfs c'est pe pour l'instant pas la meilleure solution...
(par exemple avoir un latex tout fait c'est dispo sur le net, puis directement écrire en tex c'est pas la mort)
la vie est une fête :)

Razes
Membre Rationnel
Messages: 964
Enregistré le: 28 Juil 2014, 19:24

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Razes » 08 Sep 2016, 00:33

Garamond a écrit:@Razes : Avec plaisir :-) Attention, le PC c'est la machine, pas le système : sur un PC tu peux mettre windows, linux, freebsd, macos, ...
Ne t’inquiète pas de ce coté,

Revenons à ton sujet: d'après mes souvenir, quand je créais un fichier , l'impression se faisait en deux phases. Je me rappelle aussi d'un problème qu'on avait avec les lettres avec accent, on avait crée une moulinette en langage C, qui lisait le fichier avec les lettres accentuées et les remplaçait par les instructions . Est ce possible de faire un truc similaire pour résoudre ton problème?

Dans ton code java, je ne vois aucune directive ou instruction qui accède au paramétrage.
Modifié en dernier par Razes le 09 Sep 2016, 09:27, modifié 1 fois.

Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 08 Sep 2016, 18:39

fatal_error a écrit:le premier pb est que phantomJS (que j'utilise pour créer un pdf) ne (2.1) ne semble pas supporter le mathml, ce qui oblige à convertir les formules tex du markdown en svg au lieu de bénéficier directement du mathml et c'est pas très joli. On pourrait installer une extension pour firefox pour lancer la convertion html en pdf depuis ligne de commande mais ca nous amène au deuxième pb:

le deuxième pb c'est que pour avoir un beau pdf, il faut également définir une feuille de style (@media print) et c'est assez relou (ca prend 3h au lieu de 30min si on est une quiche du css et/ou qu'on veut être fin...)

donc effectivement pour faire des pdfs c'est pe pour l'instant pas la meilleure solution...
(par exemple avoir un latex tout fait c'est dispo sur le net, puis directement écrire en tex c'est pas la mort)


C'est clair aussi que me retrouver avec un beau pdf fait avec LaTeX c'est chouette.

Écrire en TeX c'est pas la mort, mais quand tu as goûté aux langages de balisage légers comme Markdown ou autre, c'est quand-même très appréciable. Du coup, je me retrouve avec le meilleur des deux mondes.

Merci pour ta recherche dans le monde des possibles. Il en ressort en ce qui me concerne qu'écrire en Markdown avec tu TeX intégré (par exemple entre les dollars) est ce qui est le plus léger à écrire, et c'est interprétable directement par Pandoc. Pour ce qui est de la publication sur le web, la solution la plus cohérente et fiable pour le moment semble être celle retenue par les développeurs de Hugo, où il faut mettre des balises code `comme ceci` ou :

```
Comme ceci.
```

Garamond
Membre Naturel
Messages: 15
Enregistré le: 04 Aoû 2016, 18:59

Re: Publier un document Markdown+LaTeX en PDF et sur un blog

par Garamond » 10 Sep 2016, 16:45

Bon,
Donc pour le moment la solution que je retiens est de rédiger en mettant les formules dans les blocs de code de Markdown. Si je veux ensuite passer par Pandoc, il est très simple de faire un rechercher-remplacer et de supprimer toutes les occurrences de backquotes. Et ça me permet surtout de ne pas avoir à mettre partout ces backquotes a posteriori (j'ai essayé, c'est râlant…).

Par contre, j'ai toujours des bugs dans la version web du document. Voyez plutôt : http://www.topologix.fr/sujets/2016-09_supelec-jp/

Les blocs de code restent…

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite