verbatim, tikz, couleur et environnement

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.

verbatim, tikz, couleur et environnement

Messagepar zariski63 » Samedi 25 Août 2012, 11:19

Bonjour!
Je reviens sur mes soucis de verbatim.
J'ai glané le code suivant sur le forum:

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}


\usepackage{xcolor}
  \definecolor{vertclair}{rgb}{0.10,0.55,0.17}
  \definecolor{vertfonce}{rgb}{0,0.44,0}
  \definecolor{grisclair}{rgb}{0.78,0.78,0.78}
  \definecolor{prune}{rgb}{0.65,0.00,0.00}
  \definecolor{bleufonce}{rgb}{0.06,0.06,1.00}
  \definecolor{violet}{rgb}{0.21,0.18,0.73}
  \definecolor{orange}{rgb}{0.93,0.46,0.00}
 
 
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{verbatim}


%%%%%%%%% Code Latex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\usepackage{textcomp}
%\lstnewenvironment{codelatex}[1][]{%
     \lstset{
         language = {[LaTeX]TeX},
         upquote = true,
         columns = flexible,
         commentstyle = \color{gray}\ttfamily,
         basicstyle = \ttfamily,
         moretexcs = {piccaption,parpic,subref,includegraphics,cellcolor,rowcolor,doublerulesepcolor,
                    arrayrulecolor,renewcommand,arraystretch,jot,hdashline,dashlinedash,dashlinegap,
                    hhline,tt,newcolumntype,newcommandx,renewcommandx,color,textcolor,definecolor,
                    colorbox,fcolorbox,pagecolor,texteuro,setlength,columncolor,setlongtables,
                    endfirsthead,endhead,endfoot,arrayrulecolor,doublerulesepcolor,savebox,reflectbox,
                    rotatebox,scalebox,resizebox,lstnewenvironment,lstset,usetikzlibrary,
                    overset,underset,sideset,genfrac,binom,underrightarrow,underleftarrow,
                    underleftrightarrow,xrightarrow,overleftrightarrow,xleftarrow,systeme,
                    dfrac,tfrac,mathfrak,xleftrightarrow,xhookleftarrow,xLeftarrow,
                    xhookrightarrow,xRightarrow,xmapsto,xLeftrightarrow,prescript,adjustlimits,
                    mathclap,mathllap,mathrlap,smashoperator,substack,DeclareMathOperator,
                    DeclarePairedDelimiter,DeclarePairedDelimiterX
                    },
         texcsstyle = *\color{bleufonce}\ttfamily,  %conjointement avec moretexcs
         morekeywords = {SCfigure,sidecap,figure,lrbox,longtable,sideways,sidewaystable,
         turn,tabularx,eqnarray,tabular,minipage,table,tabbing,listings,textcomp,tikzpicture,
         pgf,tikz,math,displaymath,subarray,matrix,pmatrix, bmatrix,Bmatrix, vmatrix, Vmatrix,smallmatrix,cases,align,drcases,equation},
         keywordstyle = \color{vertfonce}\ttfamily,  %conjointement avec morekeywords
         texcsstyle = *[2]\color{red}\ttfamily,
         texcsstyle = *[3]\color{Magenta}\ttfamily,
         keywordstyle=[2]\color{red} \ttfamily,
         keywordstyle =[3]\color{prune} \ttfamily,
         %#1
        }
%}{}
%%%%%%%%% Fin Code Latex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%écrire le code dans un fichier temporaire puis en le lire avec \lstinputlisting:


\makeatletter
\newwrite{\temp@listing@out}
\newenvironment{code}{%
\immediate\openout\temp@listing@out \jobname-temp.tex
\bgroup\@bsphack
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\temp@listing@out{\the\verbatim@line}%
}%
\verbatim@start}
{\@esphack\egroup
\immediate\closeout \temp@listing@out
\begin{tikzpicture}
    \node [fill=red!10,rectangle,inner xsep=10pt,inner ysep=10pt] (box)
       {\begin{minipage}{\dimexpr\textwidth-21.66pt\relax}
       \lstinputlisting{\jobname-temp.tex}
       \end{minipage}
       };
    \node[text=white,fill=red,rectangle, shading=ball, ball color=red, above right] (title) at ($(box.north west)+(-0.03,0)$){\textbf{CODE}};
    \draw[color=red!50!black,very thick] (box.north west)--(box.south west)--(box.south east);
\end{tikzpicture}

}
\makeatother


