Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Listings : gestion des accents (utf8) et montrer les espaces seulement en dehors des commentaires

339 views
Skip to first unread message

Francois Lafont

unread,
Mar 25, 2012, 7:26:14 AM3/25/12
to
Bonjour à tous,

Voici mon ECM (je suis sous Debian Squeeze avec TeXLive 2011 à jour) :

%----------------------------------------------
\documentclass[french,a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{babel}

\lstset{language=bash,%
basicstyle=\ttfamily,%
commentstyle=\color{gray},%
showspaces=true,%
numbers=none,%
frame=single,%
}

\begin{document}

\begin{lstlisting}[escapeinside=::]
# On monte la cl:\'e: USB.
mount -t auto /dev/sdc1 /mnt

# On d:\'e:monte la cl:\'e:.
umount /mnt
\end{lstlisting}

\end{document}
%----------------------------------------------

Comme vous vous en doutez, mon ECM est encodé en utf8.

1) J'ai regardé un peu la doc de listings et je n'ai pas trouvé mieux
pour pourvoir afficher un caractère accentué dans l'environnement
lstlisting. Pouvez-vous me confirmer que c'est bien le cas ? Peut-être
que je suis passé à côté d'une solution bien meilleure ? En effet, celle
utilisée dans l'ECM ne me satisfait pas du tout car les « é » ne sont
pas grisés comme je le souhaiterais bien sûr.

J'ai bien noté l'existence du paquet listingutf8 mais si j'ai bien
compris il sert uniquement quand on importe des fichiers source externes
alors que dans mon document, je ne cite que du code très court et
j'aimerais bien pouvoir l'écrire dans le source .tex directement.

2) Avec « showspaces=true », on voit explicitement les espaces, chose
qui me plaît. Mais dans les commentaires (lignes précédées par un #), je
trouve qu'ils sont inutiles et même gênants. Est-il possible de faire en
sorte d'avoir un « showspaces=true » valable uniquement sur les lignes
qui ne sont pas des commentaires ?

Merci d'avance pour votre aide.

--
François Lafont

Paul Gaborit

unread,
Mar 25, 2012, 10:10:05 AM3/25/12
to

À (at) Sun, 25 Mar 2012 13:26:14 +0200,
Francois Lafont <francoi...@nospam.invalid> écrivait (wrote):

> Bonjour à tous,
[...]
> Comme vous vous en doutez, mon ECM est encodé en utf8.
>
> 1) J'ai regardé un peu la doc de listings et je n'ai pas trouvé mieux
> pour pourvoir afficher un caractère accentué dans l'environnement
> lstlisting. Pouvez-vous me confirmer que c'est bien le cas ? Peut-être
> que je suis passé à côté d'une solution bien meilleure ? En effet, celle
> utilisée dans l'ECM ne me satisfait pas du tout car les « é » ne sont
> pas grisés comme je le souhaiterais bien sûr.
>
> J'ai bien noté l'existence du paquet listingutf8 mais si j'ai bien
> compris il sert uniquement quand on importe des fichiers source externes
> alors que dans mon document, je ne cite que du code très court et
> j'aimerais bien pouvoir l'écrire dans le source .tex directement.

À ma connaissance, le package listingutf8 est pourtant le seul moyen de
s'en sortir... et ça fonctionne en l'associant au package
filecontents. Voici une version améliorée de votre ECM :

