lstinline

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

lstinline

Messagepar zariski63 » Vendredi 16 Novembre 2018, 20:02

Bonsoir !
J'aimerais un coup de pouce svp.
Comme on ne peut encadrer sur un fond coloré du "lstinline", à moins d'utiliser "\Fcolorbox", j'ai glané de ci delà le code suivant :

Code: Tout sélectionner
\usepackage{listings}
\usepackage{verbatim}

\newcommand{\xcode}{%
     \setbox0=\hbox{\bgroup}%
     \aftergroup{\usebox0}%
      \lstinline
       } 
       
\newcommand{\code}{%
      \afterassignment%
       \xcode
      \let%
     \tmp
    }



qui fonctionne de la manière suivante : \code*\textbf{blabla}*.

Cependant, je souhaiterais l'améliorer par du tikz qui permet des fioritures autres que "\Fcolorbox", et là je ne suis pas assez fort en TeX pour arriver à mes fins ...
Si une bonne âme passait par là, ce serait sympa.
Merci
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: lstinline

Messagepar Denis Bitouzé » Vendredi 16 Novembre 2018, 21:44

Peut-être voir du côté de ce que fournit le package tcolorbox (cf. \DeclareTotalTCBox et assimilés, et \tcboxverb).
Denis
Denis Bitouzé
Hecto-utilisateur
 
Messages: 58
Inscription: Vendredi 27 Octobre 2006, 19:27
Localisation: Dunkerque
Statut actuel: Actif et salarié | Maître de conférence

Re: lstinline

Messagepar zariski63 » Samedi 17 Novembre 2018, 16:17

En fait je préfèrerais ne pas utiliser tcolorbox qui semble être une usine à gaz malgré de jolies possibilités.

J'ai découvert "xparse" qui me semble être une alternative plus légère mais je bute sur un problème (Cf l'ecm joint).
Je n' arrive pas à supprimer l'erreur du cas n°4 lorsqu'une des options n'est pas utilisée, c'est-à dire sans les "[…]".

Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage{xparse}
\usepackage{tikz}
\usepackage{listings}

%<---------  style latex  ------------------------------->
\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = \ttfamily\bfseries,
   texcsstyle        = *\color{blue}\ttfamily\bfseries,
   }
%<--------  Fin style latex  ----------------------------->


