我想设计一个 beamer 模板,其中的block
s 是缩进的,即它们的左外边距增加。我该怎么做?
可以使用以下方式设置块的宽度
\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 来实现缩进。可以使用其他方法来添加水平空间。\hspace
beamercolorbox
\leftskip
可以使用 来实现替代方案,\addtobeamertemplate
因为新\leftskip
值稍后将在创建 时使用beamerboxes
。但是,要更改右侧的缩进,您需要修改wd
beamer 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}