MARkdown to Slide with panDOC — Slides as Code
RAYA Christian
2026
Welcome to MarS-Doc
MarS-Doc (Markdown to Slide with panDoc)
This tool is a presentation system designed for engineers, developers, and scientists.
It solves the chronic problems of traditional presentations:
“If it’s not in version control, it doesn’t exist.”
To build this project locally, ensure your environment meets the following specifications:
make Commands
# Generate both versions
make
# CDN-dependent version
make online
# Self-contained version
make offline
# Live-reload
make watch
Two distribution modes:
slides_online.html): Uses CDNs
for Reveal.js, ECharts, etc. Ideal for keeping the Git repository
lightweight.slides_offline.html): Embeds
the LUA/JS runtime and fonts locally. Perfect for conferences without a
reliable internet connection.The Intuitive Toolbar
Look at the bottom left of your screen: a small gear wheel (⚙️) gives you access to a retractable toolbar containing essential functions:
To make touch-screen navigation easier, this presentation includes invisible navigation buttons:

Forget capricious USB clickers.
No app to install, everything happens directly in your phone’s browser.
Markdown Syntax
To define the time allocated to a slide (in seconds), insert this comment anywhere in the section:
<!-- timing: 10 -->
How it works
Multi-Column Layout
Image 1
Column 1
Image 2
Column 2
Image 3
Column 3
Image 4
Column 4
Image 5
Column 5
Use the .rows-full classe combined with background
colors (.bg-blue, .bg-yellow, width=30%,
height=35%, etc.) to structure space without writing any HTML:
.bg-green .rounded-tl
.bg-red .rounded-bl
.bg-orange .rounded-tr
.bg-black .rounded-br
Use the .cols-full classe combined with background
colors (.bg-blue, .bg-yellow, width=25%,
height=30%, etc.) to structure space without writing any HTML:
.bg-green .rounded-tl
.bg-orange
.bg-black .rounded-tr
.bg-green .rounded-bl
.bg-orange
.bg-black .rounded-br
The .warning and .info classes
automatically generate semantic callouts.
⚠️ Warning: This is a critical alert generated by LUA + Alpine.js.
ℹ️ Information: The toggle component hides text to avoid cluttering the slide.
make online or
make offline.CSV File Import
The LUA script directly reads your .csv files and
generates the appropriate Pandoc tables on the fly.
| Composant | Boîtier | Fonction principale | Statut |
|---|---|---|---|
| LFCN-80+ | FV1206 |
Filtre Passe-Bas (DC - 80 MHz); Tolérance serrée | Validé |
| GALI-39+ | SOT-89 |
Amplificateur RF gain élevé (20 dB @ 1 GHz) | En test |
| BAT15-04W | SOT-323 |
Diode Schottky pour détection de puissance RF | À valider |
{.csv src="assets/table.csv" sep=";" header="true" align="l,c,l,r" limit=3}
Double click on the image to view it in full screen
Directly reading your RF data files (.s2p, .s3p, .s4p).
S2P Smith Chart
Plot magnitude in dB
Directly reading your RF data files (.s2p, .s3p, .s4p).
S2P Polar Chart
Plot magnitude in linear
Convert Gnuplot scripts (.gnu) in echarts graph.
Polar S-parameters from Gnuplot
XY Gnuplot Script
Convert Gnuplot scripts (.gnu) in echarts graph.
Histogram from Gnuplot
Histogram with Gaussian function from Gnuplot
Wavedrom in markdown
Support of WaveDrom diagrams
Include WaveDrom: ./assets/wavedrom.json
Support of WaveDrom symbols
Reveal.js organises slides on a 2D grid:
| Direction | Key | Meaning in this deck |
|---|---|---|
| → Right | → |
Next thematic section |
| ↓ Down | ↓ |
Deeper technical detail |
| ← Left | ← |
Previous section |
| ↑ Up | ↑ |
Previous slide (same section) |
Tip: press
Ofor the Overview to visualise the full grid at a glance.
| Key | Mode | Description |
|---|---|---|
S |
Speaker | Opens speaker view with notes + timer |
O |
Overview | Full 2D grid of all slides |
F |
Fullscreen | Hides browser chrome |
B |
Blackout | Black screen — refocuses audience |
V |
Pause | Pause without leaving the slide |
G |
Jump | Jump directly to a slide number |
P |
Previous | Previous slide |
N |
Next | Next slide |
M |
Menu | Table of Contents |
Esc |
Back | Exits current mode |
Fragments — Step-by-Step Reveal
The most useful fragment classes in practice:
.fade-in — soft
appearance (default).fade-in-then-out —
appears, then disappears on next click.highlight-red —
red highlight without shifting layout.highlight-current-blue
— blue on active item, grey on others.fade-out — gradual
disappearancedata-fragment-index[Text]{.fragment .fade-in data-fragment-index=1}
Live demonstration — multiple elements share the same index:
🔴 Object C —
grow at click 3, exactly when A disappears
Each slide can declare its own background:
| Attribute | Example |
|---|---|
data-background-color |
"#1a1a2e" |
data-background-image |
"./assets/bg.png" |
data-background-video |
"./assets/loop.mp4" |
data-background-iframe |
"https://example.com" |
data-background-gradient |
"linear-gradient(...)" |
Pandoc syntax — inline attribute on the heading:
## My Section {data-background-color="#1a1a2e"}
Progressive Syntax Highlighting
Thanks to highlight.js and the
fix-highlight.lua script, you can animate code line by
line.
def demo_pipeline():
print("🚀 Initializing MarS-Doc...")
tools = ["Pandoc", "Reveal.js", "ECharts", "Mermaid", "Alpine.js"]
for tool in tools:
print(f" ✅ Loading: {tool}")
data-line-numbers="all|1-2|4|5-6"
Native LaTeX rendering is enabled via the --mathjax
flag:
Schrödinger equation:
\[i\hbar\frac{\partial}{\partial t} \Psi(\mathbf{r},t) = \hat{H} \Psi(\mathbf{r},t)\]
Fourier transform:
\[\hat{f}(\xi) = \int_{-\infty}^{\infty} f(x)\ e^{-2\pi i x \xi}\,dx\]

Ready to compile!
Your complete, versionable, and interactive presentation environment is now operational.
Useful links: