51

我查看了 Beamer Class 手册(PDF 文件)。

我不知道如何更改分配给 \itemize 的缩进项目符号。

[这很重要,因为我使用的是 2 列幻灯片,我不想让投影仪窃取太多的水平空间]。

4

5 回答 5

79

Beamer 只是将管理环境布局的责任委托itemize给基本的 LaTeX 包,因此您无需在 Beamer 本身中做任何时髦的事情来改变列表的外观/布局。

由于 Beamer 重新定义了 itemize、item 等,因此操作缩进等内容的完全正确方法是重新定义 Beamer 模板。我的印象是你不想走那么远,但如果不是这样,请告诉我,我会详细说明。

至少有三种方法可以在您的文档中实现您的目标,而无需纠结于 Beamer 模板。

itemize

在以下代码片段中,您可以将\itemindentfrom的值更改为0em您喜欢的任何值,包括负值。 0em是默认的项目缩进。

这种方法的优点是列表的样式正常。缺点是Beamer对itemizeand的重新定义\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$)。

于 2010-04-10T08:59:42.753 回答
18

我使用包enumitem。然后,您可以在声明列表(枚举、描述、逐项)时设置此类边距:

\begin{itemize}[leftmargin=0cm]
    \item Foo
    \item Bar
\end{itemize}

自然,该软件包为列表提供了许多其他不错的自定义(使用 'label=' 更改项目符号,使用 'itemsep=' 更改项目之间的间距,等等......

于 2010-04-10T12:44:23.007 回答
10

设置\itemindent一个新的 itemize 环境解决了这个问题:

\newenvironment{beameritemize}
{ \begin{itemize}
  \setlength{\itemsep}{1.5ex}
  \setlength{\parskip}{0pt}
  \setlength{\parsep}{0pt}   
  \addtolength{\itemindent}{-2em}  }
{ \end{itemize} } 
于 2015-03-24T10:58:13.380 回答
1

要在不使用的情况下全局设置缩进enumitem(这在 Beamer 上不起作用),请将以下内容放在序言中:

\setlength{\leftmargini}{0.5cm}
\setlength{\leftmarginii}{0.5cm}

leftmarginileftmarginii分别更改第一和第二列表级别。

这里给出了这个解决方案。

于 2022-02-18T09:15:18.333 回答
-1

就像 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 的答案。

于 2021-04-13T19:17:08.163 回答