I'm not a big fan of Microsoft Office tools. Word constantly breaks your layout, Teams took 10 years to support multiple accounts properly, and in PowerPoint you spend far too much time clicking around menus and far too little time actually creating content.
PowerPoint frustrates me, and MARP offers a better approach for creating training presentations.
The Code Syntax Highlighting Challenge
One area where PowerPoint particularly struggles is code formatting. Getting readable code in PowerPoint is awkward - you either format it manually (time-consuming) or take screenshots (which become outdated quickly). With MARP, you get good syntax highlighting directly from Markdown code blocks.
What is MARP?
MARP (Markdown Presentation Ecosystem) transforms Markdown files into presentations. Instead of clicking through PowerPoint menus, you write your slides in Markdown and let MARP handle the formatting and styling.
This approach enables some interesting possibilities. Since your slides are just text files, you can split training material into modules and combine them easily. Version control becomes straightforward, and you can collaborate on presentations using the same tools you use for code.
Writing Slides in Markdown
Creating slides is as simple as writing Markdown with special MARP directives you add to the top:
---
marp: true
theme: main
paginate: true
footer: "OpenTofu Fundamentals"
---
<!-- class: first-page -->
# OpenTofu Fundamentals
###### Infrastructure as Code with OpenTofu
---
## Course Agenda
###### What is in this course?
- Introduction to Infrastructure as Code
- OpenTofu Origins and Philosophy
- OpenTofu Syntax and Core Concepts
- Providers and Resources
- Variables and Outputs
- Modules Deep Dive
- Advanced Concepts and Best Practices
- Hands-on Project and Q&A
---
Or to show some code and syntax you can add:
## Code Example
```hcl
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1d0"
instance_type = "t3.micro"
tags = {
Name = "HelloWorld"
}
}
```
Together with the theme I created, this is the result:
Custom Branding and Themes
MARP allows customization through CSS themes. As you can see in the slides above, I reused the background from my homepage and the same colors to create consistent branding for my training slides.
How to set it up?
You can use the marp CLI (brew install marp-cli
/ scoop install marp-cli
) and run a single command to get started: marp ./index.md --watch
. Or you can add marp as a node package. I went with the node package approach since it integrates better with my website setup. Here's part of my package.json from the training folder:
{
"name": "training-materials",
"version": "1.0.0",
"description": "Training materials with Marp presentation support",
"private": true,
"scripts": {
"demo": "marp ./marp-demo/demo/index.md --theme-set ./themes/ --config-file ./themes/marp-config.js --watch"
},
"devDependencies": {
"@marp-team/marp-cli": "^3.4.0",
"@marp-team/marp-core": "^3.9.0",
"@taga3s/highlightjs-terraform": "^1.0.6",
"highlight.js": "^11.9.0"
}
}
I referenced the theme set in the script and can now use npm run demo
to create the demo slides shown above.
Why MARP works well
Compared to PowerPoint, MARP offers several advantages:
- Content focus: Write content instead of wrestling with formatting
- Version control: Slides are just text files that work with git
- Consistent styling: Themes keep everything uniform
- Code-friendly: Good syntax highlighting for technical content
- Fast iteration: No clicking through menus
- Modular approach: Split content into reusable modules
For technical training materials, MARP removes much of the PowerPoint friction and lets you focus on creating content rather than fighting with the tool.