В 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.]
.