DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Last call! Secure your stack and shape the future! Help dev teams across the globe navigate their software supply chain security challenges.

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Releasing software shouldn't be stressful or risky. Learn how to leverage progressive delivery techniques to ensure safer deployments.

Avoid machine learning mistakes and boost model performance! Discover key ML patterns, anti-patterns, data strategies, and more.

Related

  • Automated Bug Fixing: From Templates to AI Agents
  • Scholcast: Generating Academic Paper Summaries With AI-Driven Audio
  • Dynamic File Upload Component in Salesforce LWC
  • Safeguarding Web Applications With Cloud Service Providers: Anti-CSRF Tokenization Best Practices

Trending

  • AI’s Role in Everyday Development
  • AWS to Azure Migration: A Cloudy Journey of Challenges and Triumphs
  • Agile and Quality Engineering: A Holistic Perspective
  • Beyond Code Coverage: A Risk-Driven Revolution in Software Testing With Machine Learning

How to Make a Presentation in LaTeX

Creating your own LaTeX theme allows for complete customizability, something you have to work very hard to achieve in more conventional presentational tools.

By 
Trudy Firestone user avatar
Trudy Firestone
·
Dec. 28, 16 · Tutorial
Likes (19)
Comment
Save
Tweet
Share
11.5K Views

Join the DZone community and get the full member experience.

Join For Free

When I was tasked with creating a presentation to share with my co-workers at our weekly tech talk, I chose to use LaTeX. While I briefly considered other tools, like Google Slides or PowerPoint, using LaTeX allowed me to easily separate the styling from my content and create my own theme that I could reuse for all future presentations at Lucid.

What? Latex for Presentations?

LaTeX is a typesetting and document creation tool that is often used for creating academic articles due to its ability to display mathematical equations. Beyond that, it has many other capabilities due to a large amount of packages, such as Forest, which I used for laying out sentence trees in a college Linguistics class. One such package, Beamer, allows you to create presentations. While Beamer lacks the simple click-and-drag functionality of a GUI tool in creating presentations, it makes up for it by automating a large portion of the stylistic work — as long as you like the default styles or are willing to write your own — and offering all the mathematical equations, graphs, and other tools available in LaTeX.

A sample Beamer document:

\documentclass{beamer}

\title{Sample Title}
\subtitle{Sample Subtitle}

%\usetheme{lucid}
\begin{document}
\frame {
\titlepage
}
\frame {
\frametitle{Sample Page 1}
\[\frac{-b \pm \sqrt{b^2 - c}}{2a}\]
}
\frame{
\frametitle{Sample Page 2}
\framesubtitle{An Example of Lists}
\begin{itemize}
\item 1
\item 2
\item 3
\end{itemize}
}
\frame{
    \frametitle{Paragraph Content}
    This is a paragraph.
}
\end{document}

Sample LaTeX file with default beamer theme

PDF Output of the Sample File

The Beamer commands are straightforward and the flow of the presentation is easier to follow than it is in a GUI tool. While you could split the styling from the market using HTML and CSS, I enjoy using the Beamer package due to its concise creation of slides. Looking at a LaTeX file for a Beamer presentation is almost like looking at an outline which makes it more closely connected to the content the presentation is trying to convey. Unfortunately, I don’t like the default theme…or any of the other themes.

After lots of searching, however, I was able to create my own theme, lucid. Then, just by uncommenting \usetheme{lucid}, I was able to create a presentation I was pleased with. Only a few weeks ago, I was able to reuse the theme and create a new presentation with all the custom styling that I wanted in much less time than a GUI tool would have required replicating my original theme.

Sample LaTeX file with our new lucid theme

PDF Output of the Sample File With the New Theme

Building Your Own Beamer Theme

While it’s easy to find documentation on creating a presentation using Beamer, it’s more difficult to locate documentation on building a Beamer theme. Therefore, I’m going to walk through creating a simple Beamer theme with its own title page, header and footer, and styled lists.

The first step in creating a Beamer theme is creating the following four files where “lucid” is the name of our new theme:

  • beamerinnerthemelucid.sty.
  • beamerouterthemelucid.sty.
  • beamercolorthemelucid.sty.
  • beamerthemelucid.sty.

While it’s not necessary to separate these into four files, it follows the pattern of Beamer’s own themes which allow for mixing and matching different parts of the theme. For instance, if we wanted to use the albatross color theme with the default theme we could replace \usetheme{lucid} in the above sample file like this:

