SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 235 visiteurs en ce moment

Accueil > Rédaction > Imprimer et PDF > SPIP2LaTeX > Version PDF avec SPIP2LaTeX

Version PDF avec SPIP2LaTeX

13 janvier 2011 – par Emmanuel Dreyfus, Florence HENRY – 87 commentaires

8 votes

SPIP2LaTeX converti le langage de marquage de SPIP en LaTeX. Utilisé avec une installation de LaTeX, il permet de produire des versions PDF des articles d’un site.

Le style par défaut des PDF produits est peu excitant, l’usager final voudra sans aucun doute procéder à une personnalisation.

Voir un exemple de beau PDF.

Configuration du serveur web

Le serveur web doit avoir la commande pdflatex dans son PATH. SPIP doit aussi être capable de charger les URL  ?page=latex (voir ci-dessous) depuis localhost. Ceci requiert allow_url_fopen=true dans php.ini et un accès anonyme autorisé depuis 127.0.0.1

URL introduites par le plugin

Version LaTeX d’un article ou d’une rubrique :

 http://www.example.net/?page=latex&id_article=4
 http://www.example.net/?page=latex&id_rubrique=7

Version PDF d’un article ou d’une rubrique :

 http://www.example.net/?page=pdf&id_article=4
 http://www.example.net/?page=pdf&id_rubrique=7

On peut aussi ajouter la ligne suivante tout au début du squelette
article.html pour obtenir la version PDF en ajoutant  ?formatpdf=1 a
la fin de l’URL d’un article.

