Je voudrais placer un programme Python créé avec l'environnement listings à droite dans un environnement enumerate et voici mon code :

\documentclass[a4paper,french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[margin=1cm]{geometry}
\usepackage{xcolor}
\usepackage{enumitem}
\input{insbox}
\usepackage{listings}
\lstnewenvironment{python}
    {\lstset{%
        language=Python,
        tabsize=4,
        numberstyle=\tiny,
        columns=flexible,
        backgroundcolor=\color{black!05},
        showstringspaces=true,
        literate=
            {à}{{\`a}}1
            {â}{{\^a}}1
            {é}{{\'e}}1
            {è}{{\`e}}1
            {ê}{{\^e}}1
            {ë}{{\"e}}1
            {î}{{\^i}}1
            {ô}{{\^o}}1
            {ù}{{\`u}}1
            {«}{{\og}}1
            {»}{{\fg{}}}1}}
{}
\begin{document}

\InsertBoxR{0}{
\begin{python}
def f(x):
  y=x**2-x+3
  return(y)
\end{python}
}
\begin{enumerate}
\item question 1...
\item question 2...
\item question 3...
\end{enumerate}

\end{document}

J'obtiens cette erreur :

! Argument of \lst@next has an extra }.

Je précise que :

1- Mon code a pour objectif de créer un environnement listing appelé "python" avec des options spécifiques à cet effet. Cela me permet d'en créer plus tard un autre, par exemple pour un autre langage. Je voudrais donc bien garder le nom "python" au lieu de "listings".

2- Par "placer à droite", je voudrais dire mettre côte à côte deux blocs : une liste enumerate et un programme python. Et pour cette raison, j'ai utilisé la commande InsertBoxR que je trouve plus pratique, au lieu d'utiliser deux environnements minipage pour chaque bloc.

Posée 01 Jul '21, 15:37

insan's gravatar image

insan
5127
Taux d'acceptation : 0%

Modifiée 01 Jul '21, 18:41

1

Bienvenue sur TeXnique.fr !

(01 Jul '21, 15:46) denis ♦♦ denis's gravatar image

Je ne comprends pas bien « placer un programme [...] à droite dans un environnement enumerate ». Est-ce à droite d'un environnement enumerate ?

(01 Jul '21, 15:47) denis ♦♦ denis's gravatar image

Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).

(01 Jul '21, 15:48) denis ♦♦ denis's gravatar image

Pour insérer du ⟨code⟩, notamment des commandes ou environnements LaTeX, cf. la FAQ Comment mettre en forme ma contribution ?. Votre contribution a été corrigée dans ce sens.

(01 Jul '21, 15:51) denis ♦♦ denis's gravatar image

Si je remplace votre code :

\InsertBoxR{0}{
\begin{python}
[...]
\end{python}
}

par :

%\InsertBoxR{0}{
\begin{lstlisting}
def f(x):
y=x**2-x+3
return(y)
\end{lstlisting}
%}

... le code compile.

Je ne suis pas certain de bien comprendre votre question. À quoi sert la commande \InsertBoxR ? Désirez-vous mettre ce code dans l'environnement enumerate ou à côté ? Ou peut-être désirez-vous en numéroter les lignes ?

Le package listings crée également des boîtes, par exemple en ajoutant le paramètre frame=single à la commande \lstset.

(01 Jul '21, 16:00) Pathe ♦♦ Pathe's gravatar image

Deux choses :

1- Mon code a pour objectif de créer un environnement listing appelé "python" pour avec des options spécifiques à cet effet. Cela me permet d'en créer plus tard un autre, par exemple pour un autre langage. Je voudrais donc bien garder le nom "python" au lieu de "listings".

2- Par "placer à droite", je voudrais dire mettre côte à côte deux blocs : une liste enumerate et un programme python. Et pour cette raison, j'ai utilisé la commande \InsertBoxR que je trouve plus pratique, au lieu d'utiliser deux environnements minipage pour chaque bloc.

(01 Jul '21, 18:15) insan insan's gravatar image

@insan Attention ! Cette réponse était un commentaire plutôt qu'une réponse et a été convertie comme tel.

(01 Jul '21, 18:24) denis ♦♦ denis's gravatar image
2

Pour le point 1, nous sommes bien d'accord et l'avions bien compris. Pour le point 2, je crains que \InsertBoxR n'accepte pas d'environnements « verbatim ».

(01 Jul '21, 18:30) denis ♦♦ denis's gravatar image

Je précise que :

1- Mon code a pour objectif de créer un environnement listing appelé "python" avec des options spécifiques à cet effet. Cela me permet d'en créer plus tard un autre, par exemple pour un autre langage. Je voudrais donc bien garder le nom "python" au lieu de "listings".

2- Par "placer à droite", je voudrais dire mettre côte à côte deux blocs : une liste enumerate et un programme python. Et pour cette raison, j'ai utilisé la commande InsertBoxR que je trouve plus pratique, au lieu d'utiliser deux environnements minipage pour chaque bloc.

(01 Jul '21, 18:40) insan insan's gravatar image
1

J'utiliserais tcblisting, mais si vous voulez \InsertBoxR:

\newsavebox{\mylisting} \begin{lrbox}{\mylisting} \begin{python} def f(x): y=x**2-x+3 return(y) \end{python} \end{lrbox} \InsertBoxR{0}{\usebox{\mylisting}} \begin{enumerate} \item question 1... \item question 2... \item question 3... \end{enumerate}

(02 Jul '21, 18:51) samcarter samcarter's gravatar image

Comment pourrait-on faire avec tcblisting ?

(02 Jul '21, 22:35) insan insan's gravatar image

@insan : plutôt que poser une question en commentaire, il est préférable de créer une nouvelle question à part entière (éventuellement en y indiquant le lien avec la question actuelle). Ça permettra de la retrouver plus facilement, notamment avec un tag tcblistings !

(02 Jul '21, 23:43) Pathe ♦♦ Pathe's gravatar image
(03 Jul '21, 17:41) Pathe ♦♦ Pathe's gravatar image
Affichage de 5 parmi 14 Afficher 9 commentaire(s) en plus

Si vous n'aimez pas des minipages, j'utiliserais tcblisting :

\documentclass[a4paper,french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[margin=1cm]{geometry}
\usepackage{xcolor}
\usepackage{enumitem}
\input{insbox}
\usepackage{listings}

\lstdefinestyle{mypython}{
        language=Python,
        tabsize=4,
        numberstyle=\tiny,
        columns=flexible,
        backgroundcolor=\color{black!05},
        showstringspaces=true,
        literate=
            {à}{{\`a}}1
            {â}{{\^a}}1
            {é}{{\'e}}1
            {è}{{\`e}}1
            {ê}{{\^e}}1
            {ë}{{\"e}}1
            {î}{{\^i}}1
            {ô}{{\^o}}1
            {ù}{{\`u}}1
            {«}{{\og}}1
            {»}{{\fg{}}}1
}

\usepackage[most]{tcolorbox}
\begin{document}

\begin{tcblisting}{
  colback=white,
  colframe=white,
  comment and listing,
  sidebyside,
  listing style=mypython,
  comment={
    \begin{enumerate}
    \item question 1...
    \item question 2...
    \item question 3...
    \end{enumerate}
  }
}
def f(x):
  y=x**2-x+3
  return(y)
\end{tcblisting}

\end{document}

Mais si vous voulez \InsertBoxR :

\documentclass[a4paper,french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[margin=1cm]{geometry}
\usepackage{xcolor}
\usepackage{enumitem}
\input{insbox}
\usepackage{listings}
\lstnewenvironment{python}
    {\lstset{%
        language=Python,
        tabsize=4,
        numberstyle=\tiny,
        columns=flexible,
        backgroundcolor=\color{black!05},
        showstringspaces=true,
        literate=
            {à}{{\`a}}1
            {â}{{\^a}}1
            {é}{{\'e}}1
            {è}{{\`e}}1
            {ê}{{\^e}}1
            {ë}{{\"e}}1
            {î}{{\^i}}1
            {ô}{{\^o}}1
            {ù}{{\`u}}1
            {«}{{\og}}1
            {»}{{\fg{}}}1}}
{}
\begin{document}

\newsavebox{\mylisting}
   \begin{lrbox}{\mylisting}
   \begin{python}
   def f(x):
     y=x**2-x+3
     return(y)
   \end{python}
   \end{lrbox}
   \InsertBoxR{0}{\usebox{\mylisting}}
   \begin{enumerate}
   \item question 1...
   \item question 2...
   \item question 3...
   \end{enumerate}

\end{document}
Lien permanent

Publiée 03 Jul '21, 14:15

samcarter's gravatar image

samcarter
8.2k2817
Taux d'acceptation : 57%

@insan : si le code de @samcarter répond à la question, vous devriez l'accepter.

(03 Jul '21, 17:38) Pathe ♦♦ Pathe's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.