Margens inconsistentes com enumeração fora do padrão

Margens inconsistentes com enumeração fora do padrão

No Latex Beamer, quando tenho uma enumeração com rótulos personalizados, uso, por exemplo, \begin{enumerate}[a]para "a... b... c..." ou \begin{enumerate}[i]para "i... ii... iii..." em vez de "1 . ... 2. ... 3. ...", então a margem esquerda parece ser menor e, portanto, inconsistente com os outros slides.

Exemplo:

\documentclass{beamer}
\begin{document}

\begin{frame}
    \begin{enumerate}
        \item normal margin
    \end{enumerate}
    \begin{enumerate}[i]
        \item smaller margin
    \end{enumerate}
    \begin{enumerate}[a]
        \item much smaller margin
    \end{enumerate}
    \begin{enumerate}
        \item[a] normal margin, but manual labels
    \end{enumerate}
\end{frame}

\end{document}

insira a descrição da imagem aqui

Quando uso item[a], item[b]etc., as margens estão corretas, mas por razões óbvias isso também não é perfeito. Existe alguma maneira de corrigir isso?


Atualização: os problemas parecem não ser específicos da beamerclasse, mas do enumeratepacote (que é usado ou copiado de in beamer), pois o mesmo comportamento ocorre com:

\documentclass{article}
\usepackage{enumerate}

Ainda assim, estou interessado principalmente em uma solução que funcione bem com o beamer.

Responder1

insira a descrição da imagem aqui

Você pode apenas comentar as linhas que redefinem o recuo

\documentclass{beamer}

\makeatletter
\def\beamer@@@enum@[#1]{% partly copied from enumerate.sty
  \@enLab{}\let\@enThe\@enQmark
  \@enloop#1\@enum@
  \ifx\@enThe\@enQmark\@warning{The counter will not be printed.%
    ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi
  \def\insertenumlabel{\the\@enLab}
  \def\beamer@enumtempl{enumerate mini template}%
   \expandafter\let\csname the\@enumctr\endcsname\@enThe
%  \csname c@\@enumctr\endcsname7
%  \expandafter\settowidth
%            \csname leftmargin\romannumeral\@enumdepth\endcsname
%            {\the\@enLab\hspace{\labelsep}}%
  \beamer@enum@}

\makeatother
\begin{document}

\begin{frame}
    \begin{enumerate}
        \item normal margin
    \end{enumerate}
    \begin{enumerate}[i]
        \item smaller margin
    \end{enumerate}
    \begin{enumerate}[a]
        \item much smaller margin
    \end{enumerate}
    \begin{enumerate}
        \item[a] normal margin, but manual labels
    \end{enumerate}
\end{frame}

\end{document}

Responder2

Para obter as mesmas margens como se estivesse usando, \item[a]você poderia simplesmente definir seu próprio item enumerado\setbeamertemplate{enumerate item}{\alph{enumi}}

\documentclass{beamer}

\begin{document}

\begin{frame}
    \begin{enumerate}
        \item normal margin
    \end{enumerate}
    \begin{enumerate}[i]
        \item smaller margin
    \end{enumerate}
    {
    \setbeamertemplate{enumerate item}{\alph{enumi}}
    \begin{enumerate}
        \item much smaller margin
    \end{enumerate}
    }
    \begin{enumerate}
        \item[a] normal margin, but manual labels
    \end{enumerate}
\end{frame}

\end{document}

insira a descrição da imagem aqui

Responder3

Outra maneira bastante hackeada de resolver/contornar o problema que encontrei é inserir preenchimento diretamente no parâmetro [a.]ou .[i.]

\documentclass{beamer}
\begin{document}

\begin{frame}
    \begin{enumerate}
        \item normal margin
    \end{enumerate}
    \begin{enumerate}[~~a.]
        \item normal margin (almost)
    \end{enumerate}
\end{frame}

\end{document}

É claro que isso não alinha perfeitamente as diferentes enumerações e também pode depender da fonte usada. Eu provavelmente não usaria isso em um documento impresso, mas para alguns slides pode ser suficiente. O mesmo também funciona (com um pouco mais de precisão) com, por exemplo [\hspace{8pt}a.].

informação relacionada