Référence de LaTeXWheel

LaTeXWheel est le plugin qui permet de convertir des raccourcis SPIP en code LaTeX.

Il fonctionne grâce à textwheel. Il s’utilise généralement en conjonction avec Zippeur.

Cet article liste :

  • les transformations de LaTeXWheel
  • les packages LaTeX nécéssaire pour chaque outils.

On consultera le tutoriel pour une première approche.

Les fonctions de base

La fonction de base est la fonction |propre_latex. Elle s’applique sur un champ brut, c’est à dire suivi d’une * [1].

[(#CHAMP*|propre_latex)]

Si on utilise le système de langue avec <multi>, il faut appliquer au préalable le filtre extraire_multi.

[(#CHAMP*|extraire_multi{#LANG}|propre_latex)]

Les raccourcis qui ne demandent pas de package supplémentaire

Les caractères suivants : \$%&_# qui ont une signification particulière en LaTeX sont automatiquement protégés en étant précédés de \.

{texte en emphase} donne \emph{texte en emphase}

{{texte en gras}} donne \textbf{texte en gras}

{{{intertitre}}} donne \subsection{intertitre}

[[Note de bas page]] donne \footnote{Note de bas de page}

<quote>texte cité</quote> produit \begin{quotation}texte cité\end{quotation}

Les raccourcis du type :

- x
- x
- x

ne sont pas encore traités.

En revanche :

-* élément non numéroté
-* élément non numéroté

produit

\begin{itemize}
\item élément numéroté
\item élément numéroté
\end{itemize}

On consultera aussi un article de Bébert pour faire des styles persos de listes à puce en LaTeX.

De même :

-# élément numéroté
-# élément numéroté

produit

\begin{enumerate}
\item élément numéroté
\item élément numéroté
\end{enumerate}

Pour rappel en LaTeX, en standard, on ne peut pas imbriquer plus de quatre niveaux de listes [2].

La langue

On utilisera le package polyglossia (de préférence à Babel) pour indiquer la langue.

Le filtre lang_polyglossia permet de transformer un code langue de spip (ex : fr, en) en code langue de polyglossia.

Ex :

\setmainlanguage{[(#LANG|lang_polyglossia)]}

Les liens externes

Il est nécessaire d’utiliser le package hyperref.

[->http://url.com] produit \url{http://url.com}

[lien externe->http://url.com] produit \href{http://url.com}{lien externe}

Les liens internes

Pour mettre des liens internes, il est nécessaire d’insérer des \label correspondant à l’endroit vers lequel un lien doit pointer.

On relira d’abord une introduction aux références croisées en LaTeX.

Par exemple :

<BOUCLE_articles(ARTICLES)>
\chapter{[(#TITRE*|propre_latex)]}\label{art#ID_ARTICLE}
</BOUCLE_articles>

Pour rappel, il existe trois commandes qui permettent de se servir d’une référence croisée :

  • \ref renvoie au numéro de la référence.
  • \pageref renvoie à la page de la référence.
  • \nameref, du package hyperref, donne le titre de l’élément sur lequel on renvoie.

Voici comment LaTeXwheel transforme les raccourcis :

[texte->xxx] donne texte (p.~\pageref{artxxx})

[texte->artxxx] donne texte (p.~\pageref{artxxx})

[->artxxx] donne \nameref{artxxx} (p.~\pageref{artxxx})

Par défaut, les abréviations de type art,rub,sont conservés.

En revanche articlexxx donne artxxx et rubriquexxx donne rubxxx.

En revanche motxxx ou autxxx reste tel que, simplement mis dans la commande LaTeX.

Les tableaux

Gros morceaux. Je ne rentrerais pas dans les détails, car pour avoir des tableaux correspondant aux styles voulus, il faut mettre la main « dans le camboui » une fois le fichier .tex produit.

Je renvoie aux fiches de Bébert sur les tableaux.

Sachons juste les réglages par défaut :

  • les tableaux sont de type longtable, donc nécéssitent le package du même nom.
  • la largeur des colonnes correspond à la largeur \textwidth, c’est à dire la largeur du texte, divisé par le nombre de colonnes. Les colonnes sont de type p
  • il n’y a pas de traits.
  • le \endhead est géré pour les entêtes.
  • les colonnes et les lignes peuvent être fusionnées. Le cas échéant, il faut utiliser le package \multirow.

Le modèles

Il faut se rappeler ce qu’est un modèle : http://www.spip.net/fr_article3454.html.
Les modèles sont utilisés par SPIP, par exemple pour insérer des images.
Le principe adopté pour la conversion vers LaTeX est de laisser de la souplesse.

Tout modèle xxx.html qui produit du html devrait avoir un équivalent latex_xxx.html.

À l’intérieur, on utilisera les commandes LaTeX adaptées. Voir par exemple :

Il faut faire particulièrement attention.

En effet, soit un modèle document.html. Si je l’appelle de la manière suivante : <document1>, je possède alors une variable d’environnement #ENV{id_document} égale à 1.

Je peux donc faire

<BOUCLE_document(DOCUMENTS){id_document}>
…
</BOUCLE_document> 

En revanche, je ne peux pas dans le modèle correspondant latex_document.html faire cela. Il faut que je fasse :

<BOUCLE_document(DOCUMENTS){id_document=#ENV{id}}>
…
</BOUCLE_document> 

Par ailleurs, si on utilise une image, il faudra se servir du filtre |latex_copier_img pour s’assurer que l’image sera bien présente dans le zip.

Ce filtre s’applique sur le chemin de l’image. Il reçoit comme premier argument le nom du zip que l’on souhaite produire, et comme second argument le dossier dans lequel l’image se trouvera à l’intérieur du zip.
Ex :

\includegraphics{[(#FICHIER|latex_copier_img{ziptex,IMG})]}

On pourra s’inspirer des modèles présents dans le squelette Documentation2LaTeX.

Le code

Un code entre deux balises code produit \verb¡lecode¡.

Si on utilise le plugin coloration code, alors il faudra utiliser le package minted dans le fichier LaTeX final.

Ce package nécéssite :

  • d’avoir pygments installé.
  • de compiler en ligne de commande, avec xelatex -shell-escape xxx.

En outre, il faudra avoir l’anglais déclaré comme langue, dans le préambule :

\setotherlanguage{english}

On obtiendra les résultats suivants :

  • Pour un code présent présent entre <cadre> :
    \begin{english}
    \begin{minted}[linenos]{langage}
    Code numéroté
    \end{minted}
    \end{english}
  • Pour un code présent entre <code> :
    \begin{english}
    \begin{minted}{langage}
    Code non numéroté
    \end{minted}
    \end{english}

En outre, deux cas particulier :
-  Si on cite du code PHP, il faut ajouter : #FILTRE{latex_recuperer_php} dans le squelette.
-  Si on cite du code SPIP, il faut installer le module de coloration syntaxique de SPIP pour pygments.

Notes

[2Je cherche encore un package permettant de le faire.

Discussion

3 discussions

  • 3

    Traitement des équations LaTeX écrites dans SPIP.

    SPIP permet d’écrire des équations au format LaTeX avec les balises math et le symbole $. Et en utilisant le filtre propre_latex, j’ai vu que les équations étaient converties en images par echappe_html et que ce qui se trouve entre $ n’était pas préservé ce qui aurait permis d’afficher correctement les équations en LaTeX.

    J’ai fait un bout de script qui détecte et protège les équations avant l’appelle à echappe_html et qui remet les équations non modifiées à la fin du traitement.

    J’ai donc ça avant les appels contenus dans propre_latex :

    $t = preg_replace_callback(
        '#(<math>.*?</math>)#is', 
        function ($matches) {
            $t = str_replace(array('<math>','</math>'),'',$matches[0]); 
            $t = preg_replace_callback(
                '#(\$\$.*?\$\$)#is', 
                function ($matches) {
                    return '£'.base64_encode($matches[0]).'£'; 
                },
                $t
            );
            $t = preg_replace_callback(
                '#(\$.*?\$)#is', 
                function ($matches) {
                    return '£'.base64_encode($matches[0]).'£'; 
                },
                $t
            );
            return $t;
        },
        $t
    );

    Et ça après :

    // On remet les équations à l'endroit
    $t = preg_replace_callback(
        '#(\£.*?\£)#',
        function ($matches) {
            return base64_decode(substr($matches[0],1,-1));
        },
        $t
    );

    Dans mon traitement, j’ai aussi relégué l’appel à echappe_html après l’appel à appliquer_regles_wheel($t,array(’latex/latex.yaml’)) ; mais je ne me sais plus si c’est lié aux équations ou à autre chose.

    Voilà, je ne sais pas si mon patch contourne une mauvaise utilisation de ma part ou si les équations ne sont effectivement pas prises en compte dans LaTeXWheel et qu’il serait intéressant de l’intégrer dans le plugin.

    Merci d’avance pour vos réactions.

    • le comportement standard de spip veut que pour marque qu’il faille lire le code LaTeX, il faut être entre <math> et </math>. Ceci permet d’utiliser des $ dans le corps du texte sans risque de se retrouver avec du code LaTeX interprété sans qu’on le souhaite...

    • arg, je suis fatigué, c’est dans « latexwheel » que tu parle, pas dans « textwheel »... alors oui,

      effectivement les équations n’étaient pas prise en compte dans LaTeXwheel.

      bah si du coup ton patch marche, tu peux l’intégrer au code de latexwheel sur la zone ?

    • Je l’ai testé dans des cas compliqué avec des équations au milieu de texte comme ici : http://sic.g-eau.net/l-equation-de-transport-diffusion
      Et je n’ai pas noté d’effet de bord sur les autres fonctionnalités de LatexWheel.

      Je vais faire un commit avec cette modif et incrémenter la version du plugin.

      @+
      Dorch

    Répondre à ce message

  • 1

    Bonsoir,

    je viens d’avoir le même problème pour une liste, où il faut faire le même patch pour latex-listes.php (lignes 75 et 79). J’ai testé et ça fonctionne.

    Tant qu’a faire il y as aussi 3 occurrences dans latex-code.php et 1 dans latex.php mais là je n’ai pas testé.

    Répondre à ce message

  • 3

    Je viens d’avoir un problème avec un tableau lors de la génération des fichiers tex. La balise fermante du tableau \end{longtable} avais sont \e de remplacé par un caractère étrange.

    Pour retrouver le fonctionnement normal, j’ai échappé le \.

    Voila la fin de mon fichier latex-tableau.php

            return "\n\n\begin/debutlongtable/fin$alignement\n"
                    . $debut_table
                    . $html
                    . "\\end/debutlongtable/fin\n\n";

    C’est sûrement pas le meilleur endroit pour corriger ce problème, mais ça permet de générer sans erreur un pdf.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom