Непоследовательные поля с нестандартным перечислением

Непоследовательные поля с нестандартным перечислением

В Latex Beamer, когда у меня есть перечисление с пользовательскими метками, например, \begin{enumerate}[a]для «a... b... c...» или \begin{enumerate}[i]для «i... ii... iii...» вместо «1. ... 2. ... 3. ...», то левое поле кажется меньше и, таким образом, не соответствует другим слайдам.

Пример:

\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}

введите описание изображения здесь

Когда я использую item[a]и item[b]т. д., то поля правильные, но по понятным причинам это тоже не идеально. Есть ли способ это исправить?


Обновление: похоже, что проблемы связаны не с beamerклассом, а с enumerateпакетом (который используется или копируется из него beamer), поскольку такое же поведение наблюдается и с:

\documentclass{article}
\usepackage{enumerate}

Тем не менее, меня в первую очередь интересует решение, которое хорошо работает с beamer.

решение1

введите описание изображения здесь

Вы можете просто закомментировать строки, которые переустанавливают отступы.

\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}

решение2

Чтобы получить те же поля, что и при использовании, \item[a]вы можете просто определить свой собственный элемент перечисления\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}

введите описание изображения здесь

решение3

Еще один довольно хитрый способ решения/обхода проблемы, который я нашел, — это вставить заполнение непосредственно в параметр [a.]or [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}

Конечно, это не идеально выравнивает различные перечисления и может также зависеть от используемого шрифта. Я бы, наверное, не стал использовать это в печатном документе, но для некоторых слайдов это может быть достаточно хорошо. То же самое работает (с несколько большей точностью) с eg [\hspace{8pt}a.].

Связанный контент