Créer une nouvelle commande avec \verb

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 membres 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.
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 30
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Créer une nouvelle commande avec \verb

Message non lu par kriztho »

Bonjour à tous,
Je cherche à créer une nouvelle commande, newcommand, pour personnaliser la commande \verb en lui appliquant nottamment une couleur définie avec le package color. Mais je n'y arrive pas. Après de nombreux essais, je suis arrivé à me demandzer si c'est réellement possible. Est-ce la présence même de la commande \verb qui rend cela impossible ?
Qu'en pensez-vous ? Avez-vous une idée, une piste ?
Merci de votre aide.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Créer une nouvelle commande avec \verb

Message non lu par un bon petit »

Comme vous n'expliquez pas précisément ce que vous voulez faire, la réponse sera forcément imprécise.
Soit vous utilisez le package listings qui permet très certainement tout ce que vous souhaitez. Soit vous modifiez la commande \verb pour lui ajouter de la couleur.

Code : Tout sélectionner

\documentclass{article}
\usepackage{xcolor,xpatch}
\xpatchcmd\verb\bgroup{\bgroup\color{red}}{}{}
\begin{document}
Un essai \verb|\foo 123 #{45}| suite.
\end{document}
On peut également construire sa propre commande avec ici le choix (discutable) d'un argument optionnel qui permet d'activer des commandes de mise en forme pour le texte en verbatim :

