Listings, beamer et \end

Bonjour,

L’ECM suivant ne pose aucun pb

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{document}

par contre avec beamer, et malgré l’option fragile

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{frame}
\end{document}

la command \end dans l’environnement lstlisting est systématiquement interprétée, d’où une erreur de compilation, mais pas les autres commandes ! Aurai-je loupé un truc ?


Jean-Yves

Bonjour,

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{frame}
\end{document}

la command \end dans l’environnement lstlisting est systématiquement interprétée, d’où une erreur de compilation, mais pas les autres commandes ! Aurai-je loupé un truc ?

Si je comprends bien, le fonctionnement de [fragile] est de mettre tout
le contenu entre \begin{frame} et \end{frame} dans un fichier .vrb, et
de le traiter de façon particulière ; le \end{frame} utilisé est le
premier, donc pas celui voulu ici…

Il faut donc, d’une façon ou d’une autre, changer ce \end{frame}, sans
changer ce qu’il affiche. Une façon de faire en utilisant un escapechar :

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}[escapechar=+]
\begin{frame}
\end{++frame}
\end{lstlisting}
\end{frame}
\end{document}

Bon week-end,


Nico

Bonjour,

Dans la doc de beamer, page 18, il y a une piste d’utilisation de listings.

Le ECM suivant adapté de la doc fonctionne chez moi :

%---------------

\documentclass{beamer}

\usepackage{listings}

\begin{document}

\defverbatim[colored]\mylisting{%

\begin{lstlisting}[frame=single, emph={cout}, emphstyle={\color{blue}}]

\begin{frame}

Ceci est un exemple

\end{frame}

\end{lstlisting}

}

\begin{frame}{Diapo 1}

\mylisting

\end{frame}

\defverbatim[colored]\mylisting{%

\begin{lstlisting}[frame=single, emph={cout}, emphstyle={\color{blue}}]

\begin{frame}

Ceci est un 2eme exemple

\end{frame}

\end{lstlisting}

}

\begin{frame}{Diapo 2}

\mylisting

\end{frame}

\end{document}

%-------------------

En espérant que cela vous inspire.

Cordialement

Gérard

Le 07/01/2022 à 16:51, Jean-Yves Baudais a écrit :

Bonjour,

L’ECM suivant ne pose aucun pb

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{document}

par contre avec beamer, et malgré l’option fragile

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{frame}
\end{document}

la command \end dans l’environnement lstlisting est systématiquement interprétée, d’où une erreur de compilation, mais pas les autres commandes ! Aurai-je loupé un truc ?

Le 07/01/22 à 16h51, Jean-Yves Baudais a écrit :

Bonjour,

Bonsoir,

par contre avec beamer, et malgré l’option fragile

\documentclass{beamer} \usepackage{listings} \begin{document} \begin{frame}[fragile] \begin{lstlisting} \begin{frame} \end{frame} \end{lstlisting} \end{frame} \end{document}

la command \end dans l’environnement lstlisting est systématiquement interprétée, d’où une erreur de compilation, mais pas les autres commandes ! Aurai-je loupé un truc ?

Il suffit de créer un nouvel environnement destiné aux cadres contenant des parties à restituer verbatim. Comme son nom, pour le coup, sera nécessairement autre que frame, il se terminera par autre chose que \end{frame} et tout ira bien :slight_smile:

–8<---------------cut here---------------start------------->8— \documentclass{beamer} \usepackage{listings} \newenvironment<>{vframe}[1]{% \begin{frame}#2[fragile,environment=vframe,#1]% }{% \end{frame}% } \begin{document} \begin{vframe}[t] \begin{lstlisting} \begin{frame} \end{frame} \end{lstlisting} \end{vframe} \end{document} –8<---------------cut here---------------end--------------->8—

Denis

----- Mail original -----

De: “Gerard_F” xyz@xyz.tld
Dans la doc de beamer, page 18, il y a une piste d’utilisation de listings.
Le ECM suivant adapté de la doc fonctionne chez moi :
[…]

Oui j’avais vu ça mais je focalisais sur color, qui n’est pas mon pb. En y regardant de plus près je comprends mieux l’astuce. Au plus simple, ça donne

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\defverbatim\mycode{%
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
}
\begin{frame}
\mycode
\end{frame}
\end{document}

qui fonctionne. Merci.

– Jean-Yves

----- Mail original -----

De: “Nicolas Markey” xyz@xyz.tld
[…]
Il faut donc, d’une façon ou d’une autre, changer ce \end{frame}, sans
changer ce qu’il affiche. Une façon de faire en utilisant un escapechar :

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}[escapechar=+]
\begin{frame}
\end{++frame}
\end{lstlisting}
\end{frame}
\end{document}

