[listings] Code latex3

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 520
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

[listings] Code latex3

Message non lu par zariski63 »

Bonsoir,
j'essaie de créer un listing latex3 et le résultat est relativement correct bien que perfectible évidemment.
Cependant je bute sur quelques trucs :
  • est-il possible de pourvoir colorier les variables qui commencent toujours par \l_ ou \l__ ou \g_ ou \g__ ou \c_ ou \c__ toutes suivies de mot contenant des lettres et/ou un _
    et plus généralement par \<scope>__<module>_<descript>_<type> ou \<scope>_<module>_<descript>_<type>
  • de même avec les fonctions qui elles vont commencer par \__<module>_<descript>:<arg-spec> ou \_<module>_<descript>:<arg-spec>
  • De plus je souhaiterai colorier les paramètres commençant par # suivi d'un chiffre compris entre 1 et 9
En effet il est très pénible de rentrer "à la main" chacun de ces mots (voir mon exemple).

Je sais qu'il existe "minted", "codehigh" mais chacun a ses défauts et je ne souhaite pas les utiliser.

Je vous remercie pour vos idées à venir :)

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[bold-style=ISO]{fourier-otf}

\usepackage{xcolor}
\usepackage{listings}

%%%%%%%%%%    style latex3 (sans cadre)   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{variablelatex3}{rgb}{0.5,0.5,0}
\definecolor{bleulatex3}{rgb}{0.19,0.19,0.83}
\definecolor{entetelatex3}{rgb}{0,0.55,0.55}
\definecolor{parentheselatex3}{rgb}{0.56,0.12,0.34}

\lstdefinestyle{latex3}{%
   basicstyle        ={\ttfamily\small},
   extendedchars     = true,
   escapechar        = {§},       % pour écrire du latex
   columns           = fullflexible,  % respecte l'indentation du code
   keepspaces        = true,% pour que les espaces comptent
   tab               = {\color{gray}\rightarrowfill}, %1 tabulation = 1 flèche
   tabsize           = 4,   %tabulation de 2 caractères comme réglé ds WinEdt
   upquote           = true,% guillemets
   breaklines        = true,% coupure automatique des lignes en bout de cadre
   breakindent       = 0cm, % indentation des lignes coupees
   numbers           = left,%
   numbersep         = 2.5ex,% espace entre le numéro et le code
   numberstyle       = {\ttfamily\tiny},%
   commentstyle      = {\footnotesize\ttfamily\color{gray}},
   %
   alsoletter        = {:, _ },
   literate = *%
             { \{ }{{\textcolor{parentheselatex3}{ \{ }}}{1}%
             { \} }{{\textcolor{parentheselatex3}{ \} }}}{1},%
   %
   classoffset       = 0,
   keywordstyle      = {\color{variablelatex3}},
   morekeywords      = {l_foo_clist,},
   %
   classoffset       = 1,
   keywordstyle      = {\color{bleulatex3}},
   morekeywords      = {clist_set:Nn, clist_sort:Nn, clist_use:Nn,
   							int_compare:nNnTF, int_from_alph:n,
   							sort_return_swapped:, sort_return_same:,},
   %
   classoffset       = 2,
   keywordstyle      = {\color{entetelatex3}},
   morekeywords      = {ExplSyntaxOn,ExplSyntaxOff},
   %
   classoffset       = 0,
   }