\begin{document}

\begin{code}
\catcode`\^=13
\symbol{"23}\symbol{'20}

\makeatletter
\define@cmdkey[EX]{cercle}{r}{} % On déclare le rayon "r"
\define@cmdkey[EX]{cercle}{x}{} % On déclare l'abscisse du centre

$\genfrac{(}{)}{0pt}{0}{n}{p}$

\end{code}

\end{document}


Je l'ai un peu modifié. Cependant il me reste un soucis: comment coloriser un mot particulier de mon listing ?
Exemple : je veux avoir "cercle" en rouge ...

Merci
zariski63
Kilo-utilisateur
 
Messages: 222
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: verbatim, tikz, couleur, environnement

Messagepar francois » Samedi 25 Août 2012, 12:59

Bonjour,

Il faut que, dans l'argument de la commande "\lstset", tu ajoutes deux options :

Code: Tout sélectionner
\lstset{%
    % plein d'options etc.
    % etc.
    %
    emph={cercle},% <--- ici tu peux ajouter toute une famille de mots séparés par des virgules.
    emphstyle={\color{red}},% <--- le style d'emphase associé à la famille de mots.
}

La documentation du package "listings" se trouve à cette adresse :
http://mirror.ctan.org/macros/latex/con ... stings.pdf

À la section 2.8 de la page 17, les options "emph" et "emphstyle" sont expliquées plus en détail. Notamment, on y voit un petit exemple (page 18) où l'on peut même définir 2 (ou plus) familles de mots avec un style d'emphase propre à chaque famille. Ça peut toujours être utile.
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar zariski63 » Samedi 25 Août 2012, 13:27

pas mal mais je préfèrerais mettre ça dans une option lors de l'utilisation de mon environnement "code", du style :

Code: Tout sélectionner
\begin{code} [emph={cercle},emphstyle={\color{red}}]
\catcode`\^=13
\symbol{"23}\symbol{'20}

\makeatletter
\define@cmdkey[EX]{cercle}{r}{} % On déclare le rayon "r"
\define@cmdkey[EX]{cercle}{x}{} % On déclare l'abscisse du centre

$\genfrac{(}{)}{0pt}{0}{n}{p}$

\end{code}
zariski63
Kilo-utilisateur
 
Messages: 222
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar francois » Samedi 25 Août 2012, 13:47

zariski63 a écrit:pas mal mais je préfèrerais mettre ça dans une option lors de l'utilisation de mon environnement "code"

Impossible de le deviner à la lecture de ton message précédent.

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}


\usepackage{xcolor}
  \definecolor{vertclair}{rgb}{0.10,0.55,0.17}
  \definecolor{vertfonce}{rgb}{0,0.44,0}
  \definecolor{grisclair}{rgb}{0.78,0.78,0.78}
  \definecolor{prune}{rgb}{0.65,0.00,0.00}
  \definecolor{bleufonce}{rgb}{0.06,0.06,1.00}
  \definecolor{violet}{rgb}{0.21,0.18,0.73}
  \definecolor{orange}{rgb}{0.93,0.46,0.00}
 
 
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{verbatim}