Astucieux ! Merci.

–Jean-Yves

Bonjour,

Merci pour toutes les solutions, mais (et c’est ça l’embêtant) ça
fonctionnait et ça fonctionne toujours très bien avec beamer.cls
2015/01/05 3.36 (rcs-revision 8a39122e1f63) ! (C’est mon côté dinosaure,
j’ai encore une Ubuntu 16.04 et la texlive de la distribution !) C’est
avec la 2018/02/20 v3.50 que ça ne marche pas (texlive de Ubuntu 18.04).
C’est bêta cette évolution. Alors peut-on considérer ça comme un
pseudo-bug ?

–Jean-Yves

Le 07/01/2022 à 21:26, Denis Bitouzé a écrit :

Le 07/01/22 à 16h51, Jean-Yves Baudais a écrit :

Bonjour,

Bonsoir,

par contre avec beamer, et malgré l’option fragile

\documentclass{beamer}
\usepackage{listings}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{frame}
\end{document}

la command \end dans l’environnement lstlisting est systématiquement
interprétée, d’où une erreur de compilation, mais pas les autres
commandes ! Aurai-je loupé un truc ?

Il suffit de créer un nouvel environnement destiné aux cadres contenant
des parties à restituer verbatim. Comme son nom, pour le coup, sera
nécessairement autre que frame, il se terminera par autre chose que
\end{frame} et tout ira bien :slight_smile:

–8<---------------cut here---------------start------------->8—
\documentclass{beamer}
\usepackage{listings}
\newenvironment<>{vframe}[1]{%
\begin{frame}#2[fragile,environment=vframe,#1]%
}{%
\end{frame}%
}
\begin{document}
\begin{vframe}[t]
\begin{lstlisting}
\begin{frame}
\end{frame}
\end{lstlisting}
\end{vframe}
\end{document}
–8<---------------cut here---------------end--------------->8—


Jean-Yves Baudais – CR CNRS
Univ Rennes, INSA Rennes, CNRS, IETR-UMR 6164, F-35000 Rennes, France
(+33) (0)223238843 – Jean-Yves Baudais | Institut d'Electronique et des Technologies du numéRique
Pour une bon usage de la messagerie
https://intranet.univ-rennes2.fr/system/files/UHB/DRH/ACTION-SOCIALE/plaqu_dubonusage.b-1.pdf

Le 10/01/22 à 08h32, Jean-Yves Baudais a écrit :

Merci pour toutes les solutions, mais (et c’est ça l’embêtant) ça fonctionnait et ça fonctionne toujours très bien avec beamer.cls 2015/01/05 3.36 (rcs-revision 8a39122e1f63) ! (C’est mon côté dinosaure, j’ai encore une Ubuntu 16.04 et la texlive de la distribution !) C’est avec la 2018/02/20 v3.50 que ça ne marche pas (texlive de Ubuntu 18.04). C’est bêta cette évolution. Alors peut-on considérer ça comme un pseudo-bug ?

Je ne pense pas : j’avais signalé¹ ce changement de comportement et Joseph Wright disait à l’époque : « this is probably “to be expected”! ».


  1. ! File ended while scanning use of \@xverbatim error starting with commit 0c387de · Issue #360 · josephwright/beamer · GitHub

– Denis

Le 10/01/2022 à 09:29, Denis Bitouzé a écrit :

Je ne pense pas : j’avais signalé¹ ce changement de comportement et
Joseph Wright disait à l’époque : « this is probably ‘to be
expected’! ».


  1. ! File ended while scanning use of \@xverbatim error starting with commit 0c387de · Issue #360 · josephwright/beamer · GitHub

Et ça date de 2017 ! Bon, ben je n’ai plus qu’à changer mes habitudes.
Je vais être bien sage et choisir la solution proposée dans la doc de
beamer. Mon pb. est donc résolu. Merci,

–Jean-Yves