\usecolortheme{albatross}

The output PDF would consist of this:

Default LaTeX Beamer theme with albatross color theme

The Albatross Color Theme With the Default Theme

The three parts of a theme are:

  1. Inner: Defines the appearance of any items that make up the slides central content, i.e., lists or the title on the title page.
  2. Outer: Defines the appearance of the chrome of the slide, i.e., the title and footer of each slide.
  3. Color: Defines the colors used in various parts of the theme, i.e., the color for frame titles or the background color.

The final file, beamerthemelucid.sty, simply exists to combine all the parts of the theme into the main theme so it can be used without specifying each part of the theme.

beamerthemelucid.sty:

\mode<presentation>

\useinnertheme{lucid}
\useoutertheme{lucid}
\usecolortheme{lucid}

\mode<all>

The change to presentation mode at the beginning of the file is added so that the .sty file will match the mode of the presentation.tex file. Beamer automatically converts all files with its document class to presentation mode. The rest of the file simply sets all the portions of the theme to the new lucid theme and then returns the file to the normal mode. Each of the .sty files used to create the theme needs to be put in presentation mode in the same way.

Right now, the theme doesn’t actually change anything. Everything is still using the default theme because we haven’t defined any new styles. Let’s start with the title page. Because the title is part of the inner content of the title page, the definition for its style goes into beamerinnerthemelucid.sty.

I want a title page that’s centered vertically and horizontally like the one in the default theme, but with a bigger font, a different color, and no date. So, let’s add the following to beamerinnerthemelucid.sty between the mode changes:

\defbeamertemplate*{title page}{lucid}
{ 
  \vfill
    {\centering
      \usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle
      \par
    }
    \vskip1cm%
    {\centering
      \usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle
      \par
    }
  \vfill
}

Sample LaTeX presentation title page with simplified title

Updated Title Page

The \defbeamertemplate command creates a new template where the first argument is the mode, * in this case. The second argument is what the template is for, and the third argument is the name of the new template. To access the template elsewhere, the given name is used, in this case, “lucid.” The final part of \defbeamertemplate is where the actual template is defined using arbitrary LaTeX code.

In this case, we use common commands for centering and accessed the title and subtitle via \inserttitle and \insertsubtitle. To get the correct colors, we use \usebeamercolorwhich fetches the correct colors from the color theme based on the element name given, i.e., the name of the color. Similarly, \usebeamerfont fetches the correct font from the font theme, so that you can specify the font separately.

However, the color and the font remain unchanged, so we need to edit the color theme file next. I want white text on a dark background, so we need to change the background color first.

\definecolor{gray}{RGB}{90, 90, 90}

\setbeamercolor*{background canvas}{bg=gray}

\setbeamercolor*{title}{fg=white}
\setbeamerfont{title}{size=\Huge}

\setbeamerfont{subtitle}{size=\large}

Sample LaTeX presentation title page with new background color

Updated Title Page With New Background Color

After adding these commands in beamercolorthemelucid.sty, the title page looks just about the way I want it. The background is gray, and the title and subtitle are in a new size and color. However, Beamer’s default links are still in the bottom right-hand corner. To remove them, we add the following line to beamerouterthemelucid.sty because the footer is part of the outer theme.

\setbeamertemplate{navigation symbols}{}

Updated LaTeX presentation title page without navigation symbols

Updated Title Page Without Navigation Symbols

Like \defbeamertemplate, \setbeamertemplate can be used to define a new template. The element that uses the template is immediately set to use the new template rather than being set separately. In this case, the navigation symbols element is set to empty.

Now that the title page looks just the way I want it to, we can move on to the content slides. While they already have the correct background color and are correctly lacking the navigation symbols in the footer, the title and subtitle are the wrong color and lack style.

 LaTeX presentation content slides without any additional style changes

Content Slides With No Additional Changes

Because the frame title is part of the outer theme, we add the following to beamerouterthemelucid.sty:

\RequirePackage{tikz}

\newlength{\marginedPaperWidth}{\paperwidth - 0.2cm}