%%%%%%%%% Code Latex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\usepackage{textcomp}
%\lstnewenvironment{codelatex}[1][]{%
     \lstset{
         language = {[LaTeX]TeX},
         upquote = true,
         columns = flexible,
         commentstyle = \color{gray}\ttfamily,
         basicstyle = \ttfamily,
         moretexcs = {piccaption,parpic,subref,includegraphics,cellcolor,rowcolor,doublerulesepcolor,
                    arrayrulecolor,renewcommand,arraystretch,jot,hdashline,dashlinedash,dashlinegap,
                    hhline,tt,newcolumntype,newcommandx,renewcommandx,color,textcolor,definecolor,
                    colorbox,fcolorbox,pagecolor,texteuro,setlength,columncolor,setlongtables,
                    endfirsthead,endhead,endfoot,arrayrulecolor,doublerulesepcolor,savebox,reflectbox,
                    rotatebox,scalebox,resizebox,lstnewenvironment,lstset,usetikzlibrary,
                    overset,underset,sideset,genfrac,binom,underrightarrow,underleftarrow,
                    underleftrightarrow,xrightarrow,overleftrightarrow,xleftarrow,systeme,
                    dfrac,tfrac,mathfrak,xleftrightarrow,xhookleftarrow,xLeftarrow,
                    xhookrightarrow,xRightarrow,xmapsto,xLeftrightarrow,prescript,adjustlimits,
                    mathclap,mathllap,mathrlap,smashoperator,substack,DeclareMathOperator,
                    DeclarePairedDelimiter,DeclarePairedDelimiterX
                    },
         texcsstyle = *\color{bleufonce}\ttfamily,  %conjointement avec moretexcs
         morekeywords = {SCfigure,sidecap,figure,lrbox,longtable,sideways,sidewaystable,
         turn,tabularx,eqnarray,tabular,minipage,table,tabbing,listings,textcomp,tikzpicture,
         pgf,tikz,math,displaymath,subarray,matrix,pmatrix, bmatrix,Bmatrix, vmatrix, Vmatrix,smallmatrix,cases,align,drcases,equation},
         keywordstyle = \color{vertfonce}\ttfamily,  %conjointement avec morekeywords
         texcsstyle = *[2]\color{red}\ttfamily,
         texcsstyle = *[3]\color{Magenta}\ttfamily,
         keywordstyle=[2]\color{red} \ttfamily,
         keywordstyle =[3]\color{prune} \ttfamily,
         %#1
        }
%}{}
%%%%%%%%% Fin Code Latex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%écrire le code dans un fichier temporaire puis en le lire avec \lstinputlisting:


\makeatletter
\newwrite{\temp@listing@out}
\newenvironment{code}[1][]{%
%
\def\code@OPTIONS@LOCALES{#1}%
%
\immediate\openout\temp@listing@out \jobname-temp.tex
\bgroup\@bsphack
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\temp@listing@out{\the\verbatim@line}%
}%
\verbatim@start}
{\@esphack\egroup
\immediate\closeout \temp@listing@out
\begin{tikzpicture}
    \node [fill=red!10,rectangle,inner xsep=10pt,inner ysep=10pt] (box)
       {\begin{minipage}{\dimexpr\textwidth-21.66pt\relax}
       \expandafter\lstinputlisting\expandafter[\code@OPTIONS@LOCALES]{\jobname-temp.tex}
       \end{minipage}
       };
    \node[text=white,fill=red,rectangle, shading=ball, ball color=red, above right] (title) at ($(box.north west)+(-0.03,0)$){\textbf{CODE}};
    \draw[color=red!50!black,very thick] (box.north west)--(box.south west)--(box.south east);
\end{tikzpicture}

}
\makeatother


\begin{document}

