beamer icon indicating copy to clipboard operation
beamer copied to clipboard

itemize is missing an unskip

Open u-fischer opened this issue 7 years ago • 2 comments

The definition of itemize in beamer sets a color before the list, and color commands inserts whatsits and this has the effect that spaces before the list suddenly matters. beamer should at least add an \unskip before the color:

(Reference: https://tex.stackexchange.com/questions/462124/why-is-the-spacing-in-this-itemization-so-bad-and-why-can-it-be-fixed-by-adding)

\documentclass{beamer}
\makeatletter

\renewcommand{\itemize}[1][]{%
  \ifhmode\unskip\fi %<<< or \unskip \par
  \ifblank{#1}{}{\def\beamer@defaultospec{#1}}%
  \ifnum \@itemdepth >2\relax\@toodeep\else
    \advance\@itemdepth\@ne
    \beamer@computepref\@itemdepth% sets \beameritemnestingprefix
    \usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
    \usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}% problem
    \usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
    \list
      {\usebeamertemplate{itemize \beameritemnestingprefix item}}
      {\def\makelabel##1{%
          {%
            \hss\llap{{%
                \usebeamerfont*{itemize \beameritemnestingprefix item}%
                \usebeamercolor[fg]{itemize \beameritemnestingprefix item}##1}}%
          }%
        }%
      }
  \fi%
  \beamer@cramped%
  \raggedright%
  \beamer@firstlineitemizeunskip%
}

\begin{document}
    \begin{frame}
        \begin{minipage}{0.5\textwidth}
                \begin{itemize}
                    \item A. (requires three sub-items)                   
                    \begin{itemize}
                        \item A.1
                        \item A.2
                        \item A.3
                    \end{itemize}
                    \item B
                \end{itemize}
        \end{minipage}
\end{frame}
\end{document}

u-fischer avatar Nov 28 '18 21:11 u-fischer

This bug has been detected several times:

  1. https://tex.stackexchange.com/questions/130643/nested-itemize-environment-affects-vertical-spacing-of-parent-itemize-environmen
  2. https://tex.stackexchange.com/questions/640148/nested-lists-consistent-vertical-spacing-with-beamer

I propose another way to solve it:

\usepackage{etoolbox}
\pretocmd{\itemize}{\vskip 0pt}{}{}
\pretocmd{\enumerate}{\vskip 0pt}{}{}

or:

\usepackage{etoolbox}
\makeatletter
\pretocmd{\itemize}{\ifhmode\unvbox\voidb@x\fi}{}{}
\pretocmd{\enumerate}{\ifhmode\unvbox\voidb@x\fi}{}{}
\makeatother

polgab avatar Apr 09 '22 15:04 polgab

related issue: #530 #306

polgab avatar Apr 11 '22 14:04 polgab