Je voudrais utiliser tcblisting et son option « listing side text » pour présenter du code LaTeX.

Avec listings, le code suivant colore tout — les délimiteurs et le contenu :

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{%
  delim = [s][\color{purple}]{\\[}{\\]}
  }
\begin{document}
\begin{lstlisting}
  \[f(x)=\ln(x+3)\]
\end{lstlisting}
\end{document}

Je voudrais colorer uniquement les délimiteurs, mais pas l'intérieur.

J'ai essayé avec :

  • un autre délimiteur « invisible » mais il apparaît (évidemment 😄) lors de son utilisation par tcblisting ;
  • avec literate...

De manière générale, comment utiliser delim (moredelim) du package listings pour colorer uniquement les délimiteurs ?

Posée 28 Avr '20, 10:47

christophe-poulain's gravatar image

christophe-poulain
8661727
Taux d'acceptation : 37%

Modifiée 05 Mai '20, 01:29

Pathe's gravatar image

Pathe ♦♦
7.5k38201251

Il faut doubler le caractère d’échappement, : \\[, \\].

(28 Avr '20, 13:16) touhami touhami's gravatar image

Pourriez vous expliquer comment le délimiteur invisible apparaît avec tcblisting ?

(28 Avr '20, 13:18) touhami touhami's gravatar image

l'échappement colore bien le délimiteur initial. Mais l'intérieur est toujours coloré. J'ai essayé § et il apparaît sous la forme... §

(28 Avr '20, 13:20) christophe-poulain christophe-poulain's gravatar image

Je me demande quel est le rôle de tcblisting ?

(28 Avr '20, 13:25) touhami touhami's gravatar image

afficher le code à gauche et le résultat à droite

(28 Avr '20, 13:33) christophe-poulain christophe-poulain's gravatar image

J'ai modifié pour tenir compte du commentaire de touhami

(28 Avr '20, 13:57) christophe-poulain christophe-poulain's gravatar image
Affichage de 5 parmi 6 Afficher 1 commentaire(s) en plus

Avec le code ci-dessous, j'ai obtenu ce que je voulais. La définition d'une commande vide qui sert de délimiteur pour listings et de commande vide pour tcblisting...

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{xcolor}
\usepackage{listings}
\newcommand{\Z}{}

\lstset{
    language     = [LaTeX]TeX,
    basicstyle   = \ttfamily,%
    columns=fullflexible,%
    frame=tb,%habillage
    texcsstyle=*\color{blue},%pour colorer la contre-oblique
    delim    = **[s][\color{purple}]{\\[}{\\]},
    moredelim    = **[is][\color{black}]{\\Z}{\\Z},
}

%% "Rehook" delimiters char table.
\makeatletter
\lst@AddToHook{SelectCharTable}{\lst@DefDelims}
\makeatother

\begin{document}
\begin{lstlisting}
\[\sum_{n=1}^{+\infty}\]
\end{lstlisting}
\[\sum_{n=1}^{+\infty}\]

\begin{lstlisting}
\[\Z\sum_{n=1}^{+\infty}\Z\]
\end{lstlisting}
\[\Z\sum_{n=1}^{+\infty}\Z\]
\end{document}
Lien permanent

Publiée 29 Avr '20, 01:02

christophe-poulain's gravatar image

christophe-poulain
8661727
Taux d'acceptation : 37%

Autre solution, ne nécessitant pas le recours artificiel à la commande auxiliaire \Z :

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{listings}

\lstset{
    language   = [LaTeX]TeX,
    basicstyle = \ttfamily,%
    columns    = fullflexible,%
    frame      = tb,%habillage
    texcsstyle = *\color{blue},%pour colorer la contre-oblique
    literate   = *%
    {\\[}{{\textcolor{purple}{\textbackslash[}}}{2}
    {\\]}{{\textcolor{purple}{\textbackslash]}}}{2}
    {$}{{\textcolor{purple}{\$}}}{1}%$
    {_}{{\textcolor{purple}{\_}}}1%
    {^}{{\textcolor{purple}{\^{}}}}1%
    ,
}

%% "Rehook" delimiters char table.
\makeatletter
\lst@AddToHook{SelectCharTable}{%
  \ifx\lst@literate\@empty\else
  \expandafter\lst@Literate\lst@literate{}\relax\z@
  \fi%
}
\makeatother

\begin{document}
\begin{lstlisting}
\[\sum_{n=1}^{+\infty}\]
\end{lstlisting}
\[\sum_{n=1}^{+\infty}\]
\end{document}
Lien permanent

Publiée 04 Mai '20, 18:37

denis's gravatar image

denis ♦♦
7.2k1510
Taux d'acceptation : 53%

Je vous propose un code qui reste perfectible :

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
   \usepackage{listings}
   \usepackage{xcolor}

\def\beginlstdelim#1#2#3%
{%
    \def\endlstdelim{#2\egroup}%
    \ttfamily#1\bgroup\color{#3}\aftergroup\endlstdelim%
}
\lstset
{%
    moredelim = **[is][\beginlstdelim{\color{purple}[}{]}{black}]{[}{]},
}
   \begin{document}
   \begin{lstlisting}
     \[f(x)=\ln(x+3)\]
   \end{lstlisting}
   \end{document}
Lien permanent

Publiée 28 Avr '20, 22:26

Hugues's gravatar image

Hugues
772916
Taux d'acceptation : 25%

Merci. Mais cela colorie seulement [...]. Je voudrais colorer \[ et \]...

(29 Avr '20, 00:29) christophe-poulain christophe-poulain's gravatar image
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.