% Frame title
\defbeamertemplate*{frametitle}{lucid}[1][]{
  \vskip0.5cm%
    \begin{beamercolorbox}[wd=\paperwidth,ht=1.2cm]{frametitle} 
    \begin{tikzpicture}
    \useasboundingbox(0,0) rectangle(\the\paperwidth,1.2);
    {\usebeamercolor[fg]{frametitle-left}}
    \fill[color=frametitle-left.fg] (0.2,0) rectangle(\the\marginedPaperWidth,1.2);
     \ifx\insertframesubtitle\@empty%
        {\node[anchor=west] at (0.3,0.61){\usebeamerfont{frametitle}\insertframetitle};}
        \else%
        {\node[anchor= west] at (0.2,0.81){\usebeamerfont{frametitle}\insertframetitle};%
         \node[anchor= west] at (0.4,0.25){\usebeamerfont{framesubtitle}-\insertframesubtitle};}%
        \fi
    \end{tikzpicture}
  \end{beamercolorbox}
}

In addition to the now familiar Beamer commands, we use an "if" statement to differentiate between the cases of when there is and isn’t a subtitle, and we make use of a new package, tikz, which allows the user to create drawings in LaTeX. By using it in the template for the frametitle, we’ve added a rectangle to each frame title in the presentation. We set the color of the rectangle with the Beamer color frametitle-left, which the command \usebeamercolor[fg]{frametitle-left}adds to the environment.

LaTeX presentation content frames with updated frametitle layout

Updated Frametitle Layout

The colors and fonts are correctly reading from beamercolorthemelucid.sty, but it hasn’t been updated, so that’s the next step.

\definecolor{lucid-blue}{RGB}{41, 170, 225}
\setbeamercolor{frametitle-left}{fg=lucid-blue}
\setbeamercolor{frametitle}{fg=white}
\setbeamerfont{frametitle}{size=\Large}
\setbeamerfont{framesubtitle}{size=\small}

LaTeX presentation content frames with updated frametitle colors

Updated Frametitle Colors

The content of the slides is still in the default style, so we turn to beamerinnerthemelucid.sty to modify the template for lists.

\setbeamertemplate{itemize items}[square]

Just as \setbeamertemplate can be used to define a new template that is immediately applied, it can also be used to set a template defined by \defbeamertemplate earlier. square is defined by default in the beamer package, and it makes the bullets in an unordered list square.

LaTeX presentation slide with square bullets for the list

Slide With Updated Bullets

To change the colors of content and the list items, we update beamercolortheme.sty again.

\definecolor{light-grey}{RGB}{240, 240, 240}
\setbeamercolor*{itemize item}{fg=light-grey}
\setbeamercolor*{itemize subitem}{fg=light-grey}
\setbeamercolor*{normal text}{fg=white}

LaTeX presentation slides with updated content colors

Slide With Updated Content Colors

The last thing missing from our theme is a new footer. We need to add a page number and logo to each page.

\def\logo{%
  \includegraphics[width=3cm]{lucidsoftware-logo.png}%
}

\setbeamertemplate{footline}{%
  \begin{minipage}[t]{0.5\paperwidth}
    \begin{beamercolorbox}[wd=3cm, ht = 1cm]{page number in head/foot}
      \ifnum\thepage>1\relax%
        \vskip0.2cm%
        \hskip0.3cm%
        \insertpagenumber\,/\,\insertpresentationendpage\kern1em\vskip2pt%
        \hfill
      \fi
    \end{beamercolorbox}
  \end{minipage}
  \begin{minipage}[t]{0.76\paperwidth}
    \hfill
    \begin{beamercolorbox}[wd=3cm, ht = 1cm]{page number in head/foot}
      \logo
    \end{beamercolorbox}
  \end{minipage}
}

LaTeX presentation slides with footer with page numbers and logo

Slide With New Footer

Adding the above to beamerouterthemelucid.sty splits the footer in half, putting the page number out of the total number of pages on one side and a logo on the other. lucidsoftware-logo.png has to be included in the same directory for it to compile correctly. The if statement removes the page number from the first page.

Finally, we add the color for the page number to beamercolorthemelucid.sty:

\setbeamercolor*{page number in head/foot}{fg=light-grey}

Conclusion

Creating your own LaTeX theme allows for complete customizability, something you have to work very hard to achieve in more conventional presentational tools. It also makes it trivial to reuse the theme, avoiding wasted effort.

Additional References

  • Another Theme Example
LaTeX Template

Published at DZone with permission of Trudy Firestone, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Automated Bug Fixing: From Templates to AI Agents
  • Scholcast: Generating Academic Paper Summaries With AI-Driven Audio
  • Dynamic File Upload Component in Salesforce LWC
  • Safeguarding Web Applications With Cloud Service Providers: Anti-CSRF Tokenization Best Practices

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: