61 votes

LaTeX beamer: moyen de changer l'indentation des puces ?

J'ai vérifié le manuel de la classe Beamer (fichier PDF).

Je n'arrive pas à comprendre comment changer l'indentation que le tiret assigne à \itemize.

[C'est assez important, car j'utilise des diapositives à 2 colonnes et je ne veux pas que Beamer prenne trop d'espace horizontal].

99voto

RTBarnard Points 2451

Beamer délègue simplement la responsabilité de gérer la mise en page des environnements itemize aux packages de base de LaTeX, donc vous n'avez rien de spécial à faire dans Beamer lui-même pour modifier l'apparence / la mise en page de vos listes.

Étant donné que Beamer redéfinit itemize, item, etc., la manière pleinement correcte de manipuler des choses comme l'indentation est de redéfinir les modèles de Beamer. J'ai l'impression que vous ne cherchez pas à aller si loin, mais si ce n'est pas le cas, faites-le moi savoir et je développerai.

Il existe au moins trois manières d'accomplir votre objectif depuis votre document, sans toucher aux modèles de Beamer.

Avec itemize

Dans le code suivant, vous pouvez changer la valeur de \itemindent de 0em à ce que vous voulez, y compris des valeurs négatives. 0em est l'indentation d'item par défaut.

L'avantage de cette méthode est que la liste est stylisée normalement. L'inconvénient est que la redéfinition de Beamer de itemize et \item signifie que le nombre de paramètres qui peuvent être manipulés pour changer la mise en page de la liste est limité. Il peut être très difficile d'obtenir le bon espacement avec des éléments sur plusieurs lignes.

\begin{itemize}
  \setlength{\itemindent}{0em}
  \item C'est un élément avec indentation normale.
\end{itemize>

Avec list

Dans le code suivant, le deuxième paramètre pour \list est le puce à utiliser, et le troisième paramètre est une liste de paramètres de mise en page à modifier. Le paramètre \leftmargin ajuste l'indentation de l'ensemble de l'élément de liste et de toutes ses lignes; \itemindent modifie l'indentation des lignes suivantes.

L'avantage de cette méthode est que vous avez toute la flexibilité des listes dans LaTeX non-Beamer. L'inconvénient est que vous devez configurer manuellement le style de puce (et d'autres éléments visuels) (ou identifier la bonne commande pour le modèle que vous utilisez). Remarquez que si vous laissez le deuxième argument vide, aucune puce ne sera affichée et vous économiserez de l'espace horizontal.

\begin{list}{$\square$}{\leftmargin=1em \itemindent=0em}
  \item Cet élément utilise la marge et l'indentation fournies ci-dessus.
\end{list>

Définition d'un environnement customlist

Les inconvénients de la solution avec list peuvent être atténués en définissant un nouvel environnement customlist qui redéfinit essentiellement l'environnement itemize de Beamer mais intègre également les paramètres \leftmargin et \itemindent (etc.). Mettez ce qui suit dans le préambule:

\makeatletter
\newenvironment{customlist}[2]{
  \ifnum\@itemdepth >2\relax\@toodeep\else
      \advance\@itemdepth\@ne%
      \beamer@computepref\@itemdepth%
      \usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
      \usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}%
      \usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
      \begin{list}
        {
            \usebeamertemplate{itemize \beameritemnestingprefix item}
        }
        { \leftmargin=#1 \itemindent=#2
            \def\makelabel##1{%
              {%  
                  \hss\llap{{%
                    \usebeamerfont*{itemize \beameritemnestingprefix item}%
                        \usebeamercolor[fg]{itemize \beameritemnestingprefix item}##1}}%
              }%  
            }%  
        }
  \fi
}
{
  \end{list}
  \usebeamertemplate{itemize/enumerate \beameritemnestingprefix body end}%
}
\makeatother

Maintenant, pour utiliser une liste à puces avec une indentation personnalisée, vous pouvez utiliser l'environnement suivant. Le premier argument est pour \leftmargin et le deuxième est pour \itemindent. Les valeurs par défaut sont respectivement 2.5em et 0em.

\begin{customlist}{2.5em}{0em}
   \item Tout élément normal peut être placé ici.
\end{customlist>

Un style de puce personnalisé peut être incorporé dans la solution avec customlist en utilisant le mécanisme standard de Beamer \setbeamertemplate. (Voir les réponses à cette question sur le TeX Stack Exchange pour plus d'informations.)

Alternativement, le style de puce peut être modifié directement dans l'environnement, en remplaçant \usebeamertemplate{itemize \beameritemnestingprefix item} par le style de puce que vous souhaitez utiliser (par exemple $\square$).

0 votes

De ce que je comprends, la 2ème et la 3ème solution sont les mêmes, sauf que la 2ème solution vous permet de définir le style du symbole utilisé pour un élément. Est-ce que quelque part dans la 3ème solution je peux définir ce style de symbole ? Ce que je voudrais faire est de créer une liste personnalisée, définir le style du symbole une fois, puis juste utiliser les deux autres paramètres comme vous l'avez suggéré. En outre, j'ai voté pour cette excellente réponse.

0 votes

@Talik3233: J'ai mis à jour ma réponse avec deux méthodes pour modifier le style des puces.

0 votes

C'est génial, merci. J'ai voté pour cela il y a longtemps et j'y suis retourné plusieurs fois au fil des ans. Lorsque vous poussez quelque chose de quelques unités, vous pouvez utiliser des millimètres (mm) ou des points (pt) ; quel type d'unité est em (c'est-à-dire, [0em])?

24voto

Geoff Points 3621

Je utilise le package enumitem. Vous pouvez alors définir de telles marges lorsque vous déclarez vos listes (énumérer, description, itemize):

\begin{itemize}[leftmargin=0cm]
    \item Foo
    \item Bar
\end{itemize>

Naturellement, le package offre beaucoup d'autres personnalisations sympas pour les listes (utilisez 'label=' pour changer la puce, utilisez 'itemsep=' pour changer l'espacement entre les éléments, etc...)

19 votes

Malheureusement, beamer a redéfini itemize, de sorte que lorsque vous utilisez enumitem, vous perdez les symboles de puce.

4 votes

Enumitem serait idéal, mais Beamer est trop intrusif, donc de nombreux paramètres ne fonctionnent pas.

2 votes

Comme l'a dit @DaveP, malheureusement beamer n'est pas compatible avec enumitem

12voto

Gergely Points 1734

La définition de \itemindent pour un nouvel environnement itemize résout le problème :

\newenvironment{beameritemize}
{ \begin{itemize}
  \setlength{\itemsep}{1.5ex}
  \setlength{\parskip}{0pt}
  \setlength{\parsep}{0pt}   
  \addtolength{\itemindent}{-2em}  }
{ \end{itemize} }

0 votes

Cela ne fait que diminuer l'indentation pour la première ligne (du moins dans beamer). Si un élément contient plus d'une ligne de texte, les lignes suivantes restent indentées.

3voto

FedFranz Points 259

Pour définir l'indentation de manière globale, sans utiliser enumitem (qui ne fonctionne pas sur Beamer), ajoutez ce qui suit dans votre préambule :

\setlength{\leftmargini}{0.5cm}
\setlength{\leftmarginii}{0.5cm}

leftmargini et leftmarginii modifient respectivement le premier et le deuxième niveau de la liste.

Cette solution a été donnée ici.

0 votes

Cette réponse, et la référence, m'ont sauvé la vie.

-1voto

T. Zack Crawford Points 3752

Tout comme la réponse de Geoff, j'ai trouvé une solution que j'aime en utilisant enumitem. Définissez les valeurs par défaut avec \setlist[noms,niveaux]{clés/valeurs} pour hériter des attributs existants (du thème ?) ou \setlist*[noms,niveaux]{clés/valeurs} pour une réinitialisation complète. Voir la documentation d'enumitem.

Le code suivant définit l'indentation pour les quatre premiers niveaux de listes imbriquées ainsi que déclare explicitement les étiquettes. Les étiquettes ici sont par défaut des puce pour les listes répertoriées et des numéros arabes pour les listes énumérées. Ensuite, il réinitialise les étiquettes par défaut pour les listes imbriquées; long tiret pour la 2ème répertoriée, simple tiret pour la troisième répertoriée, etc. La dernière ligne réinitialise l'étiquette par défaut pour les listes énumérées de 2ème niveau à être alphabétiques (a, b, c).

\usepackage{enumitem}
\setlist[1]{leftmargin=0em}
\setlist[2]{leftmargin=2em} %liste dans une liste
\setlist[3]{leftmargin=2.5em} %liste dans une liste dans une liste
\setlist[4]{leftmargin=3em}
\setlist[itemize]{label=\textbullet}
\setlist[itemize,2]{label={--}}
\setlist[itemize,3]{label={-}}
\setlist[itemize,4]{label={\textperiodcentered}}
\setlist[enumerate]{label={\arabic*}}
\setlist[enumerate,2]{label={\alph*}}

Avec enumitem, vous pouvez également déclarer une étiquette spécifique ou un espacement spécifique pour une instance particulière en ajoutant les options par exemple \begin{itemize}[label={*}] C'est la réponse de Geoff.

1 votes

Ne pas utiliser enumitem avec beamer - c'est une garantie de problèmes

0 votes

@samcarter_is_at_topanswers.xyz pourquoi? Vous pouvez réinitialiser le compteur après les diapositives je crois.

0 votes

Vous perdez toutes les configurations soigneusement réalisées des thèmes beamer, comme les balles correspondant aux thèmes internes, les couleurs, les configurations de la taille de police des listes imbriquées, ... Mais plus important encore, enumitem n'est tout simplement pas compatible avec de nombreux correctifs de beamer pour les environnements de liste. Essayez les spécifications d'overlay par défaut comme \begin{itemize}[<+->] et profitez du désastre ferroviaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X