\NewDocumentCommand{\Lstinline}{O{} O{} v}{%
  \tikz[baseline=-0.7ex]{%
    \node[#1,
          line width=0.15ex,
          inner sep=0.7ex,
          rounded corners=0.3ex,
          ]{\lstinline[#2]!#3!};
  }
  }

\begin{document}


\textbf{Test 1 :} \quad \Lstinline[draw=blue,fill=blue!10][style=latex]{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 2 :} \quad
blablabla\Lstinline[][style=latex]{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 3 :} \quad
blablabla\Lstinline{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 4 :} \quad
blablabla\Lstinline[style=latex]{\textbf{Eric}}blablabla

\end{document}
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar evariste_G » Samedi 17 Novembre 2018, 16:48

Et que devrait faire le cas 4 ? A priori, il est nécessaire qu'il y ait deux paires de parenthèses.

Le problème, c'est que tu ne décris pas ce que tu veux réellement. Pourquoi le cas 3 est-il envisagé ? Que veux-tu au final que ta commande fasse ?
Il y a peut-être un moyen différent d'obtenir ce que tu veux (sans passer par xparse).
evariste_G
Téra-utilisateur
 
Messages: 1407
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar zariski63 » Samedi 17 Novembre 2018, 16:57

En fait je voudrais utiliser ou ne pas utiliser l'option "tikz" et/ou l'option "style", et donc :
--- le cas 1 marche impec si j'utilise les 2 options
--- le cas 4 ne fonctionne pas ou tout du moins introduit une erreur si je n'utilise pas l'option "tikz", c'est à dire sans "[draw=blue,fill=blue!10]"


En fait je ne sais pas trop utiliser le code des options : m; l ; r ; R; ….
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar evariste_G » Samedi 17 Novembre 2018, 17:27

Je n'au jamais utilisé xparse donc je ne peux pas t'aider. Pour moi, c'est pas clair tout ça...
evariste_G
Téra-utilisateur
 
Messages: 1407
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar touhami » Dimanche 18 Novembre 2018, 08:40

Vous pouvez faire ça en employant un argument optionnel du type D (voir la doc de xparse).
Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage{xparse}
\usepackage{tikz}
\usepackage{listings}

%<---------  style latex  ------------------------------->
\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = \ttfamily\bfseries,
   texcsstyle        = *\color{blue}\ttfamily\bfseries,
   }
%<--------  Fin style latex  ----------------------------->


\NewDocumentCommand{\Lstinline}{D<>{} O{} v}{%
  \tikz[baseline=-0.7ex]{%
    \node[#1,
          line width=0.15ex,
          inner sep=0.7ex,
          rounded corners=0.3ex,
          ]{\lstinline[#2]!#3!};
  }
  }

\begin{document}


\textbf{Test 1 :} \quad \Lstinline<draw=blue,fill=blue!10>[style=latex]{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 2 :} \quad
blablabla\Lstinline<>[style=latex]{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 3 :} \quad
blablabla\Lstinline{\textbf{Eric}}blablabla

\bigskip

\textbf{Test 4 :} \quad
blablabla\Lstinline[style=latex]{\textbf{Eric}}blablabla

\end{document}
touhami
Méga-utilisateur
 
Messages: 411
Inscription: Dimanche 11 Février 2007, 11:45
Statut actuel: Post-bac

Re: lstinline

Messagepar touhami » Dimanche 18 Novembre 2018, 08:48

Le choix de< > comme délimiteurs n'est pas le bon choix.
touhami
Méga-utilisateur
 
Messages: 411
Inscription: Dimanche 11 Février 2007, 11:45
Statut actuel: Post-bac

Re: lstinline

Messagepar zariski63 » Dimanche 18 Novembre 2018, 11:41

Bonjour !

je vous remercie pour la réponse positive.

Cependant je ne comprends pas pourquoi si on met des crochets "D[ ]{ }" eh bien ça ne fonctionne plus pour le cas 4.
De plus, pourquoi le choix des "< >" n'est-il pas bon ?
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar un bon petit » Dimanche 18 Novembre 2018, 12:25

On peut aussi tout mettre dans l'argument optionnel et isoler ce qui relève du "style" et le reste qui est à donner à tikz :

Code: Tout sélectionner
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{xparse,tikz,listings,xstring}
\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = \ttfamily\bfseries,
   texcsstyle        = *\color{blue}\ttfamily\bfseries,
   }
\NewDocumentCommand\Lstinline{O{} v}{%
   \begingroup\expandarg
   \IfSubStr{,#1}{,style}
      {\StrBefore{,#1,}{,style}[\tempa]\StrCount\tempa,[\tempa]%
      \StrBetween[\numexpr\tempa+1,\numexpr\tempa+2]{,#1,},,[\tempstyle]%
      \StrDel{#1}\tempstyle[\temptikz]%
      \edef\tempa{\endgroup\noexpand\tikz[baseline=-0.7ex]{%
         \noexpand\node[\unexpanded\expandafter{\temptikz},line width=0.15ex,
            inner sep=0.7ex,rounded corners=0.3ex]{\noexpand\lstinline[\tempstyle]!#2!};}}%
      \tempa
      }%
      {\endgroup\tikz[baseline=-0.7ex]{%
         \node[#1,line width=0.15ex,inner sep=0.7ex,
         rounded corners=0.3ex]{\lstinline!#2!};}%
      }
}
\begin{document}
\textbf{Test 1 :} \quad \Lstinline[draw=blue,fill=blue!10,style=latex]{\textbf{Eric}}blablabla
\bigskip

\textbf{Test 2 :} \quad
blablabla\Lstinline[style=latex]{\textbf{Eric}}blablabla
\bigskip

\textbf{Test 3 :} \quad
blablabla\Lstinline{\textbf{Eric}}blablabla
\bigskip

\textbf{Test 4 :} \quad
blablabla\Lstinline[draw=red]{\textbf{Eric}}blablabla
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar touhami » Dimanche 18 Novembre 2018, 13:15

zariski63 a écrit:... je ne comprends pas pourquoi si on met des crochets "D[ ]{ }" eh bien ça ne fonctionne plus pour le cas 4.

C'est la même chose que votre code initiale. En fait, je pense que votre problème vient de fait que vous avez oublié un cas (numéro 5)
Code: Tout sélectionner
\Lstinline[draw=blue]{\textbf{Eric}}

et qui fonctionne correctement. Sinon, comment voulez vous latex distingue
Code: Tout sélectionner
\Lstinline[draw=blue]{\textbf{Eric}}

de
Code: Tout sélectionner
\Lstinline[style=latex]{\textbf{Eric}}

Je crains que latex n'est pas assez intelligent, ou si vous voulez, c'est plutôt intelligent pour protéger l'utilisateur moins vigilant.

zariski63 a écrit:...
De plus, pourquoi le choix des "< >" n'est-il pas bon ?

Il se trouve que tikz accepte la commande suivante
Code: Tout sélectionner
\tikz\draw[<->>>](0,0)--(1,0);
touhami
Méga-utilisateur
 
Messages: 411
Inscription: Dimanche 11 Février 2007, 11:45
Statut actuel: Post-bac

Re: lstinline

Messagepar zariski63 » Dimanche 18 Novembre 2018, 17:56

M E R C i "un bon petit" !!
C'est pile poil ce que je voulais dès le début. Malheureusement mes compétences sont très limités en TeX.
Je suis ébahi par autant de compétence en TeX !!


Je remercie tout autant Touhami évidemment.
Bonne soirée.
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar zariski63 » Dimanche 18 Novembre 2018, 19:26

Raaaah, vous allez dire que je suis ch.… mais les 2 lignes suivantes ne passent pas :

Code: Tout sélectionner
\Lstinline[fill=blue!10,draw=blue,style=latex]{Ma couleur \textcolor{magenta}{préférée}}

\Lstinline[fill=blue!10,draw=blue,style=latex,morekeywords={couleur},keywordstyle={\color{red}}]{Ma couleur préférée}

zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar un bon petit » Dimanche 18 Novembre 2018, 20:50

zariski63 a écrit:Raaaah, vous allez dire que je suis ch.…

Oui car vous voulez faire un truc pas possible : vous voulez que TeX fasse lui-même la distinction entre les clés/valeurs destinées à tikz de celles destinées à listings. Et bien, c'est pas possible à moins de se fatiguer plus que ce que je prêt à faire.

Donc, vous devez faire des concessions et indiquer entre qui se répartissent les clés/valeurs. Il y a plein de façons de faire, mettre entre guillemets les clés/valeurs pour listings, par exemple. Ou bien, décider que les clés/valeurs qui se trouvent avant « | » sont pour tikz et ceux après sont pour listings. Ou encore considérer que la clé "style" est toujours présente et considérer que ce qui est avant est pour tikz et ce qui est après est pour listings : c'est l'option que j'ai prise dans le code ci-dessous.

Dernier truc, vous oubliez que listings est un package 8 bits : il est donc incompatible avec un codage utf8 et un moteur 8 bits, c'est connu depuis des années, voire des décennies. Il y a des contournements très moches que je ne mettrai pas ici. Bref, vous avez le choix : soit vous encodez en latin1 et compilez en pdflatex, soit vous encodez en utf8 et vous compilez en xelatex ou lualatex.

Ce code fonctionne parfaitement avec une compilation xelatex.

Code: Tout sélectionner
% Compilation xelatex ou lualatex
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{xparse,tikz,listings,xstring}
\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = \ttfamily\bfseries,
   texcsstyle        = *\color{blue}\ttfamily\bfseries}
\NewDocumentCommand\Lstinline{O{} v}{%
   \begingroup
   \expandarg
   \IfSubStr{,#1}{,style}
      {\StrBefore{#1}{style}[\temptikz]\StrBehind{#1}\temptikz[\tempstyle]%
      \edef\tempa{\endgroup\noexpand\tikz[baseline=-0.7ex]{%
         \noexpand\node[\unexpanded\expandafter{\temptikz},line width=0.15ex,
            inner sep=0.7ex,rounded corners=0.3ex]{\noexpand\lstinline[\unexpanded\expandafter{\tempstyle}]!#2!};}}%
      \tempa
      }%
      {\endgroup\tikz[baseline=-0.7ex]{%
         \node[#1,line width=0.15ex,inner sep=0.7ex,
         rounded corners=0.3ex]{\lstinline!#2!};}%
      }
}
\begin{document}
\Lstinline[draw=blue,fill=blue!10,style=latex]{\textbf{Éric}}

\Lstinline[fill=blue!10,draw=blue,style=latex]{Ma couleur \textcolor{magenta}{préférée}}

\Lstinline[fill=blue!10,draw=blue,style=latex,morekeywords={couleur},keywordstyle={\color{red}}]{Ma couleur préférée}
\end{document}
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar zariski63 » Dimanche 18 Novembre 2018, 21:18

Whaaah punaise vous êtes une pointure en TeX.
Ce soir pas le temps de regarder mais comme ce doit
être ok, je vous remercie vivement !!!!
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar zariski63 » Lundi 19 Novembre 2018, 18:34

Même si on met l'option "inputencoding = utf8," et "literate = {é} { {\'e} } {1}, " dans " \lstdefinestyle{latex}{% " , par exemple pour avoir du "é",
votre code ne fonctionnera pas par pdflatex ?

C'est dommage.
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar un bon petit » Lundi 19 Novembre 2018, 20:19

zariski63 a écrit:Même si on met l'option "inputencoding = utf8," et "literate = {é} { {\'e} } {1}, " dans " \lstdefinestyle{latex}{% " , par exemple pour avoir du "é",
votre code ne fonctionnera pas par pdflatex ?


3 choses :
  • pourquoi ne pas encoder en latin1 qui est bien souvent amplement suffisant pour des documents rédigés en français ?
  • pourquoi ne pas vouloir compiler avec un moteur utf8, c'est-à-dire xelatex ou lualatex qui ont fait leur preuves ?
  • pourquoi s'obstiner à tout prix à vouloir marier contre nature listings, utf8 et un moteur 8 bits ?
Vous trouverez des solution fonctionnelle dans les deux premières questions. Les bidouillages que l'on trouve un peu partout sont à fuir comme la peste. Mais si vous voulez absolument continuer avec vos habitudes, mettez-les en œuvre...
un bon petit
Giga-utilisateur
 
Messages: 691
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: lstinline

Messagepar zariski63 » Lundi 19 Novembre 2018, 21:02

Effectivement. Alors xelatex ou lualatex sont l avenir ?
Pourquoi pas, après tout lualatex, pour le peu
que je connais, semble avoir de fortes capacités.
zariski63
Méga-utilisateur
 
Messages: 295
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google [Bot] et 10 invités