我想用类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 环境/命令;特别是它重新定义了一些基本的列表类环境itemize
、enumerate
和description
。
例如,这里是的\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}