%%%%%%%%%%  Fin style latex3 (sans cadre)   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}
\begin{lstlisting}[style=latex3]
\ExplSyntaxOn
\clist_set:Nn \l_foo_clist {c,g,a,t,s,z,i,b}
\clist_sort:Nn \l_foo_clist
   {
    \int_compare:nNnTF  { \int_from_alph:n {#1} } > 
                        { \int_from_alph:n {#2} }
                        { \sort_return_swapped: } 
                        { \sort_return_same: }
   }

\clist_use:Nn \l_foo_clist {~~ , ~~}
\ExplSyntaxOff
\end{lstlisting}
\end{document}
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 520
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: listings + latex3

Message non lu par zariski63 »

Après moult essais j'ai trouvé cette solution mais cela ne me satisfait pas plus que ça ...
Cela donne un bon rendu mais il faut régler des soucis d'espaces sinon patatras...

Code : Tout sélectionner

%%%%%%%%%%    style latex3 (sans cadre)   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{variablelatex3}{rgb}{0.5,0.5,0}
\definecolor{bleulatex3}{rgb}{0.19,0.19,0.83}
\definecolor{entetelatex3}{rgb}{0,0.55,0.55}
\definecolor{parentheselatex3}{rgb}{0.56,0.12,0.34}
\definecolor{propertylatex3}{rgb}{0.82,0.41,0.12}

\lstdefinestyle{latex3}{%
   basicstyle        ={\ttfamily\small},
   extendedchars     = true,
   escapechar        = {§},       % pour écrire du latex
   columns           = fullflexible,  % respecte l'indentation du code
   keepspaces        = true,% pour que les espaces comptent
   tab               = {\color{gray}\rightarrowfill}, %1 tabulation = 1 flèche
   tabsize           = 4,   %tabulation de 2 caractères comme réglé ds WinEdt
   upquote           = true,% guillemets
   breaklines        = true,% coupure automatique des lignes en bout de cadre
   breakindent       = 0cm, % indentation des lignes coupees
   numbers           = left,%
   numbersep         = 2.5ex,% espace entre le numéro et le code
   numberstyle       = {\ttfamily\tiny},%
   morecomment       = [l]{\%}, % l is for line comment
   commentstyle      = {\footnotesize\ttfamily\color{gray}},
   %
   alsoletter        = {:, _ },
   literate = *%
             { \{ }{{\textcolor{parentheselatex3}{\{}}}{1}%
             { \} }{{\textcolor{parentheselatex3}{\}}}}{1},%
   	%
   	morecomment=[s][\color{bleulatex3}]{\\bool}{\ },
   	morecomment=[s][\color{bleulatex3}]{\\box}{\ },
	morecomment=[s][\color{bleulatex3}]{\\char}{\ },
	morecomment=[s][\color{bleulatex3}]{\\clist}{\ },
	morecomment=[s][\color{bleulatex3}]{\\coffin}{\ },
	morecomment=[s][\color{bleulatex3}]{\\color}{\ },
	morecomment=[s][\color{bleulatex3}]{\\cs}{\ },
	morecomment=[s][\color{bleulatex3}]{\\dim}{\ },
	morecomment=[s][\color{bleulatex3}]{\\driver}{\ },
	morecomment=[s][\color{bleulatex3}]{\\exp}{\ },
	morecomment=[s][\color{bleulatex3}]{\\file}{\ },
	morecomment=[s][\color{bleulatex3}]{\\fp}{\ },
	morecomment=[s][\color{bleulatex3}]{\\group}{\ },
	morecomment=[s][\color{bleulatex3}]{\\hbox}{\ },
	morecomment=[s][\color{bleulatex3}]{\\hcoffin}{\ },
	morecomment=[s][\color{bleulatex3}]{\\if}{\ },
	morecomment=[s][\color{bleulatex3}]{\\int}{\ },
	morecomment=[s][\color{bleulatex3}]{\\ior}{\ },
	morecomment=[s][\color{bleulatex3}]{\\iow}{\ },
	morecomment=[s][\color{bleulatex3}]{\\keys}{\ },
	morecomment=[s][\color{bleulatex3}]{\\keyval}{\ },
	morecomment=[s][\color{bleulatex3}]{\\lua}{\ },
	morecomment=[s][\color{bleulatex3}]{\\mode}{\ },
	morecomment=[s][\color{bleulatex3}]{\\muskip}{\ },
	morecomment=[s][\color{bleulatex3}]{\\peek}{\ },
	morecomment=[s][\color{bleulatex3}]{\\prg}{\ },
	morecomment=[s][\color{bleulatex3}]{\\prop}{\ },
	morecomment=[s][\color{bleulatex3}]{\\q}{\ },
	morecomment=[s][\color{bleulatex3}]{\\quark}{\ },
	morecomment=[s][\color{bleulatex3}]{\\scan}{\ },
	morecomment=[s][\color{bleulatex3}]{\\seq}{\ },
	morecomment=[s][\color{bleulatex3}]{\\skip}{\ },
	morecomment=[s][\color{bleulatex3}]{\\str}{\ },
	morecomment=[s][\color{bleulatex3}]{\\tl}{\ },
	morecomment=[s][\color{bleulatex3}]{\\token}{\ },
	morecomment=[s][\color{bleulatex3}]{\\use}{\ },
	morecomment=[s][\color{bleulatex3}]{\\vbox}{\ },
	morecomment=[s][\color{bleulatex3}]{\\vcoffin}{\ },
   	%
   	morecomment=[s][\color{variablelatex3}]{\\l_}{\ },
   	morecomment=[n][\color{entetelatex3}]{\\ExplSyntaxOn}{\^^M},
   	morecomment=[n][\color{entetelatex3}]{\\ExplSyntaxOff}{\^^M},
   %
    morecomment=[s][\color{propertylatex3}]{.tl}{\ },
    morecomment=[s][\color{propertylatex3}]{.bool}{\ },
  	morecomment=[s][\color{propertylatex3}]{.choice}{\ },
  	morecomment=[s][\color{propertylatex3}]{.choices}{\ },
  	morecomment=[s][\color{propertylatex3}]{.clist}{\ },
  	morecomment=[s][\color{propertylatex3}]{.code}{\ },
  	morecomment=[s][\color{propertylatex3}]{.default}{\ },
  	morecomment=[s][\color{propertylatex3}]{.dim}{\ },
  	morecomment=[s][\color{propertylatex3}]{.fp}{\ },
  	morecomment=[s][\color{propertylatex3}]{.groups}{\ },
  	morecomment=[s][\color{propertylatex3}]{.initial}{\ },
  	morecomment=[s][\color{propertylatex3}]{.int}{\ },
  	morecomment=[s][\color{propertylatex3}]{.meta}{\ },
  	morecomment=[s][\color{propertylatex3}]{.multichoice}{\ },
  	morecomment=[s][\color{propertylatex3}]{.multichoices}{\ },
  	morecomment=[s][\color{propertylatex3}]{.skip}{\ },
  	morecomment=[s][\color{propertylatex3}]{.tl}{\ },
  	morecomment=[s][\color{propertylatex3}]{.undefine}{\ },
  	morecomment=[s][\color{propertylatex3}]{.value}{\ },
   }
%%%%%%%%%%  Fin style latex3 (sans cadre)   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%