Cette question ne trouve pas de réponse sur TeX StackExchange, je me permets donc de la reposer ici.

Je cherche à créer un language listings pour les expressions régulières. La difficulté principale repose sur le fait que les caractères spéciaux sont des caractères spéciaux en LaTeX également.

Voici ma tentative actuelle :

\documentclass[12pt]{article}

\usepackage{listings}
\usepackage{xcolor}

\lstdefinelanguage{regex}{
  commentstyle=\color{gray},
  keywords={},
  otherkeywords={^, \{, \}, ?, +},
  alsoletter={},
  basicstyle=\ttfamily,
  keywordstyle=\bfseries\color{green},
  breakatwhitespace=false,
  breaklines=true,
  captionpos=b,
  showspaces=false,
  showstringspaces=true,
  literate=%
  *{0}{{{\color{red}0}}}1
  {1}{{{\color{red}1}}}1
  {2}{{{\color{red}2}}}1
  {3}{{{\color{red}3}}}1
  {4}{{{\color{red}4}}}1
  {5}{{{\color{red}5}}}1
  {6}{{{\color{red}6}}}1
  {7}{{{\color{red}7}}}1
  {8}{{{\color{red}8}}}1
  {9}{{{\color{red}9}}}1
  {(}{{{\bfseries\color{blue}(}}}1
  {)}{{{\bfseries\color{blue}\)}}}1
}

\begin{document}

\begin{lstlisting}[language=regex]
  ((a+b){4,5})*c? + [^ab{?]{3}
\end{lstlisting}

\end{document}

C'est un peu moche mais j'y suis presque. Le problème c'est que les parenthèses fermantes ne se colorent pas avec cette définition. J'ai déjà essayé d'enlever le \ devant la parenthèse, ça ne change rien.

Comment puis-je faire pour corriger ça ? Est-ce qu'il y a un paquet existant / une meilleure manière de le faire ?

Posée 05 Jul '23, 12:00

olirwin's gravatar image

olirwin
433
Taux d'acceptation : 100%

Modifiée 05 Jul '23, 12:35

denis's gravatar image

denis ♦♦
7.0k1510

1

Je ne vois pas comment corriger cela. Un package permettant peut-être de s'en sortir est codehigh qui, lui-même, s'appuie sur des expressions régulières pour assurer la coloration syntaxique.

(05 Jul '23, 12:33) denis ♦♦ denis's gravatar image
1

Ça vaudrait le coup de signaler le problème au mainteneur du package listings (j.hoffmann(at)fh-aachen.de).

(05 Jul '23, 15:43) denis ♦♦ denis's gravatar image

Merci pour ta réponse Denis, j'ai fini par utiliser minted en développant un lexeur personnalisé (ce qui n'est pas forcément facile pour tout le monde). J'enverrai un message au mainteneur pour le prévenir également :)

(05 Jul '23, 17:33) olirwin olirwin's gravatar image

Ne trouvant pas de solutions, j'ai fini par me rediriger vers le paquet minted.

Celui-ci utilise en sous-main une librairie Python, Pygments, qui s'occupe de parser le langage en jetons annotés.

J'ai donc développé une extension de cette librairie (qui n'est pas encore parfaite, mais pour l'instant suffisante), en construisant un lexeur capable de parser les bouts de code d'expression régulière.

Si cette solution intéresse quelqu'un d'autre, le paquet à installer est disponible à l'adresse suivante : ici

Lien permanent

Publiée 05 Jul '23, 17:38

olirwin's gravatar image

olirwin
433
Taux d'acceptation : 100%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.