A self-contained LuaLaTeX Beamer theme built on Metropolis, in SHiP/CERN
house style. Every image it uses is embedded in the .sty as base64 and decoded
at load time, so the single file is the only thing you need to ship — there are
no companion image files.
Two colourways are provided: deepcerise (pink, default) and shipblue (blue). Each slide carries a generated cloud header band across the top and a sea strip (breaking wave / kraken / shark) across the bottom, with either the SHiP schooner or a skull riding in the bottom-right corner.
- Version: v2.0 (2026-06-24)
- Package name:
beamerthemeSHiP_deepcerise_embedded - Engine: LuaLaTeX (required — see below)
- Base theme: Metropolis
- LuaLaTeX. The embedded PNGs are decoded through
\directlua, so the deck must be compiled withlualatex. Under pdfLaTeX/XeLaTeX the images are not written out and the theme prints a warning instead of the artwork. - Metropolis (
beamertheme-metropolis) must be installed. Metropolis pulls infontspec, which under LuaLaTeX needsluaotfloadand its fonts (Fira is Metropolis's default). A normal TeX Live / MiKTeX install has these. - Packages auto-loaded by the theme:
tikz,tcolorbox(with theskinslibrary),graphicx,etoolbox. You don't load these yourself.
No image files, no \graphicspath, no external assets — everything is inside the
.sty.
Place beamerthemeSHiP_deepcerise_embedded.sty either next to your .tex file or
somewhere on your TeX search path (e.g. ~/texmf/tex/latex/, then
texhash). The filename must stay exactly as-is, because Beamer derives it from
the theme name.
Load it the Beamer way — Beamer prepends beamertheme, so you drop that prefix:
\documentclass{beamer}
\usetheme{SHiP_deepcerise_embedded} % loads beamerthemeSHiP_deepcerise_embedded.sty\documentclass[aspectratio=169]{beamer}
\usetheme[shipblue, footer]{SHiP_deepcerise_embedded}
\title{Search for Hidden Particles}
\author{SHiP Collaboration}
\date{2026}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}{Motivation}
Physics beyond the Standard Model \SHiPbullet\ hidden sector portals.
\end{frame}
\end{document}Compile with lualatex, and run it twice so the TikZ backgrounds settle:
lualatex mydeck.tex
lualatex mydeck.tex
Pass these in the optional argument of \usetheme[...]{SHiP_deepcerise_embedded}.
| Option | Effect |
|---|---|
deepcerise |
Pink scheme (default) |
shipblue |
Blue scheme |
| Option | Effect |
|---|---|
ship |
SHiP schooner in the corner (default) |
skull |
Skull in the corner instead |
| Option | Effect |
|---|---|
noclouds |
Remove the cloud header band on every slide |
By default the plain Metropolis footer is used. footer switches on a custom
bottom bar showing speaker, short title, date and slide number; the no… options
hide individual fields of that bar.
| Option | Effect |
|---|---|
footer |
Show the speaker / title / date / slide-number bar |
nofooter |
Keep the plain Metropolis footer (default) |
noauthor |
Hide the speaker field in the footer bar |
notitle |
Hide the short-title field in the footer bar |
nodate |
Hide the date field in the footer bar |
noframenumber |
Hide the slide number in the footer bar |
Examples:
\usetheme[footer]{SHiP_deepcerise_embedded}
\usetheme[shipblue, footer, noclouds]{SHiP_deepcerise_embedded}
\usetheme[skull]{SHiP_deepcerise_embedded}Set (or change) the colour scheme in the preamble instead of via an option:
\SHiPcolorscheme{shipblue}Accepts shipblue/blue for the blue scheme; anything else selects the pink
(deepcerise) scheme.
These are meant to be used inside a frame (except \footerstyle, which is
dual-purpose — see below).
| Value | Bottom graphic |
|---|---|
1 |
breaking wave |
2 |
kraken |
3 |
shark |
0 |
none (no bottom strip on this frame) |
With no \framestyle, the three sea strips auto-alternate 1 → 2 → 3 → 1 …
across your slides.
\begin{frame}{Results}
\framestyle{2} % kraken under this slide
...
\end{frame}- Inside a frame: overrides the emblem for that frame only; the next frame reverts to the deck-wide default.
- In the preamble or between frames: sets the deck-wide default (equivalent to
the
ship/skulloptions).
% deck-wide default set once:
\footerstyle{skull}
\begin{frame}{This one keeps the ship}
\footerstyle{ship} % just this frame
...
\end{frame}Replaces the cloud band with a plain coloured header bar for the current frame
(useful behind a busy title). Global removal is the noclouds option.
Only relevant when the footer bar is enabled.
Small, scheme-aware image glyphs you can drop into running text. They recolour automatically with the active scheme.
| Command | Glyph |
|---|---|
\SHiPbullet |
SHiP symbol bullet |
\SHiPanchor |
anchor |
\SHiPpaddle |
paddle |
Key channels \SHiPbullet\ dark photons \SHiPbullet\ heavy neutral leptons.The theme defines named colours you can use anywhere (\color{...},
\textcolor{...}, fg=/bg= in Beamer templates).
| Name | Pink (deepcerise) | Blue (shipblue) |
|---|---|---|
deepcerise |
#D93387 |
#1565C0 (shipblue) |
cerisemid |
#E87DB1 |
#32C9DD (shipcyan) |
babypink |
#F8C8DC |
#C8E1F5 (light blue) |
Note:
deepceriseis the deck's accent colour, so under the blue scheme it resolves to blue. If you want a colour pinned to a specific hue regardless of scheme, define your own, e.g.\definecolor{fixedcerise}{HTML}{D93387}.
| Name | Hex |
|---|---|
shipblue |
#1565C0 |
shipnavy |
#06157B |
shipcyan |
#32C9DD |
To pass a raw hex value inline, use the [HTML] model (no #):
\textcolor[HTML]{D93387}{some pink text}block, alertblock and exampleblock are restyled with rounded tcolorbox
panels that follow the scheme:
- block — deepcerise title bar, faint deepcerise body.
- alertblock — darker (deepcerise!85!black) title bar.
- exampleblock — cerisemid title bar, faint cerisemid body.
A block with an empty title renders as a body-only panel (no empty coloured bar),
so \begin{block}{} looks clean.
- Cloud header — a generated cloud band sits across the top of every slide,
behind a transparent frame-title bar (so the title reads over the clouds).
noclouds/\framenocloudfall back to a plain coloured bar. - Title page — the cloud band is the title-page banner; the title itself is plain text in the scheme colour (there is no separate coloured title band).
- Sea strip — the bottom of each slide carries a wave / kraken / shark strip
(see
\framestyle) with the ship or skull emblem (see\footerstyle/skull). - Footer — optional (
footer) bar with speaker, title, date and a bold slide number.
For reference, the twenty PNGs baked into the .sty (decoded to the compile
directory at load) are:
SHiP-Symbol-{cerise,blue}.png,anchor-{cerise,blue}.png,paddle-{cerise,blue}.png— inline glyphs.cloud-band-{cerise,blue}.png— the top header band.waves-{cerise,blue}-{wave,kraken,shark}.png— sea strips with the schooner.waves-{cerise,blue}-{wave,kraken,shark}-skull.png— sea strips with the skull.
The file is ~1.3 MB because it carries both the ship and skull strip sets so you can switch at will. If you only ever need one emblem, dropping the unused six strips roughly halves the sea-strip payload.
- Use
lualatex(not pdflatex/xelatex). - Compile twice so the TikZ backgrounds are placed correctly.
- Make sure Metropolis and its fonts are installed.
lualatex mydeck.tex && lualatex mydeck.tex
| Symptom | Cause / fix |
|---|---|
| Warning about needing LuaLaTeX; no artwork | You compiled with pdf/xelatex. Use lualatex. |
luaotfload / font / fontspec errors |
Metropolis needs system fonts under LuaLaTeX. Install luaotfload + Fira (or set another font). |
| Backgrounds/emblems in the wrong place | Compile a second time. |
File beamerthemeSHiP_deepcerise_embedded.sty not found |
Put the .sty beside your .tex or on the TeX path; keep the exact filename. |
\footerstyle{skull} inside a frame doesn't stick to later frames |
That's intended: inside a frame it's a per-frame override. Set the default via the skull option or \footerstyle{skull} in the preamble. |
The embedded images are produced by a small Python pipeline (Pillow + NumPy + SciPy) that ships alongside the theme:
cloudband.py— generates the structured cloud header bands.make_strips.py— builds the ship and skull sea-strip sets (erases the ship, rebuilds the sea, composites the skull artwork recoloured per scheme).skull.py/skullify.py— earlier procedural-skull generator and the ship→skull swap helper.
You only need these if you want to change the artwork; for normal use the .sty
is fully self-contained.