LaTeX beamer:改变子弹压痕的方法?

ano*_*non 44 latex beamer

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

我无法弄清楚如何将缩进项目符号更改为\ itemize.

[这很重要,因为我使用2列幻灯片,我不希望投影仪偷走太多的水平空间].

RTB*_*ard 64

Beamer只是将管理itemize环境布局的责任委托给基础LaTeX软件包,所以在Beamer本身没有什么时髦可以改变列表的外观/布局.

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

在文档中至少有三种方法可以实现您的目标,而无需使用Beamer模板.

itemize

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

此方法的优点是列表正常设置样式.缺点是Beamer重新定义itemize并且\item意味着可以操作以改变列表布局的参数的数量是有限的.使用多行项目可能很难获得正确的间距.

\begin{itemize}
  \setlength{\itemindent}{0em}
  \item This is a normally-indented item.
\end{itemize}
Run Code Online (Sandbox Code Playgroud)

list

在下面的代码片段中,第二个参数\list是要使用的项目符号,第三个参数是要更改的布局参数列表.该\leftmargin参数调整整个列表项及其所有行的缩进; \itemindent改变后续行的缩进.

这种方法的优点是你可以在非Beamer LaTeX中获得列表的所有灵活性.缺点是您必须手动设置项目符号样式(和其他可视元素)(或为您正在使用的模板识别正确的命令).请注意,如果将第二个参数留空,则不会显示项目符号,您将节省一些水平空间.

\begin{list}{$\square$}{\leftmargin=1em \itemindent=0em}
  \item This item uses the margin and indentation provided above.
\end{list}
Run Code Online (Sandbox Code Playgroud)

定义一个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
Run Code Online (Sandbox Code Playgroud)

现在,要使用带有自定义缩进的逐项列表,可以使用以下环境.第一个参数是for \leftmargin,第二个参数是for \itemindent.默认值分别为2.5em和0em.

\begin{customlist}{2.5em}{0em}
   \item Any normal item can go here.
\end{customlist}
Run Code Online (Sandbox Code Playgroud)


Geo*_*off 15

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

\begin{itemize}[leftmargin=0cm]
    \item Foo
    \item Bar
\end{itemize}
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是beamer重新定义了itemize,因此当你使用enumitem时你会失去子弹符号 (6认同)
  • enumitem是理想的,但是Beamer太具侵入性,所以很多设置都无法工作. (2认同)
  • 正如@DaveP 所说,不幸的是,beamer 与 enumitem 不兼容 (2认同)

Ger*_*ely 8

设置\itemindent新的逐项列表环境可以解决问题:

\newenvironment{beameritemize}
{ \begin{itemize}
  \setlength{\itemsep}{1.5ex}
  \setlength{\parskip}{0pt}
  \setlength{\parsep}{0pt}   
  \addtolength{\itemindent}{-2em}  }
{ \end{itemize} } 
Run Code Online (Sandbox Code Playgroud)