使用 beamer 类对齐 itemize 环境内的文本

使用 beamer 类对齐 itemize 环境内的文本

我想用类itemize对齐环境中的文本beamer。文本似乎默认用 类对齐article,但用beamer类却不对齐。

以下代码使文本左右对齐:

    \documentclass{article}
    \usepackage{lipsum}
    \begin{document}
    \begin{itemize}
    \item \lipsum[1-1]
    \end{itemize}
    \end{document}

以下代码不会:

    \documentclass{beamer}
    \usepackage{lipsum}
    \begin{document}
    \begin{frame}
    \begin{itemize}
    \item \lipsum[1-1]
    \end{itemize}
    \end{frame}
    \end{document}

我尝试过这个:

    \documentclass{beamer}
    \usepackage{ragged2e}
    \usepackage{lipsum}
    \let\olditemize=\itemize 
    \renewenvironment{itemize}{\olditemize\justify}{\endlist} 
    \begin{document}
    \begin{frame}
    \begin{itemize}
    \item \lipsum[1-1]
    \end{itemize}
    \end{frame}
    \end{document}

但它不会在右侧对齐文本。欢迎提出任何建议!

答案1

beamer有自己的方式,特别是它重新定义了许多标准 LaTeX 环境/命令;特别是它重新定义了一些基本的列表类环境itemizeenumeratedescription

例如,这里是的\itemize定义beamerbaselocalstructure.sty

\renewcommand{\itemize}[1][]{%
  \beamer@ifempty{#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}%
    \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%
}

如您所见,\itemize内部使用\raggedright。保持覆盖规范感知的最佳方法是重新定义\itemize为使用\justifying(来自ragged2e包);以下代码在实际文档中显示了此重新定义:

\documentclass{beamer}
\usepackage{ragged2e}
\usepackage{lipsum}

\makeatletter
\renewcommand{\itemize}[1][]{%
  \beamer@ifempty{#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}%
    \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%
  \justifying% NEW
  %\raggedright% ORIGINAL
  \beamer@firstlineitemizeunskip%
}
\makeatother

\begin{document}

\begin{frame}
\begin{itemize}
\item<1->\lipsum[2]
\item<2>\lipsum[2]
\end{itemize}
\end{frame}

\end{document}

输出:

在此处输入图片描述

最后要说的是,我建议您考虑一下是否真的需要重新定义;在演示中应避免使用包含太多文本的框架(比如我刚刚为示例构建的框架)。

答案2

尝试这个。

\documentclass{beamer}
\usepackage{ragged2e}
\usepackage{lipsum}
\let\olditem\item
\renewcommand\item{\olditem\justifying}
\begin{document}
\begin{frame}
\begin{itemize}
\item \lipsum[1-1]
\end{itemize}
\end{frame}
\end{document}

答案3

使用包ragged2e

\begin{itemize}
        \justifying
    \item...
    \item...
\end{itemize}

答案4

多年来我一直在使用 Gonzalo 的解决方案,后来发现它不适用于列表中的列表(例如枚举中的枚举等)。将列表环境重新定义为 include\justify对我来说是可行的,但我不确定这是否会带来任何缺点。

将其粘贴到序言中:

\let\tempItemizeBeg\itemize
\let\tempItemizeEnd\enditemize
\renewenvironment{itemize}{\tempItemizeBeg \justifying}{\tempItemizeEnd}
\let\tempEnumerateBeg\enumerate
\let\tempEnumerateEnd\endenumerate
\renewenvironment{enumerate}{\tempEnumerateBeg \justifying}{\tempEnumerateEnd}

相关内容