\begin{code}[emph={cercle},emphstyle=\color{red}]
\catcode`\^=13
\symbol{"23}\symbol{'20}

\makeatletter
\define@cmdkey[EX]{cercle}{r}{} % On déclare le rayon "r"
\define@cmdkey[EX]{cercle}{x}{} % On déclare l'abscisse du centre

$\genfrac{(}{)}{0pt}{0}{n}{p}$

\end{code}

\end{document}
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar zariski63 » Samedi 25 Août 2012, 14:07

Mouarf !!!!
c'est ce que je voulais !!!!
Pardon pour mes explications ésotériques.
Grand merci !

Par contre, les lignes pures TEX m'intriguent et titillent ma curiosité.
Faudait que je me plonge dedans mais la doc ne prospère pas sur le net ...
Je pense que pour faire des macros plus pointues, il doit falloir se mettre à TEX ! non ?
zariski63
Kilo-utilisateur
 
Messages: 222
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar francois » Samedi 25 Août 2012, 14:45

Oui, je pense que pour écrire du code LaTeX un peu pointu, il faut connaître le fonctionnement de TeX car LaTeX n'est qu'une sur-couche de TeX. Mais ce n'est pas facile (personnellement je n'y connais pas grand chose dans ce domaine, mais suffisamment pour savoir que c'est difficile). De plus, LaTeX dispose d'un très grand nombre de packages. Au début, je passais souvent du temps à me faire mes propres macros. À force, plus le temps passe, moins je me fais des macros perso et plus j'utilise les packages disponibles (ou éventuellement des macros perso mais qui se réduisent à des simples concaténations de macros issues de packages), qui font ce que je souhaite mais en bien mieux que ce que je pourrais coder moi-même. Ceci étant, au niveau de la mise en page, je ne cherche jamais à faire des choses très « exotiques » (pas [seulement] par flemme mais vraiment par goût).
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar zariski63 » Samedi 25 Août 2012, 14:56

Il fallait quand même la trouver la commande "code" !!!!!!
Moi je dis BRAVO, suis admiratif !
Mais je reste sur ma faim ... j'aime pas ne pas comprendre ces lignes de code.
zariski63
Kilo-utilisateur
 
Messages: 222
Inscription: Jeudi 14 Octobre 2010, 08:20
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar francois » Samedi 25 Août 2012, 17:09

zariski63 a écrit:Il fallait quand même la trouver la commande "code" !!!!!!

Certes mais c'est parce que tu veux une mise en page un peu exotique (ce n'est pas un reproche, tu choisis ta mise en page comme tu veux bien sûr). Pour ma part, je me serais contenté de plus simple et uniquement en utilisant ce que me propose le package "listings". Du coup pas besoin d'être un expert en TeX, juste besoin de lire un peu la doc du package "listings". Par exemple un truc comme ça me conviendrait très bien :

Code: Tout sélectionner
\documentclass[french,a4paper,12pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[scale=0.85]{geometry}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{babel}

\definecolor{roseclair}{rgb}{1,0.85,0.85}

% On définit un style que l'on pourra appeler dans l'environnement {lstlisting}
% simplement avec la clé "style=LATEX".
\lstdefinestyle{LATEX}{%
   language={[LaTeX]TeX},%
   backgroundcolor=\color{roseclair},%
   frame=single,%
   aboveskip=\bigskipamount,%
   belowskip=\bigskipamount,%
   framerule=0pt,%
   commentstyle=\color{gray}\ttfamily,%
   basicstyle=\ttfamily,%
   keywordstyle=\color{blue}\ttfamily,%
   % Évidemment ici, on met tout ce qu'on souhaite pour ce style de listing.
}

% Le style LATEX sera le style par défaut (si aucun style n'est précisé).
\lstset{style=LATEX}

\begin{document}


Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla :
%
\begin{lstlisting}
\catcode`\^=13
\symbol{"23}\symbol{'20}

\makeatletter
\define@cmdkey[EX]{cercle}{r}{} % On déclare le rayon "r"
\define@cmdkey[EX]{cercle}{x}{} % On déclare l'abscisse du centre

$\genfrac{(}{)}{0pt}{0}{n}{p}$
\end{lstlisting}
%
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.



Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla :
%
\begin{lstlisting}[emph={cercle},emphstyle={\color{red}}]
\catcode`\^=13
\symbol{"23}\symbol{'20}

\makeatletter
\define@cmdkey[EX]{cercle}{r}{} % On déclare le rayon "r"
\define@cmdkey[EX]{cercle}{x}{} % On déclare l'abscisse du centre

$\genfrac{(}{)}{0pt}{0}{n}{p}$
\end{lstlisting}
%
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.
Blabla blabla. Blabla blabla. Blabla blabla.

\end{document}

C'est beaucoup plus simple au niveau du code (pas de fichier temporaire créé) et ça s'approche un peu de ton code au niveau de l'allure mais pas tout à fait non plus, on est bien d'accord.

zariski63 a écrit:Mais je reste sur ma faim ... j'aime pas ne pas comprendre ces lignes de code.

En ce qui me concerne, dans ton code, je n'y comprends pas grand chose et je serais bien incapable de t'expliquer, désolé. Après, pour les modifs que j'ai faites :

Code: Tout sélectionner
Avant:
\newenvironment{code}{%

Après:
\newenvironment{code}[1][]{%
    \def\code@OPTIONS@LOCALES{#1}%

J'ai ajouté un argument optionnel dans l'environnement "{code}", argument qui ne contient rien par défaut. Ensuite, le contenu de cet argument (#1), je le stocke dans une macro (via la commande "\def" qui est une commande TeX) qui s'appelle "\code@OPTIONS@LOCALES".

Code: Tout sélectionner
Avant (c'est la commande qui crée le listing via le fichier temporaire):
\lstinputlisting{\jobname-temp.tex}

Après:
\expandafter\lstinputlisting\expandafter[\code@OPTIONS@LOCALES]{\jobname-temp.tex}

L'idée ici est d'insérer les options dans la commande "\lstinputlisting". Du coup, au départ on pourrait penser que faire "\lstinputlisting[\code@OPTIONS@LOCALES]{\jobname-temp.tex}" suffirait. Mais apparemment, ça fait planter la commande "\lstinputlisting". Alors il faut développer la macro "\code@OPTIONS@LOCALES" avant que la commande "\lstinputlisting" ne s'exécute. Et c'est là qu'interviennent les "\expandafter" qui, en gros, permettent de stopper le travail de lecture du source fait par le compilateur LaTeX et de développer des macros qui se trouvent plus loin dans le source avant que le compilateur ne reprenne son travail de lecture du source. Voici un petit exemple qui montre ce que fait "\expandafter" :

Code: Tout sélectionner
\documentclass[12pt,a4paper]{minimal}


% La commande \def c'est un peu comme la commande \newcommand
% sauf qu'avec \def on peut redénir autant de fois que l'on
% veut une commande.
\def\Bla{bla bla bla}

\def\RedefinirBla{\def\Bla{GNA!!!}}


\begin{document}

% Affiche « bla bla bla »
1. \Bla

% Affiche « GNA!!! » car on redéfinit \Bla juste avant.
2. \RedefinirBla \Bla

% On redonne à \Bla sa définition initiale.
\def\Bla{bla bla bla}

% Affiche « bla bla bla » car il y a le \expandafter qui dit à LaTeX : « avant de lire
% le token suivant (\RedefinirBla), tu vas développer le token juste après (\Bla) ».
% Donc avant le lire et d'exécuter \RedefinirBla, LaTeX va developper \Bla,
% qui à ce stade se développe en « bla bla bla » car la redéfinition n'a toujours
% pas eu lieu. Puis LaTeX reprend son travail normal, mais maintenant au lieu d'avoir
% sous les yeux « \RedefinirBla \Bla », il a sous les yeux « \RedefinirBla bla bla bla ».
3. \expandafter \RedefinirBla \Bla

\end{document}

Voilà. Au niveau des explications, je ne peux pas t'en dire plus.

Si tout cela t'intéresse, voici deux références (en français, tu n'en as pas 36) :
http://www.amazon.fr/Texbook-Compositio ... 987&sr=8-2
http://www.amazon.fr/ma%C3%AEtrise-Tex- ... 044&sr=8-6
Perso, je trouve le deuxième beaucoup plus facile à lire que le premier (par contre le titre du deuxième est mensonger car il n'est question que de TeX dans ce livre pas du tout de LaTeX).
François Lafont
francois
Giga-utilisateur
 
Messages: 856
Inscription: Mercredi 20 Septembre 2006, 23:14
Localisation: Antony
Statut actuel: Actif et salarié | Enseignant

Re: verbatim, tikz, couleur, environnement

Messagepar zariski63 » Samedi 25 Août 2012, 17:43

Merci beaucoup !
Effectivement ma présentation est un peu exotique mais c'est simplement pour mettre en évidence des parties de code car je me fabrique un condensé de commandes LaTeX.
C'est plus facile à lire et à ré-utiliser.
A plus pour d'autres explications ...
Bonne soirée.
zariski63
Kilo-utilisateur
 
Messages: 222
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: Ahrefs [Bot], Bing [Bot], Google Adsense [Bot], Proximic [Spider] et 33 invités