解决方案

解决方案

我想设计一个 beamer 模板,其中的blocks 是缩进的,即它们的左外边距增加。我该怎么做?

可以使用以下方式设置块的宽度

\addtobeamertemplate{block begin}{%
  \setlength{\textwidth}{0.8\textwidth}%
}

我发现的唯一解决方案是使用 columns在这里不起作用(即在内addtobeamertemplate)。至少我认为应该有一个更简单的方法?

最小不起作用的示例:

\documentclass{beamer}

\usetheme{Antibes}

\begin{document}

\frame{
\setlength{\textwidth}{0.8\textwidth}% effectively increases right outer margin
% command to indent goes here: it would need to be something that I can use in addtobeamertemplate
\begin{block}{}
  Indent me! 
\end{block}
}

\end{document}

答案1

解决方案

\newlength{\blockleftindent}
\newlength{\blockrightindent}
\setlength\blockleftindent{10ex}
\setlength\blockrightindent{20ex}
\newlength{\blockwidth}
\setbeamertemplate{block begin}{
  \setlength\blockwidth{\linewidth}
  \addtolength\blockwidth{-\blockleftindent}
  \addtolength\blockwidth{-\blockrightindent}
  \par\vskip\medskipamount%
  \hspace*{\blockleftindent}%
  \begin{beamercolorbox}[colsep*=.75ex,wd=\blockwidth]{block title}
    \usebeamerfont*{block title}\insertblocktitle%
  \end{beamercolorbox}%
  {\parskip0pt\par}%
  \ifbeamercolorempty[bg]{block title}
  {}
  {\ifbeamercolorempty[bg]{block body}{}{\nointerlineskip\vskip-0.5pt}}%
  \usebeamerfont{block body}%
  \hspace*{\blockleftindent}%
  \begin{beamercolorbox}[colsep*=.75ex,wd=\blockwidth,vmode]{block body}%
    \ifbeamercolorempty[bg]{block body}{\vskip-.25ex}{\vskip-.75ex}\vbox{}%
}

\hspace您可以\leftskip=\blockleftindent按照@Herbert 的解决方案中的建议进行设置,而不是使用。

解释

问题是你不能使用来实现这一点\addtobeamertemplate:如果你看看模板是如何定义的beamerinnerthemedefault.sty

\defbeamertemplate*{block begin}{default}
{
  \par\vskip\medskipamount%
  \begin{beamercolorbox}[colsep*=.75ex]{block title}
    \usebeamerfont*{block title}\insertblocktitle%
  \end{beamercolorbox}%
  {\parskip0pt\par}%
  \ifbeamercolorempty[bg]{block title}
  {}
  {\ifbeamercolorempty[bg]{block body}{}{\nointerlineskip\vskip-0.5pt}}%
  \usebeamerfont{block body}%
  \begin{beamercolorbox}[colsep*=.75ex,vmode]{block body}%
    \ifbeamercolorempty[bg]{block body}{\vskip-.25ex}{\vskip-.75ex}\vbox{}%
}

你会发现,如果你在开头添加代码,你所做的就是\par发出a 。因此,除非您想使用黑魔法让您的代码吞掉\par,否则您必须复制定义并根据您的需要使用 进行更改。在这里,我通过在包含标题和内容的两个 es 之前\setbeamertemplate放置 some 来实现缩进。可以使用其他方法来添加水平空间。\hspacebeamercolorbox

\leftskip可以使用 来实现替代方案,\addtobeamertemplate因为新\leftskip值稍后将在创建 时使用beamerboxes。但是,要更改右侧的缩进,您需要修改wdbeamer box 环境的键,这需要再次使用\setbeamertemplate

答案2

使用\leftskip\textwidth可以操纵间距,而不必重新定义模板

\addtobeamertemplate{block begin}{%
  \setlength{\textwidth}{.5\textwidth}% HERE YOU SET THE DESIRED WIDTH OF THE BLOCK
  \leftskip=10ex% HERE YOU SET THE DESIRED LEFT MARGIN
  \addtolength{\textwidth}{-\leftskip}%
}

导致比我在另一个答案中提出的解决方案更简洁的解决方案。\setlength你也可以使用

\addtolength{\textwidth}{-<rightindent>}

答案3

缩进为 0.1,新文本宽度是旧文本宽度的 0.9。

\documentclass{beamer}
\usetheme{Antibes}
\setbeamertemplate{block begin}{%
  \par\vskip\medskipamount\leftskip=0.1\textwidth%
  \begin{beamercolorbox}[colsep*=.75ex,wd=0.9\textwidth]{block title}
    \usebeamerfont*{block title}\insertblocktitle%
  \end{beamercolorbox}%
  {\parskip0pt\par}%
  \ifbeamercolorempty[bg]{block title}
  {}
  {\ifbeamercolorempty[bg]{block body}{}{\nointerlineskip\vskip-0.5pt}}%
  \leftskip=0.1\textwidth\usebeamerfont{block body}%
  \begin{beamercolorbox}[colsep*=.75ex,vmode,wd=0.9\textwidth]{block body}%
    \ifbeamercolorempty[bg]{block body}{\vskip-.25ex}{\vskip-.75ex}\vbox{}%
}

\begin{document}

\frame{%
foo
\begin{block}{}
  Indent me! 
\end{block}%
}

\end{document}

在此处输入图片描述

相关内容