天天看点

做一个自己的LaTeX幻灯片模板

原文章链接:http://tex.stackexchange.com/questions/146529/design-a-custom-beamer-theme-from-scratch

https://www.r-bloggers.com/create-your-own-beamer-template/

对本文进行了翻译,运行了用例,加了部分注释。

在目录中创建以下文件:

1. beamercolorthemetexsx.sty
2. beamerinnerthemetexsx.sty
3. beamerouterthemetexsx.sty
4. beamerthemetexsx.sty
5. texsx-example.tex
           

我们利用tikz包绘图的方式来绘制幻灯片的模板

先在 beamerthemetexsx.sty 中写入以下代码

\mode<presentation>

\RequirePackage{tikz}

\useinnertheme{texsx}
\useoutertheme{texsx}
\usecolortheme{texsx}

\setbeamertemplate{navigaton symbols}{}
\setbeamertemplate{block}[rounded][shadow=true]

\mode<all>
           

从这个文件可以看出定义模板需要做的工作:

1、inner

2、outer

3、color

下面将会一步步的来做着三件事情

首先在创建的 texsx-example.tex 文件中先写一些slides的内容用来测试之后写的 .sty 文件,加入 \usetheme{texsx}

代码如下:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\title{This is My Title}
\date{\today}
\author[Clexma]{UCAS \texttt{[email protected]}}
%在这里改为调用我们的模板
\usetheme{texsx}

\begin{document}

\begin{frame}
\titlepage
\end{frame}

\begin{frame}\frametitle{testTitle}
\begin{itemize}
\item a piece of shit
\item two pieces of shits
\end{itemize}
\end{frame}
\end{document}
           

现在先来绘制幻灯片的首页,要做的事情有两件

-设计 background 模板来改变首页的背景

-定义 title page 模板,使得首页上可以显示标题,作者,日期等等。

在 beamerinnerthemetexsx.sty 中加入以下代码

\mode<presentation>
%设计背景图案
\setbeamertemplate{background}{
  \begin{tikzpicture} %tikz画图
  \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);
  \fill[color=brown] (0,2) rectangle (\the\paperwidth,\the\paperheight);
  \fill[color=orange] (0,0) rectangle(2.95,1.9);
  \fill[color=blue!50!cyan!80] (3.05,0) rectangle(\the\paperwidth,1.9);
  \ifnum\thepage>1\relax%该样式仅仅对首页有效果
   \fill[white,opacity=1] (0,0) rectangle(\the\paperwidth,\the\paperheight);
   \fi
  \end{tikzpicture}
}

% 定义首页模板
\defbeamertemplate*{title page}{texsx}[1][]
{ 
    %title样式
   \vskip6cm%
    \begin{beamercolorbox}[wd=12cm,leftskip=3cm,sep=8pt,#1]{title page header}
      \usebeamerfont{title}\inserttitle\par%
    \end{beamercolorbox}%
    \vskip0.75cm%
    \begin{beamercolorbox}[wd=12cm,leftskip=3cm,#1]{author}
    %作者日期等相关信息样式
      \usebeamerfont{author}\insertauthor%
    \end{beamercolorbox}
     \vskip0.2cm%
    \begin{beamercolorbox}[wd=12cm,leftskip=3cm,#1]{date}
      \usebeamerfont{author}\insertdate%
    \end{beamercolorbox}
  \vfill
}

\mode
<all>
           

注意设计背景图案代码中的if语句,能够让该样式仅仅应用在第一页上。

在首页模板的定义中,我们将颜色方面的特征传递给了beamercolorboxes 和 title page,这需要在beamercolorthemetexsx.sty 中定义。在此文件中添加下面的代码,

\mode<presentation>

% Settings
\setbeamercolor*{title page header}{fg=white}
\setbeamercolor*{author}{fg=white}
\setbeamercolor*{date}{fg=white}

\mode
<all>
           

同样的在beamerouterthemetexsx.sty文件中也加入代码,写法和 outer 的style 文件类似

\mode<presentation>

% Frame title
\defbeamertemplate*{frametitle}{texsx}[1][]
{
\vskip1cm%
  \begin{beamercolorbox}[wd=\paperwidth,ht=1.2cm]{frametitle} 
  \begin{tikzpicture}
  \useasboundingbox[fill=white](0,0) rectangle(\the\paperwidth,1.2);
  \fill[orange] (0,0) rectangle(2.95,1.2);
  \fill[blue!50!cyan!80] (3.05,0) rectangle(\the\paperwidth,1.2);
   \ifx\insertframesubtitle\@empty%
      {\node[anchor=west, white,font=\large] at (3.2,0.61){\insertframetitle};}
      \else%
      {\node[anchor= west, white,font=\large] at (3.2,0.81){\insertframetitle};%
       \node[anchor= west, white,font=\small] at (3.2,0.41){\insertframesubtitle};}%
      \fi
  \end{tikzpicture}
  \end{beamercolorbox}
}

\mode<all>
           

保存,运行,结果如图:

做一个自己的LaTeX幻灯片模板
做一个自己的LaTeX幻灯片模板