我查看了 Beamer Class 手册(PDF 文件)。
我不知道如何更改分配给 \itemize 的缩进项目符号。
[这很重要,因为我使用的是 2 列幻灯片,我不想让投影仪窃取太多的水平空间]。
Beamer 只是将管理环境布局的责任委托itemize
给基本的 LaTeX 包,因此您无需在 Beamer 本身中做任何时髦的事情来改变列表的外观/布局。
由于 Beamer 重新定义了 itemize、item 等,因此操作缩进等内容的完全正确方法是重新定义 Beamer 模板。我的印象是你不想走那么远,但如果不是这样,请告诉我,我会详细说明。
至少有三种方法可以在您的文档中实现您的目标,而无需纠结于 Beamer 模板。
itemize
在以下代码片段中,您可以将\itemindent
from的值更改为0em
您喜欢的任何值,包括负值。 0em
是默认的项目缩进。
这种方法的优点是列表的样式正常。缺点是Beamer对itemize
and的重新定义\item
意味着可以操纵改变列表布局的参数数量是有限的。使用多行项目很难获得正确的间距。
\begin{itemize}
\setlength{\itemindent}{0em}
\item This is a normally-indented item.
\end{itemize}
list
在下面的代码片段中,第二个参数 to\list
是要使用的项目符号,第三个参数是要更改的布局参数列表。该\leftmargin
参数调整整个列表项及其所有行的缩进;\itemindent
改变后续行的缩进。
这种方法的优点是您拥有非 Beamer LaTeX 中列表的所有灵活性。缺点是您必须手动设置项目符号样式(和其他视觉元素)(或为您正在使用的模板确定正确的命令)。请注意,如果您将第二个参数留空,则不会显示任何项目符号,并且您将节省一些水平空间。
\begin{list}{$\square$}{\leftmargin=1em \itemindent=0em}
\item This item uses the margin and indentation provided above.
\end{list}
customlist
环境该list
解决方案的缺点可以通过定义一个新customlist
环境来改善,该环境基本上重新定义了itemize
来自 Beamer 的环境,但也包含了\leftmargin
和\itemindent
(等)参数。在序言中加入以下内容:
\makeatletter
\newenvironment{customlist}[2]{
\ifnum\@itemdepth >2\relax\@toodeep\else
\advance\@itemdepth\@ne%
\beamer@computepref\@itemdepth%
\usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
\usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}%
\usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
\begin{list}
{
\usebeamertemplate{itemize \beameritemnestingprefix item}
}
{ \leftmargin=#1 \itemindent=#2
\def\makelabel##1{%
{%
\hss\llap{{%
\usebeamerfont*{itemize \beameritemnestingprefix item}%
\usebeamercolor[fg]{itemize \beameritemnestingprefix item}##1}}%
}%
}%
}
\fi
}
{
\end{list}
\usebeamertemplate{itemize/enumerate \beameritemnestingprefix body end}%
}
\makeatother
现在,要使用带有自定义缩进的逐项列表,您可以使用以下环境。第一个参数是 for \leftmargin
,第二个参数是 for \itemindent
。默认值分别为 2.5em 和 0em。
\begin{customlist}{2.5em}{0em}
\item Any normal item can go here.
\end{customlist}
使用. customlist
_ \setbeamertemplate
(有关更多信息,请参阅 TeX Stack Exchange 上此问题的答案。)
或者,可以直接在环境中修改项目符号样式,方法是替换\usebeamertemplate{itemize \beameritemnestingprefix item}
为您想要使用的任何项目符号样式(例如$\square$
)。
我使用包enumitem。然后,您可以在声明列表(枚举、描述、逐项)时设置此类边距:
\begin{itemize}[leftmargin=0cm]
\item Foo
\item Bar
\end{itemize}
自然,该软件包为列表提供了许多其他不错的自定义(使用 'label=' 更改项目符号,使用 'itemsep=' 更改项目之间的间距,等等......)
设置\itemindent
一个新的 itemize 环境解决了这个问题:
\newenvironment{beameritemize}
{ \begin{itemize}
\setlength{\itemsep}{1.5ex}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
\addtolength{\itemindent}{-2em} }
{ \end{itemize} }
要在不使用的情况下全局设置缩进enumitem
(这在 Beamer 上不起作用),请将以下内容放在序言中:
\setlength{\leftmargini}{0.5cm}
\setlength{\leftmarginii}{0.5cm}
leftmargini
并leftmarginii
分别更改第一和第二列表级别。
这里给出了这个解决方案。
就像 Geoff 的回答一样,我找到了一个我喜欢使用enumitem的解决方案。设置默认值\setlist[⟨names⟩,⟨levels⟩]{⟨keys/values⟩}
以继承现有(主题?)属性或\setlist*[⟨names⟩,⟨levels⟩]{⟨keys/values⟩}
完全重置。请参阅enumitem 文档。
以下为嵌套列表的前四级设置缩进,并显式声明标签。此处的标签默认为逐项列表的项目符号和枚举列表的阿拉伯数字。然后它重置嵌套列表的默认标签;长连字符表示第二个逐项,单连字符表示第三个逐项等。最后一行将第二级逐项枚举列表的默认标签重置为字母(a,b,c)。
\usepackage{enumitem}
\setlist[1]{leftmargin=0em}
\setlist[2]{leftmargin=2em} %list within a list
\setlist[3]{leftmargin=2.5em} %list within a list within a list
\setlist[4]{leftmargin=3em}
\setlist[itemize]{label=\textbullet}
\setlist[itemize,2]{label={--}}
\setlist[itemize,3]{label={-}}
\setlist[itemize,4]{label={\textperiodcentered}}
\setlist[enumerate]{label={\arabic*}}
\setlist[enumerate,2]{label={\alph*}}
使用 enumitem 您还可以通过添加选项来为特定实例声明特定标签或间距,例如\begin{itemize}[label={*}]
这是 Geoff 的答案。