%----------------------------------------
\documentclass[french,a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{listingsutf8}
\usepackage{filecontents}
\usepackage{babel}

\lstset{language=bash,%
basicstyle=\ttfamily,%
commentstyle=\color{gray},%
showspaces=true,%
numbers=none,%
frame=single,%
}

\begin{document}

\begin{filecontents*}{usbkey-ex.txt}
# On monte la clé USB
mount -t auto /dev/sdc1 /mnt

# On démonte la clé
umount /mnt
\end{filecontents*}

\lstinputlisting[inputencoding=utf8/latin1]{usbkey-ex.txt}

\end{document}
%----------------------------------------


> 2) Avec « showspaces=true », on voit explicitement les espaces, chose
> qui me plaît. Mais dans les commentaires (lignes précédées par un #), je
> trouve qu'ils sont inutiles et même gênants. Est-il possible de faire en
> sorte d'avoir un « showspaces=true » valable uniquement sur les lignes
> qui ne sont pas des commentaires ?

Il me semble qu'il n'y a que deux options pour choisir où voir les
espaces : dans les chaînes (showstringspaces) et partout ailleurs
(showspaces). Cette dernière ne semble pas permettre de distinguer du
code et des commentaires...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>

Herbert Voss

unread,
Mar 25, 2012, 11:18:36 AM3/25/12
to
Am 25.03.2012 13:26, schrieb Francois Lafont:

> Voici mon ECM (je suis sous Debian Squeeze avec TeXLive 2011 à jour) :

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{listings}

\lstset{language=bash,
basicstyle=\ttfamily,
commentstyle=\color{gray},
showspaces,
numbers=none,
frame=single,
literate={é}{{\'e}}1 {à}{{\`a}}1 % ...
}
\begin{document}

\begin{lstlisting}
# On monte la clé USB
mount -t auto /dev/sdc1 /mnt

# On démonte la clé
umount /mnt
\end{lstlisting}

\end{document}

Herbert

didier

unread,
Mar 25, 2012, 5:45:24 PM3/25/12
to
On Sun, 25 Mar 2012 13:26:14 +0200, Francois Lafont wrote:

> # On monte la cl:\'e: USB.

N'écrit-on pas plutôt « clef » ?
et donc plus de problème ;)
--
didierdescamps arobe free point fr

Francois Lafont

unread,
Mar 26, 2012, 5:13:02 PM3/26/12
to
Bonsoir,
Ok, merci beaucoup pour cette réponse qui me convient bien, car au final
on écrit quand même le code dans le source .tex.

>> 2) Avec « showspaces=true », on voit explicitement les espaces, chose
>> qui me plaît. Mais dans les commentaires (lignes précédées par un #), je
>> trouve qu'ils sont inutiles et même gênants. Est-il possible de faire en
>> sorte d'avoir un « showspaces=true » valable uniquement sur les lignes
>> qui ne sont pas des commentaires ?
>
> Il me semble qu'il n'y a que deux options pour choisir où voir les
> espaces : dans les chaînes (showstringspaces) et partout ailleurs
> (showspaces). Cette dernière ne semble pas permettre de distinguer du
> code et des commentaires...

Oui, c'est ce que je me suis dit aussi en fouillant dans la doc. Bon,
tant pis... :-)

Merci pour votre aide Paul.


--
François Lafont

Francois Lafont

unread,
Mar 26, 2012, 5:19:31 PM3/26/12
to
Le 25/03/2012 17:18, Herbert Voss a écrit :

> \documentclass{article}
> \usepackage[utf8]{inputenc}
> \usepackage{xcolor}
> \usepackage{listings}
>
> \lstset{language=bash,
> basicstyle=\ttfamily,
> commentstyle=\color{gray},
> showspaces,
> numbers=none,
> frame=single,
> literate={é}{{\'e}}1 {à}{{\`a}}1 % ...
> }
> \begin{document}
>
> \begin{lstlisting}
> # On monte la clé USB
> mount -t auto /dev/sdc1 /mnt
>
> # On démonte la clé
> umount /mnt
> \end{lstlisting}
>
> \end{document}

Merci beaucoup Herbert. :-)

Je pense que je vais opter pour cette solution car au final la liste des
caractères accentués que j'utilise est assez limitée.

Pour ceux que ça intéresse, j'ai trouvé entre temps un contournement
possible en passant par xelatex pour compiler ce code :

%--------------------------------------------
\documentclass[french,a4paper,12pt]{article}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{lmodern}
\usepackage{geometry}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{babel}

\lstset{language=bash,
basicstyle=\ttfamily,
commentstyle=\color{gray},
showspaces,
numbers=none,
frame=single,
}

\begin{document}

\begin{lstlisting}
# On monte la clé USB
mount -t auto /dev/sdc1 /mnt

# On démonte la clé
umount /mnt
\end{lstlisting}

\end{document}
%--------------------------------------------

Ceci étant ça oblige à revoir son préambule.


--
François Lafont

Francois Lafont

unread,
Mar 26, 2012, 5:25:17 PM3/26/12
to
Le 25/03/2012 23:45, didier a écrit :

>> # On monte la cl:\'e: USB.
>
> N'écrit-on pas plutôt « clef » ?
> et donc plus de problème ;)

:-))

Oui en effet. Le pire, c'est qu'au début, j'essayais de contourner comme
ça : "clef" au lieu de "clé", "dossier" au lieu de "répertoire" etc.
Mais ça demande un effort et un talent littéraire que je n'ai pas. Mais
pourquoi pas... Georges Perec a bien fait un roman de 300 page sans la
lettre e. ;-)


--
François Lafont

Paul Gaborit

unread,
Mar 27, 2012, 2:35:32 AM3/27/12
to

À (at) Mon, 26 Mar 2012 23:19:31 +0200,
Francois Lafont <francoi...@nospam.invalid> écrivait (wrote):