[[(#INCLUDE{fond=latex/document.tex,env}|
        spip2latex_pdf{[(#ENV**|unserialize)]})](#ENV{formatpdf})]

Modèles introduits par le plugin

Faire un lien vers la version PDF d’un article ou d’une rubrique avec un modèle :

 <pdf0|id_article=4>
 <pdf0|id_rubrique=7>

On peut aussi faire le lien dans un squelette, avec la balise #MODELE :

 [(#MODELE{pdf}{id_article=#ID_ARTICLE})]

Pour personnaliser l’affichage, il faut appliquer des styles CSS à la classe .spip2latex_pdf

Personnalisation des PDF produits

Le squelette latex.html utilise #INCLURE sur latex/document.tex.html, qui utilise à son tour #INCLURE sur les noisettes suivantes :

  • latex/preambule.tex.html avant \begin{document}
  • latex/entete.tex.html après \begin{document} mais avant le contenu
  • latex/pied.tex.html après le contenu mais avant \end{document}

Il faut surcharger ces noisettes pour personnaliser l’affichage des PDF produits. latex/preambule.tex.html est particulièrement intéressant à ce titre, car c’est là que sont définis les styles des éléments traduits depuis SPIP. Voici les commandes et environnements LaTeX candidats à la surcharge :

Environnements LaTeX utilisés par SPIP2LaTeX
environnements LaTeXUsage
spiptolatexthead Titre de colonne de table
spiptolatextsummary Description de table
spiptolatexexergue Pour [* Texte mis en evidence *]
spiptolatexaltexergue Pour [** Texte mis en evidence (alternatif) *]
spiptolatexquote Pour <quote>Citation</quote>
spiptolatexcadre Pour <cadre>Texte encadré</cadre>
spiptolatexpoesie Pour <poesie>Poésie</poesie>
spiptolatexcode Pour <code>Code source</code>
spiptolatexright Pour [/ Alignement à droite /]
spiptolatexcenter Pour [| Centrage |]

Langue et jeu de caractère

Les squelettes de base de SPIP2LaTeX tentent de configurer la langue et le jeu de caractère. Seules ont été testées pour l’instant les associations de français et anglais d’une part, et ISO-8859-1 et UTF-8 d’autre part.

Pour ce qui est de la langue, le filtre spip2latex_lang tente de convertir le code langue ISO de l’article en option de langue pour le paquetage babel. Si une langue ne passe pas, il est toujours possible de surcharger latex/preambule.html, mais il serait encore mieux de modifier le filtre spip2latex_lang dans le fichier spip2latex.php et de contribuer la modification, pour que les autres en profitent.

Le jeu de caractère de sortie est par défaut ISO-8859-1. Un formulaire CFG permet de configurer globalement un autre jeu de caractère. Il est aussi possible de remplacer dans un squelette le jeu de caractère par défaut, en utilisant la balise #SPIP2LATEX_CHARSET.

Invoquée avec un argument, elle permet de fixer le jeu de caractère de sortie de SPIP2LaTeX, c’est ce qui est fait dans le squelette latex/document.tex.html, mais on la ré-invoquer dans une noisette si on le souhaite, pour choisir un autre jeu de caractères. Utilisée sans argument, elle renvoie le jeu de caractère courant. Le squelette latex/preambule.html l’utilise sans argument, pour configurer le paquetage inputenc avec le jeu de caractère courant.

Le jeu de caractère de sortie de SPIP2LaTeX n’est pas contraint par le jeu de caractère utilisé par SPIP. Une conversion aura lieu si nécessaire.

Production de code LaTeX par les modèles

Lorsqu’un modèle <trucXX> est rencontré, SPIP2LaTeX utilise modeles/latex_truc.html pour obtenir du code LaTeX. Le plugin fournit des modèles pour <docXX> et <imgXX>, qui peuvent être
surchargés en redéfinisant les fichiers modeles/latex_doc.html et modeles/latex_img.html

Vous devez produire des versions LaTeX pour vos modèles personnalisés.

Problèmes de cache

Les pages  ?page=latex&id_article=xxx ne sont pas caché. Les squelettes qui les construisent voient en revanche leur forme compilée tomber dans le cache. Il est donc necessaire de recharger  ?page=latex&id_article=xxx&var_mode=recalcul après avoir modifé latex/(preambule|entete|pied).tex.html

Les PDF générés sont cachés jusqu’à ce que l’article ou la rubrique correspondant soit calculé, ce qui se produit normalement après qu’un utilisateur l’ait modifié. Il est aussi possible de purger le cache d’un PDF en ajoutant  ?var_mode=calcul à l’URL qui permet de le télécharger.

Dernière modification de cette page le 10 avril 2013

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 3 février 2012 à 06:47, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Je viens de publier SPIP2LaTeX 1.1 :

    • on ajoute un argument var au filtre spip2latex, pour produire un nom de fichier différent et ainsi avoir plusieurs versions en cache. var est utilisé pour produire la hash du nom du fichier en cache :
      spip2latex_pdf(#ENV**, passes, var
    • L’environnement de spip2latex_pdf peut inclure une variable fichier dont la valeur est utilisée pour déterminer le nom du fichier présenté au navigateur.

    Répondre à ce message

  • Le 10 octobre 2011 à 17:55, par Christophe En réponse à : Version PDF avec SPIP2LaTeX

    Bonjour,

    je suis un ultra newsbie en Spip (2.1.11), ça c’est dit.
    Pour m’excercer je l’ai installé en local sur lampp Ubuntu.

    J’aurais 2 questions en amont :

    1. lors de la configuration du serveur web : qu’entendez-vous par

      Le serveur web doit avoir la commande pdflatex dans son PATH ?

    2. comment faut-il s’y prendre pour donner

      accès anonyme autorisé depuis 127.0.0.1 ?

    Enfin, j’ai tenté d’installé le plugin, et d’éditer un article de test avec le modèle :

    1. [(#MODELE{pdf}{id_article=#ID_ARTICLE})]

    Lorsque je clique sur l’icône pdf, j’obtiens l’erreur suivante :

    1. <b>Warning</b>: readfile(/opt/lampp/htdocs/spip/tmp/cache/latex/article1/27bd4e247abb2ff99c6e4d697d8d052e2d3b6b20.log) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: Aucun fichier ou dossier de ce type in <b>/opt/lampp/htdocs/spip/plugins/auto/spip2latex-1.0.1/spip2latex.php</b> on line <b>1406</b><br />

    J’ai parcouru en vain le forum ainsi que Big G pour trouver les solutions à ces problèmes.
    Donc, si une âme charitable pouvait ne serait-ce que me donner une petite piste, je ne cherche pas à ce qu’on me mâche le travail, hein, ce serait bienvenu !

    Merci d’avance.

    • Le 11 octobre 2011 à 15:48, par Christophe En réponse à : Version PDF avec SPIP2LaTeX

      Re bonjour,

      je fais suite à mon poste, car depuis mes investigations, apparement il n’y pas de fichier *.log généré dans le dossier /tmp/cache/latex/ mais un fichier avec l’extension *.tex .

      Je penche de plus en plus vers un problème de PATH sur le serveur web (dans mon cas en locale avec Lampp) qui n’aurait pas accés à pdflatex.

      Je continue de chercher, mais bien sûr, un regard / une aide extérieur(e) serait bienvenu :)

      Merci

    Répondre à ce message

  • Le 16 juillet 2011 à 03:53, par ? En réponse à : Version PDF avec SPIP2LaTeX

    salut
    je suis sous spip 2.1.10 derniere version a cette date, j’ai l erreur suivante en click sur le lien pdf
    Warning : filesize() [function.filesize] : stat failed for /home/dinebout/public_html/pwwo/tmp/cache/latex/article6/e24f1000e64d0dfeb9213c5a402ed0571bcb6f79.log in /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php on line 1402

    Warning : Cannot modify header information - headers already sent by (output started at /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php:1402) in /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php on line 1404

    Warning : Cannot modify header information - headers already sent by (output started at /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php:1402) in /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php on line 1405

    Warning : readfile(/home/dinebout/public_html/pwwo/tmp/cache/latex/article6/e24f1000e64d0dfeb9213c5a402ed0571bcb6f79.log) [function.readfile] : failed to open stream : No such file or directory in /home/dinebout/public_html/pwwo/plugins/spip2latex-1.0.1/spip2latex-1.0.1/spip2latex.php on line 1406

    l’instalation spip est dans un sous domaine, pas de serveur.

    • Le 16 juillet 2011 à 10:17, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Le fichier de log de LaTeX n’a même pas été créé, cela suggère que SPIP n’a même pas réussi à exécuter la commande pdflatex. Est-ce que le champ « Commande LaTeX » du formulaire CFG est bien renseigné avec quelque chose de raisonnable ? Est-ce que le serveur web a bien les droits d’exécuter la commande ?

    • Le 16 juillet 2011 à 12:03, par ? En réponse à : Version PDF avec SPIP2LaTeX

      JE SUIS sous hebergement mutualisé, commade renseigné pdflatex
      merci

    • Le 16 juillet 2011 à 13:48, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      C’est à l’hébergeur qu’il faut le demander. Mais est-ce que LaTeX est même installé sur ce serveur ?

    Répondre à ce message

  • Le 4 juillet 2011 à 17:39, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Nouvelle version 1.0.1, corrigeant deux bugs

    • Une virgule dans le titre cassait la compilation LaTeX (\hypersetup prends ça pour un séparateur d’arguments)
    • les descriptifs d’images n’étaient pas pris en compte
    • Le 4 juillet 2011 à 18:01, par Maïeul En réponse à : Version PDF avec SPIP2LaTeX

      salut,

      par rapport à cela justement, je suis en train de créer un nouveau plugin qui ferait la même chose, à deux différences prés :
      -  il ne se chargera pas de la compilation en LaTeX, mais simplement de transformer du code spip en code LaTeX.
      -  il se base sur l’API Textwheel incluse dans SPIP 3 pour formaliser les transformation à operer.

      Par ailleurs il se trouve sur la zone (encore en cours de dev)

    • Le 4 juillet 2011 à 18:33, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      TextWheel pour réinventer la roue, en somme ? :-)

    • Le 4 juillet 2011 à 18:36, par Maïeul En réponse à : Version PDF avec SPIP2LaTeX

      pas seulement, aussi pour avoir quelquechose de structuré et facilement maintenable par d’autres.

    • Le 4 juillet 2011 à 19:04, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Je suis curieux de voir le résultat. Ma conclusion personnelle est qu’en l’absence d’une grammaire non ambigüe il est impossible de mener à bien la phase d’analyse syntaxique proprement. On est obliger de faire comme dans le noyau de SPIP, à savoir des enchainement de regex plus ou moins cabalistiques, et clairement peu maintenable. Mais j’adorerais avoir tort.

    • Le 4 juillet 2011 à 19:09, par Maïeul En réponse à : Version PDF avec SPIP2LaTeX

      sans doute, sans doute. Mais simplement depuis la 3.0 les raccourcis typo de spip sont passé en TexWheel et je m’aligne donc là dessus.

      Ceci dit, du peu que je vois pour le moment, effectivement on a encore pas mal de regexp cabalisitiques.

    Répondre à ce message

  • Le 9 février 2011 à 16:39, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Et voila notre version 1.0, soit-disant stable. Normalement c’est l’instant où une horde de nouveaux venus débarquent, testent le plugin, et trouvent une montagne de bogues :-)
    Nouveautés depuis 0.9.9
    -  Gestion des liens internes sans titre : on prend le titre de l’objet
    -  Configuration CFG pour indiquer a quelle longueur on tronque les URL
    -  C’est la 1.0

    Les prochains développements vont tourner autour de l’export de site entier, avec intégration du travail déjà fait par Matthieu à ce sujet, et la gestion des références.

    • Le 16 février 2011 à 20:23, par Corrobori En réponse à : Version PDF avec SPIP2LaTeX

      Si ça peut être utile je viens de tomber sur cette nouvelle classe php :

      Elle génère du pdf en prenant en compte utf8 RTL les langages de programmation ...

    • Le 17 février 2011 à 03:37, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Sans vouloir dévaloriser le travail fait dans le cadre du projet TCPDF, qui est sans aucun doute excellent, c’est un projet de plus pour produire du PDF, qui se confronte au même problème que les autres : faire un PDF ça n’est déjà pas trivial, mais faire une bonne mise en page, c’est beaucoup plus difficile.

      En la matière, le logiciel le plus avancé est sans aucun doute LaTeX, et de très loin. On peut lui reprocher la syntaxe cryptique de son langage et sa difficulté d’apprentissage, mais il bénéfice tout de même de 26 ans de recul en matière de mise en page.

      Le plugin SPIP2LaTeX fait le choix de s’appuyer sur LaTeX, pour une flexibilité et une qualité maximum dans le rendu des PDF. Le prix est la connaissance de LaTeX, qui n’a pas la courbe d’apprentissage la plus conviviale qui soit.

    • Le 17 février 2011 à 12:29, par Corrobori En réponse à : Version PDF avec SPIP2LaTeX

      OK,

      Je pensais que cette classe intervenait après la compilation par Latex et qu’elle ne dispensait pas de Latex. Au temps pour moi.

    • Le 17 février 2011 à 14:34, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      SPIP2LaTeX transforme la typo SPIP en LaTeX, et utilise la commande pdflatex de LaTeX pour en faire du PDF. Aucune librairie ou extension PHP n’est requise.

      Ce projet semble faire du PDF depuis de l’HTML, ce qui suggère qu’on pourrait faire un autre plugin, qui transformerait la typo SPIP en HTML (en fait c’est SPIP qui fait ça), et utiliserait TCPDF pour faire du PDF.

    • Le 22 février 2011 à 15:39, par Corrobori En réponse à : Version PDF avec SPIP2LaTeX

      Le prix est la connaissance de LaTeX, qui n’a pas la courbe d’apprentissage la plus conviviale qui soit.

      Soit. Passer par Latex me parait être le meilleur moyen de générer des notes de marges. Peut on imaginer qu’à partir d’une div comme encart on génère du marginpar{} ?

      Quelque chose comme spip2latex modeles/latex_encart qui fasse \marginpar #TEXTE  ?

      Je pense qu’il y a une façon élégante d’introduire les notes de marges dans SPIP par le biais du PDF. Tant qu’on reste dans le flux html on se contente d’un joli encadré stylé à son goût.

    • Le 22 février 2011 à 15:50, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Oui, tu peux tout à fait envoyer en marge les <cadre>texte encadré</cadre> ou les [** texte en exergue **], par exemple. il suffit de redéfinir spiptolatexcadre ou spiptolatexaltexergue.

    Répondre à ce message

  • Le 8 février 2011 à 14:42, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Version 0.9.9
    -  Ne pas garder les numéros de classements dans les noms des PDF
    -  Gestion de cache : on purge les PDF des que la base est modifiée
    -  Echappement correct des URL de glossaire, gestion de versions raccourcies
    -  Les listes numérotés fonctionnent
    -  Affichage correct du code PHP invalide dans les cadres

    Histoire de tenter un peu le diable, je l’ai marquée « stable »

    • Le 8 février 2011 à 15:38, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bon... ça devient bien là...
      Reste juste un soucis que je vois en regardant le PDF généré. Un texte tel que :

      1. Voir : [->art8], [->art9], [->art10]

      Génère : Voir : 1, 2, 3.
      Où 1, 2, 3 sont des notes en bas de page où l’URL est affichée.
      Cela devrait afficher : Voir : titre de l'article 1, titre de l'article 2, titre de l'article 3
      Où 1, 2 et 3 sont toujours les liens en bas de page.

      Autre chose, certains liens qui sont long sont coupés dans les notes en bas de page. Or, ce qu’on demande à un PDF, c’est de pouvoir être imprimé (il me semble), du coup, couper le texte des liens ne me parait pas pertinent, vu qu’une moitié de lien imprimé amène à un 404 inévitablement :)

      Du moins... une option pourrait nous départager :)

    • Le 8 février 2011 à 16:19, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Pour les liens vers des articles internes, en fait si il n’y a pas de texte du lien on doit prendre le titre de l’article ? Pas de soucis.

      Pour les troncatures d’URL, le mieux que je puisse proposer, c’est de rendre la longueur configurable via CFG, avec 0 pour ne pas tronquer. Mais bon les URL interminable, personne ne les recopie, hein...

    • Le 8 février 2011 à 17:26, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      • pour les liens internes, oui, c’est cela
      • pour les troncatures... tu as raison, je pense que l’option que tu proposes n’est pas mal :)

      Il va me rester 1 soucis ensuite. C’est que pour certains PDFs, les liens vers les articles doivent être externes (une URL est donc affichée) mais pour certains autres, qui contiennent, eux, par exemple l’intégralité des articles du site, les liens vers les articles doivent être internes au PDF, c’est à dire afficher le numéro de la page correspondante. Je me demande si une option au filtre |spip2latex_pdf{} ne pourrait pas dire cela... peut être que je me trompe.

      En tout cas, merci, les problèmes disparaissent les uns après les autres :)

    Répondre à ce message

  • Le 1er février 2011 à 10:58, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Nouvelle version 0.9.6, avec plein de trucs chouettes

    • Tout le jeu de caractere latin-1 peut etre utilise sans erreur
    • Ajouter la connaissance de latin-9
    • Formulaire CFG pour indiquer la commande pdflatex (ou xetex...)
    • Usage du cache SPIP pour les PDF
    • Correction pour le glossaire quand il y a des #

    Attention, pour ceux qui s’étaient fait une version PDF lorsque l’URL finii en  ?formatpdf=1, il y a un changement. On ne dit plus

    [(#ENV{formatpdf}|?{#SPIP2LATEX_PDF_OUTPUT{#URL_PAGE{latex}|
           url_absolue|parametre_url{id_article,#ID_ARTICLE}}})]

    Mais on dit :

    [[(#INCLUDE{fond=latex/document.tex,env}|spip2latex_pdf)](#ENV{formatpdf})]

    Dernier point, pour Matthieu : je n’ai pas trop compris l’objet de ta contribution $href = str_replace('#', '@\\#', $href);, je l’ai intégré, mais je me demande si il ne faudra pas le même type de traitement pour d’autres caractères spéciaux LaTeX, comme _ % ou &

    • Le 3 février 2011 à 10:06, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bien, je vais tester.

      Par rapport à ma ligne sur $href, c’est bien possible que ma correction soit insuffisante.

      Je te propose également d’éviter $GLOBALS['contexte'] dans spip2latex_pdf de la sorte :

      1. [(#INCLURE{fond=latex/document.tex,env}|spip2latex_pdf{ [(#ENV**|unserialize)] })]

      Et

      1. function spip2latex_pdf($texte, $contexte) {
    • Le 3 février 2011 à 10:25, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bien, déjà, toutes les erreurs que j’avais pu avoir sont corrigées par cette version, c’est extra ! Merci donc :)

      Je vais donc tenter d’aller un peu plus loin en exportant toute une rubrique... si j’y arrive :)

    • Le 3 février 2011 à 14:32, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Coquille :

      1. function spip2latex_traiter_raccourcis_glossaire($texte) {
      2. - include_spip('inc_lien');
      3. + include_spip('inc/lien');

      Télécharger

      J’ai un soucis dont je ne retrouve pas l’origine, sur [(#TEXTE**|spip2latex)] lorsqu’un article possède un glossaire [?mot#trac], il me dit que la fonction de l’extension « code » pour le porte plume nommée « glossaire_trac » est déjà définie, alors même que je vérifie justement son éventuelle existence avant, et que en théorie ce fichier n’est appelé qu’une seule fois (http://zone.spip.org/trac/spip-zone/browser/_plugins_/porte_plume_extras/codes/pp_codes_fonctions.php#L15). Si je mets[(#TEXTE*|spip2latex)], cela passe. Je vais essayer de poursuivre mes recherches.

    • Le 3 février 2011 à 14:57, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Pour href, tu pourrais essayer de faire les mêmes échappements que dans spip2latex_escape_latex0 (en ajoutant l’@), pour voir si ça continue de marcher ?

      Pour le $GLOBALS["contexte"], on doit déjà se le farcir pour spip2latex_insert_head, du coup ça motive moins pour s’en débarrasser. En tout cas ça m’aura appris que ENV c’est $GLOBALS["contexte"], je n’ai pas perdu ma journée.

      Pour le #TEXTE**, pour rappel, on a vraiment besoin de la double étoile pour pouvoir afficher <?php dans un bloc de code.

    • Le 3 février 2011 à 14:57, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Compris !

      C’est cet article qui fait planter : http://programmer.spip.org/Ajouter-un-type-de-glossaire

      En fait... le PHP est exécuté !
      Voilà qui nous met dans l’embarra !

    • Le 3 février 2011 à 16:17, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Je viens de tester pour $href latex0 (sans modification) et ça semble fonctionner :

      1. $href = extraire_attribut($ref, 'href');
      2. + $href = spip2latex_escape_latex0($href);
      3. - $href = str_replace('#', '@\\#', $href);

      Télécharger

    • Le 3 février 2011 à 16:52, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Concernant spip2latex_insert_head(), cet appel n’a pas sa place à mon avis.
      Il vaut mieux le faire dans spip2latex_pdf(), en passant $contexte dedans. Au passage, je ne vois pas pourquoi ne supprimer que les PDF de l’article en train d’être visité : si c’est pour qu’il ait son PDF à jour, c’est déjà le cas en utilisant le cache de SPIP et la fonction spip2latex_pdf(). Si c’est pour enlever de vieux PDFs qui ne sont potentiellement plus à jour, autant supprimer tout le répertoire latex/.

      Je proposerais donc de supprimer tous les PDF dès que la date de modification de SPIP a changé (donnée par $GLOBALS['meta']['derniere_modif'] qui serait à stocker par exemple dans spip2latex/date_purge).

      Ainsi, même lorsqu’un PDF ne dépend pas directement d’un article (par exemple là, j’essaie d’exporter tout le site en PDF), mon PDF doit se recalculer (ça il le fait déjà) et supprimer les anciens (alors même que le PDF n’est pas stocké dans latex/articleNN donc)

      Je sais pas si je suis très clair dans mes explications.


      Bon, par contre, va falloir trouver une solution pour faire soit fonctionner [(#TEXTE*|spip2latex_pdf)], soit [(#TEXTE**|...)] en créant une fonction à peu près équivalente à interdire_script de SPIP pour latex... J’ai aussi d’autres catastrophes sur des articles ayant des codes PHP intégrés pas tout à fait valide.

      Exemple dans le texte d’un article (avec le cadre de classe php) (à appeler avec ?page=latex&id_article=117&var_mode=recalcul) :

      1. <?php
      2. tu_plantes();
      3. ?>

      Télécharger

    Répondre à ce message

  • Le 25 janvier 2011 à 06:03, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Nouvelle version 0.9.4

    • gestion correcte de la ligature du œ
    • formulaire CFG pour indiquer l’encodage de sortie
    • la sortie UTF-8 fonctionne (NB : on sucre les accents dans les listings)
    • la langue est donnée au paquetage babel à partir de la langue de l’article

    Ma liste de problèmes à corriger est vide, hormis la demande de Matthieu concernant les modèles latex non trouvés, pour laquelle je ne suis pas certain de la bonne route à prendre. Peut être faudrait-il que ce soit configurable.

    • Le 27 janvier 2011 à 21:21, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Je testerai dès que j’ai un peu de temps, pour vous ajouter quelques bugs :)
      Ce serait dommage que vous vous ennuyiez !

      Matthieu ^^

    • Le 29 janvier 2011 à 13:02, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Bien...

      Alors, quelques remarques :

      • le formulaire CFG fait appel à IMG/spip2latex24.png. Ou a #DOSSIER_SQUELETTES/../IMG/spip2latex.png, ce qui n’est pas correct. Il faut utiliser #CHEMIN{IMG/spip2latex.png}, mais il vaudrait mieux nommer le répertoire « images » ou « img » pour éviter la confusion avec IMG/ du site SPIP
      • j’obtiens l’erreur sur ?page=latex&id_article=120 : Missing argument 1 for spip2Latex_charset() alors même que je l’ai déclaré « utf-8 » et validé le formulaire CFG. L’erreur vient de \usepackage[#SPIP2LATEX_CHARSET]{inputenc} dans le préambule, qui n’a pas le charset passé en paramètre de la balise (mettre : \usepackage[#SPIP2LATEX_CHARSET{#CONFIG{spip2latex/encodage, iso-8859-1}}]{inputenc} )
      • lorsque le code est trop long, le retour à la ligne ne semble pas se faire (du moins dans une liste). Peut être que l’on n’y peut rien ?
      • le code parait écrit plus gros. Est-ce simplement le type de police qui change ?

      La suite au prochain épisode :)

      PNG - 79.6 ko
    • Le 29 janvier 2011 à 14:34, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Je me demande si dans la page pdf.html, à la place d’un appel à une URL externe (qui ne comprendra pas un éventuel ?var_mode=calcul, il ne faudrait pas tester un :

      1. [(#FILTRE{spip2latex_pdf_output})]
      2. [(#INCLURE{fond=latex, env})]

      Télécharger

      De la sorte, c’est le filtre (à adapter) qui ferait les post-traitements pour passer à PDF, et on pourrait bénéficier d’un cache.

    • Le 29 janvier 2011 à 15:17, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bon, ça ne va pas avec #FILTRE : il filtre le code PHP généré... mais les inclusions ne sont pas encore dedans. Peut être avec le pipeline affichage_final...

      Déjà, je pense que ajouter : || in_array(_request('var_mode'), array('calcul', 'recalcul')) au moment du test des sources existantes pourrait aider à ce que &var_mode=calcul sur la page pdf le recalcule effectivement.

      1. if (!file_exists($pdffile) || (filesize($pdffile) == 0) || in_array(_request('var_mode'), array('calcul', 'recalcul'))) {

      Dans cette condition, tu pourrais utiliser la fonction de SPIP ecrire_fichier() au passage : if (ecrire_fichier($texfile, $texte) == FALSE) {...}

    • Le 29 janvier 2011 à 16:28, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Bon, alors en vrac :

      • J’ai fait la correction pour DOSSIER_SQUELETTE, mais il faut savoir que j’avais pompé ça du module barre typo, qui vu son grand age me semblait irréprochable. Il y a peut être une suggestion à faire là bas.
      • IMG a été remplacé par img
      • J’ai intégré tes suggestions pour le var_mode=calcul des pdf, et le ecrire_fichier().

      Sur l’idée de faire passer les PDF dans le cache de SPIP. Ca serait mieux, mais je ne suis pas très optimiste. En particulier, il faudra un moyen de purger le PDF lorsque l’article correspondant est calculé.

      Sur la balise #SPIP2LATEX_CHARSET :
      Son argument est censé être optionnel. Sans argument, la balise est doit renvoyer ce qu’on lui a passé avant, ou ce qui a été configuré dans le module CFG, ou à défaut latin-1. L’idée est que latex.html fixe la valeur à ce qu’on trouve via CFG, ou latin-1 à défaut, mais que l’usager qui surcharge latex/preambule.html a toujours la possibilité d’utiliser autre chose. Je ne doute pas que ce besoin se fera sentir sur un site multilingue, dans la mesure où utf-8 en LaTeX est un sport difficile, et où latin-1 est évidemment limité.

      J’ai mis une valeur par défaut pour faire taire le warning PHP

      Et nous voila avec une version 0.9.5

    • Le 29 janvier 2011 à 19:23, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bon... après re réflexions sur cette histoire de .pdf et de cache... je pense vraiment qu’il faut laisser SPIP gérer le cache du fichier, en mettant dans le squelette PDF les entêtes qu’il faut (notamment pour dire que c’est un fichier pdf) ET le code source du PDF généré. Ainsi, on pourrait bénéficier de #CACHE et de ?var_mode=calcul sur ce fichier. C’est peut être quelque chose comme (testé) :

      1. [(#INCLURE{fond=latex,env}|spip2latex_source_pdf_avec_cache)]

      Et la fonction (rapidement faite, notamment, il n’y a pas là de gestion du nom du fichier...)
      Il faudrait peut être passer objet/id_objet à la fonction le cas échant pour calculer le titre du document. Je n’ai testé qu’avec ma configuration UTF-8 :

      1. <?php
      2. function spip2latex_source_pdf_avec_cache($texte) {
      3. $filename = "document.pdf";
      4.  
      5. $latexdir = sous_repertoire(_DIR_CACHE, 'latex');
      6. $tmpdir = sous_repertoire($latexdir, $tag);
      7. $tmpdir = sprintf("%s/%s", getcwd(), $tmpdir);
      8.  
      9. $id = sha1($texte);
      10. $texfile = sprintf("%s%s.tex", $tmpdir, $id);
      11. $pdffile = sprintf("%s%s.pdf", $tmpdir, $id);
      12. $logfile = sprintf("%s%s.log", $tmpdir, $id);
      13. $idxfile = sprintf("%s%s.idx", $tmpdir, $id);
      14. $auxfile = sprintf("%s%s.aux", $tmpdir, $id);
      15. $outfile = sprintf("%s%s.out", $tmpdir, $id);
      16.  
      17. ecrire_fichier($texfile,
      18. # bug/feature de fwrite... il faut utf8_encode dans la fonction pour qu'il comprenne qu'on souhaite de l'utif8 !
      19. unicode_to_utf_8(utf_8_to_unicode($texte))
      20. );
      21.  
      22. $cmd = sprintf("pdflatex -interaction=batchmode ".
      23. "-output-directory=%s %s",
      24. $tmpdir, $texfile);
      25. exec($cmd, $output, $retval);
      26.  
      27. if ($retval) {
      28. // gerer l'erreur (avec erreur_squelette ?)
      29. } else {
      30. $filesize = filesize($pdffile);
      31. $etag = sprintf("\"%s\"", md5($pdffile));
      32.  
      33. #supprimer_fichier($pdffile); // no no no
      34. supprimer_fichier($idxfile);
      35. supprimer_fichier($auxfile);
      36. supprimer_fichier($logfile);
      37. supprimer_fichier($outfile);
      38. supprimer_fichier($texfile);
      39. }
      40.  
      41. $headers = array(
      42. "Content-Type: application/pdf",
      43. "Content-Disposition: attachment; filename=\"$filename\"",
      44. "Content-Transfer-Encoding: binary",
      45. "Content-Length: ".$filesize,
      46. "Etag: ".$etag
      47. );
      48.  
      49. foreach ($headers as $n=>$header) {
      50. $headers[$n] = "<?php header(\"$header\"); ?>";
      51. }
      52.  
      53. return implode('', $headers)."<?php readfile(\"$pdffile\"); ?>";
      54. }
      55. ?>

      Télécharger

      + retirer le header text/plain sur latex.html, qui contredit celui de pdf.html pour le coup (mais il pourrait peut être rester, je n’ai pas testé).

      De la sorte : la fonction est appelée sur les calculs et calcule dans ce cas systématiquement le PDF. Les risques sont :

      • disparition du fichier PDF (ça n’a pas vraiment lieu d’être et il sera recréé au prochain calcul)
      • comment actualiser lorsque le contenu de l’objet est mis à jour : bien on laisse faire SPIP, qui rend obsolète son cache dès qu’une modification en base est effectuée... (en fait c’est pas un risque, ça marche !)

      PS : je testais avec la version 0.9.4

    • Le 29 janvier 2011 à 19:29, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Sur la balise #SPIP2LATEX_CHARSET :
      Son argument est censé être optionnel. Sans argument, la balise est doit renvoyer ce qu’on lui a passé avant, ou ce qui a été configuré dans le module CFG, ou à défaut latin-1.

      Dans ce cas, il y a un problème dans le code, car il n’y a pas de « sinon » d’écrit pour la balise, si on la met vide :

      1. function balise_SPIP2LATEX_CHARSET($p) {
      2. $charset = interprete_argument_balise(1,$p);
      3. $p->code = 'spip2latex_charset('.$charset.')';
      4. // -> quelque chose d'à peu près comme ça :
      5. $p->code = 'spip2latex_charset(sinon('.$charset.', lire_config('spip2latex/charset', 'latin1')))';
      6. return $p;
      7. }

      Télécharger

    • Le 29 janvier 2011 à 19:40, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      La fonction spip2latex_charset() met maintenant une valeur par défaut si on lui passe NULL, du coup ça devrait marcher.

      Je regarde plus tard pour ton autre message, qui constitue une modification un peu plus intrusive.

    • Le 31 janvier 2011 à 16:24, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Matthieu : j’ai mis en place ta suggestion avec spip2latex_source_pdf_avec_cache, mais il y a un soucis : le PDF calculé avec pdflatex ne nous sert plus une fois que SPIP a mis le PDF en cache, mais quand est-ce qu’on va l’effacer ?

    • Le 31 janvier 2011 à 18:14, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Ah oui, mais non : il ne faut pas le supprimer :p
      Ce que l’on met dans le fichier cache est l’envoi du fichier (readfile()), donc, il faut toujours le fichier.

      Ce qui serait à supprimer par contre, ce sont les vieux fichiers PDF lorsque le sha1 du texte a changé (ie : l’article ou le contenu a été mis à jour). Mais je n’ai pas plus d’idées que la solution que tu emploies déjà je crois ?

      En fait, je pense que lors de la création d’un PDF (donc lors d’un calcul du squelettes pdf.html, dans la fonction _avec_cache() ), il faut regarder la date de modification des contenus (c’est une meta SPIP employée pour la gestion du cache). Si elle a changé, il faut lancer la suppression des PDF, avant de créer celui demandé (et de la même manière avec ?var_mode=recalcul).

    • Le 31 janvier 2011 à 20:22, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Je m’étais ajouté également la possibilité, sur la vue d’un article ou d’une rubrique, d’ajouter &format_sortie=pdf pour que ça retourne le pdf. Peut être que cela peut d’intéresser de l’intégrer :

      Plugin.xml

      1. <pipeline>
      2. <nom>styliser</nom>
      3. <inclure>spip2latex.php</inclure>
      4. </pipeline>

      Télécharger

      Dans spip2latex.php :

      1. function spip2latex_styliser($flux) {
      2. if ($flux['args']['contexte']['format_sortie'] == 'pdf') {
      3. if (in_array($flux['args']['fond'], array('article', 'rubrique'))) {
      4. $base = find_in_path("pdf." . $flux['args']['ext']);
      5. $squelette = substr($base, 0, - strlen("." . $flux['args']['ext']));
      6. $flux['data'] = $squelette;
      7. }
      8. }
      9. return $flux;
      10. }

      Télécharger

      PS : j’ai certains pdfs se générant bien (ils sont dans le cache), mais qui ne s’envoient pas correctement depuis le PHP (0 octets reçus). Faut que je comprenne ce qui cloche.

    • Le 31 janvier 2011 à 21:19, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      J’ai trouvé pourquoi sur certaines pages il ne me l’envoie pas correctement. Enfin j’ai trouvé que le pdf a une erreur dedans, mais est bien créé. Du coup, comme je calculais la taille du fichier qu’en cas de réussite du pdf, il m’inscrivait une taille 0. Bref, en calculant la taille du fichier même en cas d’erreur (pour certaines, ça doit passer), c’est déjà mieux, il me l’envoie.

      Reste l’erreur...
      Ça vient de mon raccourcis [?...#trac] dans les phrases tel que :

      1. Dans ces cas là, elles sont déclarées (dans SPIP) soit dans le fichier [?ecrire/public/balises.php#trac], soit dans le répertoire [?ecrire/balise/#trac]

      Ma fonction php pour gérer ce glossaire me retourne une URL du style : http://core.spip.org/trac/spip/browser/@file@?rev=spip-2.1 à laquelle il ajoute parfois #L123 où 123 est un numéro de ligne.

      Le code LaTeX généré semble pourtant en tenir compte, mais peut être pas entièrement (?) :

      1. Dans ces cas là, elles sont déclarées (dans SPIP) soit dans le fichier \href{http://core.spip.org/trac/spip/browser/ecrire/public/balises.php\?rev=spip-2.1}{ecrire/public/balises.php\}\footnote{\url{http://core.spip.org/trac/spip/browser/ecrire/public/balises.php\?rev=spip-2.1}}, soit dans le répertoire \href{http://core.spip.org/trac/spip/browser/ecrire/balise/\?rev=spip-2.1}{ecrire/balise/\}\footnote{\url{http://core.spip.org/trac/spip/browser/ecrire/balise/\?rev=spip-2.1}}

      Dans le log de la génération, on trouve notamment :

      1. LaTeX Warning: No \author given.
      2.  
      3. Runaway argument?
      4. {ecrire/public/balises.php\}\footnote {\url {http://core.spip.org/tra\ETC.
      5. ! Paragraph ended before \hyper@link@ was complete.
      6. <to be read again>
      7. \par
      8. l.198
      9.  
      10. I suspect you've forgotten a `}', causing me to apply this
      11. control sequence to too much text. How can we recover?
      12. My plan is to forget the whole thing and hope for the best.

      Télécharger

      Personnellement, ça ne me parle pas trop :)

    • Le 31 janvier 2011 à 21:43, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Je viens de voir une coquille :
      L. 883 chez moi (mais j’ai ajouté des choses styles spip_log pour débugguer) :

      1. - if (substr($href, 0, 3) == '@\\#')
      2. + if (substr($href, 0, 4) == '@\\#')
      3. $rep = $titre;

      Télécharger

    • Le 31 janvier 2011 à 21:58, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      @coquille : c’est moi la coquille pour le coup... \ ne faisant qu’un seul caractère... désolé :) c’était bien 0, 3 donc :)

      Pour la correction du glossaire... j’ai appliqué ça (à la vavite), et ça semble fonctionner. Il y a certainement mieux à faire :

      1. + $t = str_replace('@\\', '', $t);
      2. list($t, $bulle, $hlang) =
      3. traiter_raccourci_lien_atts($t);

      Télécharger

    • Le 31 janvier 2011 à 22:05, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Autre bug, ou pas (?) Lorsqu’on fait un copier/coller de texte de cadre de code issu d’un PDF généré, on obtient des espaces entre toutes les lettres. Les appostrophes ne sont pas correctes non plus : elles se sont francisées :

      1. $ t a b l e _ d e s _ t r a i t e m e n t s [ ’ BALISE ’][] = ’ traitement (% s
      2. );
      3. // remarquer ’ à la place de ' ainsi que l'espace entre chaque lettre.

      Télécharger

    • Le 31 janvier 2011 à 22:26, par marcimat En réponse à : Version PDF avec SPIP2LaTeX

      Bon bon bon...
      En ajoutant

      1. $href = extraire_attribut($ref, 'href');
      2. + $href = str_replace('#', '@\\#', $href);

      Télécharger

      J’arrive à générer cette page sans erreur qui contient un raccourcis [?...#trac123].

      On avance :)
      Je suis content !

    Répondre à ce message

  • Le 21 janvier 2011 à 04:10, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

    Nouvelle version 0.9.3
    -  Traduire en LaTeX un peu d’HTML : <h1> à <h5>, <b>, <i>
    -  Honorer le marquage pour les glossaires
    -  Utiliser le class="langage" das cadres
    -  Balise SPIP2LATEX_CHARSET pour choisir le jeu de caractère de sortie
    -  Distinction entre code en ligne et en bloc

    Moyennant de surcharger le latex.html et le latex/preambule.tex.html, il est donc maintenant possible de sortir en UTF-8 pour faire du RTL.

    Il y a un soucis avec le code PHP verbatim : dans la version 0.9.2, on obtenait la version LaTeX du corps d’un article avec TEXTE*|spip2latex. Dans ce cas, si je met <?php dans l’article, interdire_scripts() intervient après le filtre spip2latex et me le transforme en &lt;?php. L’entité HTML est affichée dans le PDF à la place du chevron, ce qui n’est pas le but recherché.

    La seule solution que j’ai trouvé, c’est d’utiliser la double étoile : TEXTE**|spip2latex. Le <?php n’est plus modifié par interdire_scripts(), mais le code PHP est exécuté par le serveur, ce qui n’est pas souhaitable non plus. La parade mise en œuvre dans cette version 0.9.3, qui demande une relecture de la part de connaisseurs, consiste à ce que spip2latex remplace <? par <?php echo "<?"; ?>. Est-ce raisonnable ?

    • Le 22 janvier 2011 à 19:35, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Je n’ai pas tout suivi pour interdire_scripts...
      Mais c’est une question de sécurité que le chevron soit transformé en entité html. Il n’y a pas à avoir de <?php dans un article en dehors d’une boucle <code> ou <cadre> ! Donc que ce soit échappé est très bien !

      Je suis ennuyé pour voir ce qui a changé entre les 2 versions. Croyez-vous possible de déposer le plugin sur la zone et de le modifier par SVN. J’ai l’impression que ce serait plus simple pour suivre le développement.

    • Le 24 janvier 2011 à 21:46, par ? En réponse à : Version PDF avec SPIP2LaTeX

      Merci infiniment de votre temps et de votre fidelité à spip,
      Merci

    Répondre à ce message

  • Le 13 janvier 2011 à 19:58, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

    bon... voilà quelque chose d’intéressant.

    Pourrais tu en dire plus sur la façon de personnaliser le PDF généré. Qu’est-ce que mange le transformateur pour faire la décoration ? Ou est-ce que Latex contient des information de décoration ? (je n’y connais rien en latex).

    • Le 14 janvier 2011 à 03:10, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Bon, alors sans y connaitre rien en LaTeX, ça va être dur. Note que moi non plus je n’y connais pas grand chose, mais j’ai une co-auteur qui maitrise le sujet, je vais la laisser répondre dans les détails. A titre d’exemple éclairant, je copie/colle juste un bout d’incantation à mettre dans le preambule.tex.html pour que les <poesie> soient mis en page dans un cadre à fond bleu clair.

      \renewenvironment{spiptolatexpoesie}{%
             \definecolor{shadecolor}{rgb}{0.741,0.863,0.945} % bleu clair
             \def\FrameCommand{%
             \setlength{\fboxsep}{2.5ex}%
             \colorbox{shadecolor}}
             \MakeFramed {\advance\hsize-\width \FrameRestore}}%
             {\endMakeFramed}
    • Le 14 janvier 2011 à 08:13, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      J’ai étudié hier soir un peu le livre Framabook sur LaTeX. Ils parlent de séparation de fond et de forme comme avec HTML / CSS... mais autant pour le fond, Latex semble très clair dans ses possibilités (ce qui m’intéresse est faire un export de Programmer.spip.org en LaTeX puis en PDF, notamment avec l’environnement « book »), autant la mise en forme à l’air extrêmement compliqué (bien plus que CSS en tout cas). Je n’ai pas encore compris comment faire d’ailleurs !

      Je serai curieux d’avoir un aperçu du fichier qui génère ton (très beau) PDF sur le site de ton école.


      Concernant le plugin, j’ai du coup jeté un œil sans l’installer. Quelques fonctions me semblent pouvoir utiliser des codes natifs de SPIP, par exemple : transliterration() pour calculer le nom du fichier PDF comme l’utilise la génération d’URL de SPIP, preg_files() pour retrouver tous les fichiers dans les sources SPIP selon un expression donnée ou encore supprimer_fichier() à la place de unlink(). C’est tout ce que j’ai vu pour le moment.

      J’en dirai peut être plus dans les prochains jours si je prolonge cette piste.

      Une des idées serait d’utiliser TextWheel pour passer du format SPIP au format LaTeX. Ce qui serait certainement plus lisible. TextWheel doit être intégré à SPIP 2.3 par ailleurs.

    • Le 14 janvier 2011 à 09:04, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      La mise en page en LaTeX, c’est horriblement compliqué. Je laisse ça à ma co-auteur, qui va répondre sur ce point.

      Pour ce qui est de faire du LaTeX depuis SPIP avec TextWheel, je peux faire un petit retour d’expérience.. De ce que j’ai compris, la typo de SPIP n’a pas de grammaire écrite, ce qui interdit de faire une traduction dirigée par la syntaxe. Il faut se contenter de rechercher/remplacer, qui sont assez subtils dans la mesure où LaTeX admet de nombreux caractères spéciaux à échapper ou non selon le contexte, et que en prime certains d’entre eux ont aussi un sens spécial en typo SPIP (les accolades, notamment). C’est ces raisons qui rends le code de SPIP2LaTeX un peu complexe [1].

      [1je préfère cette expression à « peu lisible » : la complexité n’a pas été ajoutée pour le plaisir

    • Le 14 janvier 2011 à 10:33, par Maïeul En réponse à : Version PDF avec SPIP2LaTeX

      Si je peux me permettre d’intervenir avec ma maigre expérience.

      Pour un projet perso, j’ai déjà fait de l’export SPIP vers Latex à l’aide d’une fonction que j’applique sur #TEXTE**|. Cela gère pour le moment les gras, les italiques et les exposants, qui sont mes seuls besoins. Cela tient en 2 lignes.

      Cet été je suis intéressé par améliorer cela, notamment pour t’aider Marcimat pour livre. Je pense que ce serait vraiment cool, en plus on pourrait ainsi avoir facilement une version à jour de SPIP.net en PDF.

      Pour la mise en forme, ce n’est pas forcément évident, ceci dit j’arrive déjà à faire quelque petite chose (réduction de taille de texte pour un environnement donné, changement des couleurs pour les titres et j’en passe). J’ai même un ami qui produit des cartes de jeux entièrement en LaTex.

      Par ailleurs, je pense que sur le projet pour le livre il faudrait utiliser XeLaTex et non pas LaTex. C’est une variante de LaTex qui fonctionne avec les caractères unicodes. En théorie il est possible de faire cela directement en LaTex (avec un package spécifique), mais de fait, cela ne marche pas très bien (notamment pour les caractères grecs).

    • Le 14 janvier 2011 à 14:20, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Pour ce qui est de faire du LaTeX depuis SPIP avec TextWheel, je peux faire un petit retour d’expérience.. De ce que j’ai compris, la typo de SPIP n’a pas de grammaire écrite, ce qui interdit de faire une traduction dirigée par la syntaxe. Il faut se contenter de rechercher/remplacer, qui sont assez subtils dans la mesure où LaTeX admet de nombreux caractères spéciaux à échapper ou non selon le contexte, et que en prime certains d’entre eux ont aussi un sens spécial en typo SPIP (les accolades, notamment). C’est ces raisons qui rends le code de SPIP2LaTeX un peu complexe.

    • Le 16 janvier 2011 à 16:01, par Florence HENRY En réponse à : Version PDF avec SPIP2LaTeX

      Note préliminaire, c’est moi la co-auteur du plugin.

      Petite remarque sur l’exemple que Manu a donné pour la mise en forme de <poesie>, il a oublié de préciser qu’il fallait la ligne suivante dans le préambule [1] du document LaTeX :

      \usepackage{framed}

      Pour ce qui est de la personnalisation du document PDF, il « suffit » d’écrire un fichier de style LaTeX monstyle.sty et d’y faire appel dans le préambule du document avec :

      \usepackage{monstyle}

      Il y a un très grand nombre de packages LaTeX qui permettent d’enjoliver la mise en page par défaut. Quelques pointeurs pour démarrer en LaTeX :
      -  La Faq en français : http://www.grappa.univ-lille3.fr/FAQ-LaTeX/
      -  http://doc.ctrlaltdel.ch/LaTeX/manuel/manuel.pdf
      -  http://tex.loria.fr/general/apprends-latex.pdf
      -  http://lozzone.free.fr/index.php?vlunch=latex
      -  http://www.tuteurs.ens.fr/logiciels/latex/
      -  http://www.lesia.obspm.fr/perso/florence-henry/CoursLatex/courslatex.php

      Pour ce qui est de générer un PDF depuis un site entier, on est en train d’y réfléchir, mais ce n’est pas trivial car il faut une solution qui puisse être utilisée quelle que soit l’arborescence du site. SPIP peut avoir une profondeur infinie de rubriques, alors que LaTeX ne connaît que 7 niveaux de sectionnement (\part \chapter \section \subsection \subsubection \paragraph \subparagraph).

      Par ailleurs, je serais ravie d’offrir mes services en LaTeX pour faire la mise en page de Programmer.spip.org.

      [1Le préambule est la partie de code entre le \documentclass{article} et \begin{document}

    • Le 17 janvier 2011 à 08:53, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bonjour, et merci pour ces renseignements.

      J’avais trouvé hier le site du Grappa effectivement.
      Ce qui m’étonne à première vue dans la lecture de LaTeX, notamment des fichiers .sty, c’est sa grande complexité. Là où un fichier CSS peut se « lire » à haute voix et se comprend à peu près, un fichier .sty fait référence à des fonctions connues qu’on surcharge (ou qu’on déclare), où l’ordre des arguments est important. Par exemple la simple modification des marges des titres (http://www.grappa.univ-lille3.fr/FAQ-LaTeX/6.3.html) ne fait pas référence à un mot clé « marge » (margin en CSS), mais se déclare en suivant l’ordre des arguments entre accolades, ce qui m’est très perturbant. La marge haute étant dans la 3è accolade... si je suis bien.

      Par rapport à Programmer, sa spécificité, si on va par là, c’est l’utilisation de code en ligne, et de blocs de code. Pour l’instant, des tentatives que j’ai fait, la balise <code> fait dans le style latex du plugin un saut de paragraphe (block en CSS) au lieu de rester dans le flux de texte (inline en CSS) lorsqu’il n’y a pas de retour à la ligne dans ce code.

      Vis à vis de la limitation en profondeur de LaTex, je pense que ça doit convenir à la plupart des sites : si l’on veut faire un export du site, il faut alors s’arranger pour remettre à plat ce qui est trop profond si c’est le cas. Dans Programmer, on a : lang / chapitres / rubriques / articles / intertitres au maximum, sachant qu’on exporte un livre par langue. Il y a donc au maximum : 4 rangs de profondeur si je suis bien (5 avec les paragraphes) : chapitre / (parfois rubriques) / articles / intertitres / paragraphes (+ exemples).

      Je serai ravi de votre aide de ce côté là pour la mise en page, si l’on choisit d’exporter en LaTeX, ce qui me semble une excellente chose pour diverses raisons. La première raison étant que notre solution actuelle d’export en PDF repose sur un outil qui n’est pas libre de droit (PrinceXML), reposant sur CSS3. L’outil est réellement extrêmement puissant pourtant (voir les exports PDF de http://programmer.spip.org/Le-livre, gérant un peu les cross-références (mais un peu seulement :p). Évidemment, le coté typographie pourrait être amélioré avec LaTeX, mais je suis déjà très content d’arriver à ce résultat d’export PDF :)

      Matthieu.

    • Le 17 janvier 2011 à 09:15, par Florence HENRY En réponse à : Version PDF avec SPIP2LaTeX

      Pour ce qui est de la balise <code>, j’avais en effet déjà repéré que l’on ne faisait pas la distinction entre le code « en ligne » et le code « en paragraphe ». Je rajoute ça sur le TODO.

      Pour ce qui est de la complexité de LaTeX, je le reconnais. C’est beaucoup plus complexe que du CSS... C’est beaucoup plus riche aussi.

      En tout cas, pour l’export actuel en PDF, le résultat est très chouette. C’est tout automatique ?
      Je devrais être capable de faire une feuille de style qui ressemble.

    • Le 17 janvier 2011 à 09:50, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      C’est génial :)

      Pour ce qui est de la génération PDF actuelle, ce n’est pas « tout automatique » mais presque. J’ai un squelette SPIP appelé avec ?page=integrale&lang=xx qui crée une page HTML / CSS de l’ensemble du contenu du site dans la langue donnée (je le fais uniquement en local car il faut plusieurs minutes pour le générer lorsque la coloration du code est active :p).

      Des balises distinguent les chapitres, les titres de chapitres, et avec CSS 3 j’indique les sauts de page, les entêtes, les références... Il suffit de donner à manger le fichier HTML (c’est à dire la page ?page=integrale&lang=xx à PrinceXML, et il traduit en pdf.

      Je peux également passer un paramètre &format=a5 ou &format=a5nb qui appelle en plus une CSS pour surchanger certains styles et avoir la page en A5 au lieu d’A4, et Noir&Blanc au lieu de couleur.


      Pour ce qui est de la décoration, que ça ressemble ou non n’est pas très important en soi. Déjà, réussir à exporter en Latex en créant une table des matières, index et références, entête, pied serait déjà extraordinaire :p . Le tout est d’arriver à faire un livre utile tant dans son contenu que dans sa forme : à ce titre, quelque chose que j’ai vu en LateX et que je n’ai pas fait en CSS (je n’ai pas cherché) c’est d’avoir le numéro de chapitre dans un bloc coloré dans la marge pour le retrouver facilement depuis la tranche du livre, comme le fait par exemple le livre sur LaTeX http://www.framabook.org/latex.html . (Ça pourrait être aussi le logo du chapitre)

      Il est aussi intéressant de pouvoir réaliser 2 versions : A4 pour une impression imprimante, A5 pour une impression en livre.

    • Le 17 janvier 2011 à 12:26, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Autre question, est-il possible d’avoir un exemple code LaTeX et de fichier .sty pour faire afficher un bout de phrase en rouge par exemple... L’équivalent de :

      Avec le CSS

      1. .important {color:red;}

      Juste histoire que je saisisse la transformation des classes sur HTML en latex...

      Merci tout plein :)

    • Le 17 janvier 2011 à 14:28, par Emmanuel Dreyfus En réponse à : Version PDF avec SPIP2LaTeX

      Moi je dirais qu’on fait un truc comme ça, mais Florence va encore me dire que j’ai oublié un \usepackage

      \definecolor{rouge}{rgb}{1,0,0}

      Voila du texte \textcolor{rouge}{colorié en rouge}
    • Le 17 janvier 2011 à 14:30, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Bon, je pense avoir trouvé ma réponse... en partie :

      1. % texte
      2. Un texte \important{très important} il va de soi :)
      3.  
      4. % fichier .sty
      5. \usepackage{color}
      6.  
      7. \newcommand{\important}[1] {%
      8. \textcolor{red}{#1}%
      9. }

      Télécharger

    • Le 17 janvier 2011 à 14:33, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Attention, avec l’écriture :

      1. Voila du texte \textcolor{rouge}{colorié en rouge}

      on ne sépare pas le fond de la forme.

      Or, c’est bien cela que l’on souhaite obtenir : modifier le style « important » sans changer la source du texte. Donc simplement en modifiant le fichier .sty. Enfin, c’est dans l’idéal :)

    • Le 17 janvier 2011 à 15:25, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Pour ce qui est du code en coloration syntaxique, il existe le package « listings ». Évidemment ce package ne comprends pas le SPIP :) mais il y a peut être moyen de l’enrichir.

      Ça donne quelque chose comme : <cadre class='php'> à traduire par :

      1. % preambule
      2. \usepackage{listings}
      3. % texte
      4. \lstset{language=PHP}
      5. \begin{lstlisting}
      6. for ($i = 1; $i < 3; $i++) {
      7. $x .= ma_belle_fonction($i, 100);
      8. }
      9. \end{lstlisting}

      Télécharger

    • Le 17 janvier 2011 à 23:03, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Finalement, pour revenir aux couleurs, j’ai l’impression que définir un environnement se rapproche plus des <span> ou <div> en CSS. On peut les imbriquer avec \begin et \end, ce qui semble intéressant. Un exemple de code :

      1. % texte
      2. % ---------
      3. Un texte avec \begin{code}[ avant (\begin{variable}\#BALISE\end{variable}) après ]\end{code} qui est propre.
      4. % style
      5. % ---------
      6. % les couleurs predefinies
      7. \usepackage{color}
      8. % couleur code
      9. % - texte
      10. \definecolor{code.text}{rgb}{0,0.25,0.75} % bleu cyan
      11. % - variables
      12. \definecolor{code.var}{rgb}{0,0,0.75} % bleu
      13. % environnements
      14. \newenvironment{code}{\color{code.text}}{}
      15. \newenvironment{variable}{\color{code.var}}{}

      Télécharger

      Reste à trouver comment passer de inline à block et faire des marges, et j’aurais compris le plus gros, j’espère :)

    • Le 18 janvier 2011 à 12:44, par Florence HENRY En réponse à : Version PDF avec SPIP2LaTeX

      Pour le code en ligne, il vaudrait mieux utiliser les fonctionnalités du package listings.

      1. % préambule
      2. \usepackage{color}
      3. \definecolor{code.text}{rgb}{0,0.25,0.75} % bleu cyan
      4. \definecolor{code.var}{rgb}{0,0,0.75} % bleu
      5.  
      6. \usepackage{listings}
      7. \lstdefinestyle{text}{basicstyle=\ttfamily\color{code.text}}
      8. \lstdefinestyle{var}{basicstyle=\ttfamily\color{code.var}}
      9.  
      10. % texte
      11. Un texte avec \lstinline[style=text]{[ avant (#BALISE) après ]} qui est propre \lstinline[style=var]{(#BALISE)}.

      Télécharger

      L’avantage est que le code est plus lisible.
      L’inconvénient est qu’on ne peut pas imbriquer les \lstinline. Mais le salut sera sans doute dans la rédaction du style SPIP pour listings. Je vais y plancher.

    • Le 18 janvier 2011 à 22:34, par Matthieu Marcillaud En réponse à : Version PDF avec SPIP2LaTeX

      Dans SPIP, la balise <code> ne passe pas, à ma connaissance, dans le plugin de coloration syntaxique par défaut, et cette balise n’a pas d’attribut pour désigner le type de code (cela dit, elle pourrait très bien en avoir un et l’utiliser). En général, nous utilisons <code> pour du code à même le texte, et <cadre> pour des blocs de code. Pour la distinction bloc / inline, gérer <code> tout le temps inline et <cadre> tout de temps bloc devrait convenir.

      J’ai regardé un peu les sources de listings, il semble qu’il s’appuie essentiellement sur une liste de vocabulaire connu, et non sur un parseur, par exemple à base d’expressions régulières, mais je me trompe peut être.

      1. [ avant (#TRUC_MUCHE) après ]

      risque donc d’être difficile à colorer car on ne peut pas présupposer le nom « truc_muche ».

      Matthieu.

    • Le 22 janvier 2011 à 12:36, par Maïeul En réponse à : Version PDF avec SPIP2LaTeX

      pour un bouquin que j’écrit, j’utilise le minted package http://www.ctan.org/tex-archive/macros/latex/contrib/minted/ qui fait de la coloration syntaxique en ligne ou en bloc.

      Il est écrit en python, donc ca devrait pouvoir ce faire de créer une coloration syntaxique spécifique à SPIP.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Champs Extras 3

    16 janvier 2012 – 524 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Réservation d’événements

    16 mars 2015 – 188 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification (...)

  • Les crayons

    23 avril 2008 – 815 commentaires

    Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.

  • LESS pour SPIP : Less-CSS (anciennement LESSpip)

    5 novembre 2010 – 43 commentaires

    Less-CSS (Anciennement LESSpip) est un plugin intégrant facilement le logiciel LESS dans SPIP. LESS est une extension de CSS ajoutant les variables, les classes, les opérations, les imbrications au langage. Facilitant ainsi l’écriture de (...)

  • Recommander

    3 avril 2011 – 16 commentaires

    Ce plugin propose une manière simple de suggérer de recommander par email un article à un ami. Fonction « recommander un article à un ami ». On l’ajoute dans n’importe quel squelette sous la forme : #RECOMMANDERtitre de la page,url de la page,intro (...)

Ça spipe par là