Code : Tout sélectionner

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\makeatletter
\newcommand*\Verb[1][\ttfamily]{%
	\relax\ifmmode\hbox\else\leavevmode\null\fi
	\bgroup
		\let\do\@makeother\dospecials\obeyspaces\obeylines
		#1\@noligs\Verb@i
}
\def\Verb@i#1{%
	\catcode`#1 13 \lccode`\~`#1%
	\lowercase{\let~\egroup}%
}
\makeatother
\begin{document}
1) Un essai \Verb|\foo    --123 #{45}| suite.

2) Passage à la ligne \Verb|\foo    --123
#{45}| suite

3) Argument optionnel \Verb[\bfseries\color{red}]|\foo    --123 #{45}|

4) Argument optionnel \Verb[\normalfont\itshape\color{blue}]|\foo    --123 #{45}|
\end{document}
cap.png
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 30
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Créer une nouvelle commande avec \verb

Message non lu par kriztho »

Bonjour un bon petit,
J'ai été peut-être un peu succin dans mes explications. Je les complète maintenant.
Mon objectif initial était d'avoir du code en ligne coloré. J'ai bien sûr utilisé le package listings comme vous le recommandez. J'ai bien créé un style particulier pour le langage HTML :

Code : Tout sélectionner

\lstdefinestyle{StyleHTML}{...}
Mais premier écueil, les caractères accentués ne sont pas reconnus. J'ai cherché une solution sur le web que j'ai trouvé :

Code : Tout sélectionner

\lstset{%
	inputencoding=utf8,
	extendedchars=true,
	literate=
		{é}{{\'e}}{1}%
		{è}{{\`e}}{1}%
		{à}{{\`a}}{1}%
		{ç}{{\c{c}}}{1}%
		{œ}{{\oe}}{1}%
		{ù}{{\`u}}{1}%
		{É}{{\'E}}{1}%
		{È}{{\`E}}{1}%
		{À}{{\`A}}{1}%
		{Ç}{{\c{C}}}{1}%
		{Œ}{{\OE}}{1}%
		{Ê}{{\^E}}{1}%
		{ê}{{\^e}}{1}%
		{î}{{\^i}}{1}%
		{ô}{{\^o}}{1}%
		{û}{{\^u}}{1}%
		{ë}{{\¨{e}}}1%
		{û}{{\^{u}}}1%
		{â}{{\^{a}}}1%
		{Â}{{\^{A}}}1%
		{Î}{{\^{I}}}1
}
Malheureusement, dans le code en ligne, les caractères accentués ne sont pas colorés et les espaces ne sont pas conservés après les à par exemple.

Donc deux problèmes non résolus, sans trouver de solutions.

Donc je me suis dis, revenons au basique, essayons d'utiliser une nouvelle commande avec \verb.

Voilà mon cheminement.
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 30
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Créer une nouvelle commande avec \verb

Message non lu par kriztho »

Quoiqu'il en soit, la première solution, sobre et efficace, d'utiliser xpatch fonctionne parfaitement et me convient bien.
Reste à me pencher sur ce package xpatch.
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 30
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Créer une nouvelle commande avec \verb

Message non lu par kriztho »

J'en reviens donc à ma question initiale, pourquoi je peux créer cette nouvelle cmmande :

Code : Tout sélectionner

\usepackage{color}
\definecolor{bleu}{rgb}{0.1,0.2,0.8}
\newcommand{\gb}[1]{\textcolor{bleu}{\textbf{#1}}}
Et pas celle-ci :

Code : Tout sélectionner

\usepackage{color}
\definecolor{bleu}{rgb}{0.1,0.2,0.8}
\newcommand{\cb}[1]{\textcolor{bleu}{\verb{#1}}}
Est-ce l'utilisation de \verb qui fait que cela ne fonctionne pas ?
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Créer une nouvelle commande avec \verb

Message non lu par un bon petit »

kriztho a écrit : dimanche 27 février 2022, 16:04 Et pas celle-ci :

Code : Tout sélectionner

\usepackage{color}
\definecolor{bleu}{rgb}{0.1,0.2,0.8}
\newcommand{\cb}[1]{\textcolor{bleu}{\verb{#1}}}
C'est toujours la même histoire : on ne peut pas écrire ça, car l'argument #1 va être lu (donc tokénisé) par la macro \cb selon le régime de catcode « normal ». Ce faisant, les tokens ainsi créés ont leur catcode gelé et désormais immuables : il n'est plus possible à la macro \verb de les modifier par la suite.
kriztho a écrit : dimanche 27 février 2022, 16:04 Est-ce l'utilisation de \verb qui fait que cela ne fonctionne pas ?
Non, c'est la règle de TeX qui dit qu'un caractère lu par une macro devient un token et son catcode est irrémédiablement gelé.

À moi de poser une question : pourquoi la macro \Verb que j'ai proposée ne vous convient-elle pas ???
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2035
Inscription : samedi 29 décembre 2007, 00:58

Re: Créer une nouvelle commande avec \verb

Message non lu par projetmbc »

Et pourquoi pas passer via \newcommand{\cb}[1]{\textcolor{bleu}{\texttt{#1}}} ?
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 949
Inscription : vendredi 12 juin 2009, 22:35
Localisation : Chambéry

Re: Créer une nouvelle commande avec \verb

Message non lu par un bon petit »

projetmbc a écrit : dimanche 27 février 2022, 21:57 Et pourquoi pas passer via \newcommand{\cb}[1]{\textcolor{bleu}{\texttt{#1}}} ?
Parce que « composition en police à chasse fixe » n'est pas du verbatim.
Il suffit d'essayer \cb{a#b}, par exemple...
kriztho
Utilisateur confirmé
Utilisateur confirmé
Messages : 30
Inscription : vendredi 30 avril 2021, 15:14
Statut actuel : Enseignant

Re: Créer une nouvelle commande avec \verb

Message non lu par kriztho »

Bonjour un bon petit,
Quand vous dites : "À moi de poser une question : pourquoi la macro \Verb que j'ai proposée ne vous convient-elle pas ???" Si elle me convient parfaitement, comme je l'avais dit : "Quoiqu'il en soit, la première solution, sobre et efficace, d'utiliser xpatch fonctionne parfaitement et me convient bien." J'en suis parfaitement satisfait et je vous en remercie encore.
Ma question sur ma synatxe avec \newcommand a juste pour objectif de mieux comprendre pourquoi cela ne fonctionne pas et à nouveau vous m'avez parfaitement bien répondu et encore merci.
Comme précédemment, reste pour moi à creuser ces paramètres techniques pour bien les comprendre et essayer de les assimiler. Il me reste tellement de chose à comprendre...