> Le 25/03/2012 17:18, Herbert Voss a écrit :
>
>> \documentclass{article}
>> \usepackage[utf8]{inputenc}
>> \usepackage{xcolor}
>> \usepackage{listings}
>>
>> \lstset{language=bash,
>> basicstyle=\ttfamily,
>> commentstyle=\color{gray},
>> showspaces,
>> numbers=none,
>> frame=single,
>> literate={é}{{\'e}}1 {à}{{\`a}}1 % ...
>> }
>> \begin{document}
>>
>> \begin{lstlisting}
>> # On monte la clé USB
>> mount -t auto /dev/sdc1 /mnt
>>
>> # On démonte la clé
>> umount /mnt
>> \end{lstlisting}
>>
>> \end{document}
>
> Merci beaucoup Herbert. :-)
>
> Je pense que je vais opter pour cette solution car au final la liste des
> caractères accentués que j'utilise est assez limitée.

Outre la nécessité de donner la liste explicite des caractères à coder,
cette solution pose un petit souci pour les caractères accentués
lorqu'on veut faire du copier/coller depuis le fichier PDF généré...

Mais, heureusement, comme d'autres caractères ont déjà ce souci (le /
par exemple), pour résoudre ce problème, il faut ajouter les deux
options suivantes :

keepspaces=true,
flexiblecolumns=true,

Et là, le copier/coller marche pour tout les caractères.

Francois Lafont

unread,
Mar 27, 2012, 10:20:46 AM3/27/12
to
Bonjour,

Le 27/03/2012 08:35, Paul Gaborit a écrit :

> Outre la nécessité de donner la liste explicite des caractères à coder,
> cette solution pose un petit souci pour les caractères accentués
> lorqu'on veut faire du copier/coller depuis le fichier PDF généré...
>
> Mais, heureusement, comme d'autres caractères ont déjà ce souci (le /
> par exemple), pour résoudre ce problème, il faut ajouter les deux
> options suivantes :
>
> keepspaces=true,
> flexiblecolumns=true,
>
> Et là, le copier/coller marche pour tout les caractères.

Merci pour ces précisions Paul. Effectivement, les options font
exactement ça. C'est parfait, je n'en demandais pas tant.

Merci encore.
À+

--
François Lafont

Sebastien Vauban

unread,
Mar 27, 2012, 10:52:31 AM3/27/12
to
Bonjour Francois et Paul,
Cette solution est-elle meilleure, ou simplement équivalente, à celle
d'Herbert (où on utilise le package standard listings, avec juste une
définition de mappings via literate) ?

Sincèrement,
Seb

--
Sebastien Vauban

Paul Gaborit

unread,
Mar 27, 2012, 1:46:13 PM3/27/12
to

À (at) Tue, 27 Mar 2012 16:52:31 +0200,
"Sebastien Vauban" <wxhgmq...@spammotel.com> écrivait (wrote):

> Cette solution est-elle meilleure, ou simplement équivalente, à celle
> d'Herbert (où on utilise le package standard listings, avec juste une
> définition de mappings via literate) ?

À mon sens, aucune des deux solutions n'est meilleure que l'autre.

La solution d'Herbert nécessite de lister explicitement tous les
caractères accentués utilisés.

Ma solution reconnaît les caractères directement mais passe par un
peudo-encodage en latin1 (ou autre codage reconnu par inputenc) qui
limite donc de fait les caractères utf8 réellement utilisables (en
pratique, cela ne m'a jamais posé de problème). De plus, cela passe par
la création d'un fichier externe. Ça peut être un avantage (je trouve
très pratique de générer tous mes fichiers d'exemple directement depuis
mon document LaTeX) ou un inconvénient (ça laisse un ou plusieurs
fichiers parasites).

À vrai dire, la seule "bonne" solution serait que listings gère
réellement l'utf8. Mais c'est une autre histoire...

Denis Bitouzé

unread,
Mar 27, 2012, 5:12:48 PM3/27/12
to
Le mardi 27/03/12 à 19h46,
Paul Gaborit <Paul.G...@invalid.invalid> a écrit :

> À vrai dire, la seule "bonne" solution serait que listings gère
> réellement l'utf8. Mais c'est une autre histoire...

Carst Heinz y avait travaillé dans une version, malheureusement restée
au stade bêta :

http://www.atscire.de/index.php?nav=products/listings2

mais que Jean-Côme et moi avons pu utiliser sans problème majeur pour
l'édition 2010 de notre livre.
--
Denis

Paul Gaborit

unread,
Mar 27, 2012, 6:33:01 PM3/27/12
to

À (at) Tue, 27 Mar 2012 23:12:48 +0200,
Denis Bitouzé <dbito...@spam.wanadoo.fr> écrivait (wrote):
C'est effectivement une très bonne piste (qui semble bien fonctionner
pour mes documents après quelques tests rapides).

Sait-on pourquoi cette nouvelle version semble au point mort ?
0 new messages