{"id":77181,"date":"2026-06-23T09:39:16","date_gmt":"2026-06-23T09:39:16","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=77181"},"modified":"2026-06-23T09:39:20","modified_gmt":"2026-06-23T09:39:20","slug":"complete-marp-installation-command-examples-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/complete-marp-installation-command-examples-guide\/","title":{"rendered":"Complete Marp installation + command + examples guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Marp is a Markdown presentation ecosystem. Marp CLI converts Marp\/Marpit Markdown files into <strong>static HTML\/CSS, PDF, PowerPoint\/PPTX, and images<\/strong>. The official CLI docs also say Node.js <strong>v18+<\/strong> is required for the Node-based CLI, and PDF\/PPTX\/image conversion requires a browser such as Chrome, Edge, or Firefox. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. What Marp is best for<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Marp is best when you want:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Markdown \u2192 HTML\nMarkdown \u2192 PDF\nMarkdown \u2192 PPTX\nMarkdown \u2192 PNG\/JPEG images\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For you, Marp is excellent for:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quick training decks\nclient PPTX\/PDF\nsimple course slides\nfast Markdown-based slide generation\nGit-based slide maintenance\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">But remember:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Marp HTML is Marp HTML, not reveal.js HTML.\n<span class=\"hljs-keyword\">For<\/span> reveal.js, <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Quarto<\/span>.\n<span class=\"hljs-title\">For<\/span> <span class=\"hljs-title\">quick<\/span> <span class=\"hljs-title\">PPTX<\/span>\/<span class=\"hljs-title\">PDF<\/span>, <span class=\"hljs-title\">Marp<\/span> <span class=\"hljs-title\">is<\/span> <span class=\"hljs-title\">very<\/span> <span class=\"hljs-title\">strong<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Your current file<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You already have this file:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\nls\n<\/code><\/span><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For Marp, we will use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Install Marp on macOS<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Use Homebrew<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the cleanest option on macOS:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install marp-cli\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --version\nwhich marp\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official Marp CLI README lists Homebrew as a macOS\/Linux package-manager install option, though it notes package manifests are community-maintained. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Use Node.js and npm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install Node.js:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install node\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">node --version\nnpm --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Install Marp CLI globally:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">-g<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If <code>marp<\/code> command does not work, use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official docs list both local installation using <code>npm install --save-dev @marp-team\/marp-cli<\/code> and global installation using <code>npm install -g @marp-team\/marp-cli<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option C: Use <code>npx<\/code> without global install<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the easiest when PATH is causing issues:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli<span class=\"hljs-keyword\">@latest<\/span> --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli<span class=\"hljs-keyword\">@latest<\/span> slide-deck.md\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert PDF:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli<span class=\"hljs-keyword\">@latest<\/span> slide-deck.md --pdf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert PPTX:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli<span class=\"hljs-keyword\">@latest<\/span> slide-deck.md --pptx\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official docs call <code>npx<\/code> a good way to run latest Marp CLI for one-shot conversion without installing the command globally. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Install Marp on Windows<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Node.js + npm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install Node.js LTS from the official Node.js site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then open PowerShell:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">node<\/span> <span class=\"hljs-selector-tag\">--version<\/span>\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">--version<\/span>\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">-g<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli\nmarp --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If command is not found:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Scoop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The official Marp CLI README lists Scoop as the Windows package-manager install option:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">scoop install marp\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">(<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option C: VS Code extension<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install <strong>Marp for VS Code<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In VS Code:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Extensions \u2192 Search \u201cMarp for VS Code\u201d \u2192 Install\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The VS Code extension integrates Marp CLI export and supports exporting active Markdown to HTML, PDF, PPTX, PNG, JPEG, and TXT notes. It also requires a browser for PDF\/PPTX\/image export. (<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=marp-team.marp-vscode\">Visual Studio Marketplace<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Install Marp on Linux<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Node.js + npm<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">node<\/span> <span class=\"hljs-selector-tag\">--version<\/span>\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">--version<\/span>\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">-g<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli\nmarp --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If Node.js is old, install Node.js v18+ first.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Homebrew on Linux<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install marp-cli\nmarp --version\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option C: Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Marp provides an official container image. The official README lists Docker images from Docker Hub and GitHub Container Registry. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pull:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker pull marpteam\/marp-cli\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker pull ghcr.io\/marp-team\/marp-cli\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example usage:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker run --rm -v <span class=\"hljs-string\">\"$PWD:\/home\/marp\/app\"<\/span> marpteam\/marp-cli slide-deck.md\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">PDF:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker run --rm -v <span class=\"hljs-string\">\"$PWD:\/home\/marp\/app\"<\/span> marpteam\/marp-cli slide-deck.md --pdf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">PPTX:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker run --rm -v <span class=\"hljs-string\">\"$PWD:\/home\/marp\/app\"<\/span> marpteam\/marp-cli slide-deck.md --pptx\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Note: <code>--preview<\/code> is not available through the official Docker image. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Verify Marp installation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected style:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli v4.x.x (w\/ @marp-team\/marp-core v4.x.x)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official CLI docs show <code>marp --version<\/code> as the way to confirm the CLI and engine version. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If that fails:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Fix: <code>zsh: command not found: marp<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You saw this issue earlier:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --version\nzsh: command not found: marp\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">But this worked:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">That means Marp is installed, but the global npm binary path is not in your <code>PATH<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Check npm global prefix<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">npm config <span class=\"hljs-keyword\">get<\/span> prefix\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\/opt\/homebrew\/Cellar\/node\/26.3.1\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 2: Check Marp binary<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ls -l <span class=\"hljs-string\">\"$(npm config get prefix)\/bin\/marp\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3: Add npm global bin path to zsh<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">'export PATH=\"$(npm config get prefix)\/bin:$PATH\"'<\/span> &gt;&gt; ~\/.zshrc\nsource ~\/.zshrc\nrehash\nmarp --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 4: If still not working, add exact path<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Based on your earlier output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">'export PATH=\"\/opt\/homebrew\/Cellar\/node\/26.3.1\/bin:$PATH\"'<\/span> &gt;&gt; ~\/.zshrc\nsource ~\/.zshrc\nrehash\nmarp --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 5: Stronger symlink fix<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">ln -sf \/opt\/homebrew\/Cellar\/node\/26.3.1\/bin\/marp \/opt\/homebrew\/bin\/marp\nrehash\nwhich marp\nmarp --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For daily work, this is always safe:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Create your first Marp slide deck<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/slides\/m<\/span>arp-test\/images\ncd ~<span class=\"hljs-regexp\">\/slides\/m<\/span>arp-test\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; openshift-intro.marp.md &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\nmarp: <span class=\"hljs-keyword\">true<\/span>\ntheme: <span class=\"hljs-keyword\">default<\/span>\npaginate: <span class=\"hljs-keyword\">true<\/span>\nfooter: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/span>\n\n<span class=\"hljs-comment\">## DevOpsSchool Training<\/span>\n\n---\n\n<span class=\"hljs-comment\"># What is OpenShift?<\/span>\n\nRed Hat OpenShift is an enterprise Kubernetes platform.\n\nIt helps teams build, deploy, run, <span class=\"hljs-keyword\">and<\/span> manage containerized applications.\n\n---\n\n<span class=\"hljs-comment\"># Why OpenShift?<\/span>\n\n- Enterprise Kubernetes\n- Built-in security\n- Developer experience\n- Integrated CI\/CD\n- Operators\n- Monitoring\n\n---\n\n<span class=\"hljs-comment\"># Example Commands<\/span>\n\n```bash\noc login\noc get projects\noc get pods -A\noc get routes -A\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Summary<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenShift is built on Kubernetes<\/li>\n\n\n\n<li>It adds enterprise features<\/li>\n\n\n\n<li>It improves developer and operations workflow<br>EOF<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n<span class=\"hljs-attr\">Preview<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nnpx @marp-team\/marp-cli --preview openshift-intro.marp.md\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Generate HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli openshift-intro.marp.md -o openshift-intro.html\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Generate PDF:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli openshift-intro.marp.md --pdf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Generate PPTX:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli openshift-intro.marp.md --pptx\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marpit splits slide pages using a horizontal ruler like <code>---<\/code>, and Marpit Markdown supports directives, image syntax, and fragmented lists. (<a href=\"https:\/\/github.com\/marp-team\/marpit\/blob\/main\/docs\/markdown.md\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Marp file anatomy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A typical Marp file has:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">front matter\nslides separated by ---\nMarkdown content\ndirectives\nimages\ncode blocks\nnotes\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\nmarp: <span class=\"hljs-keyword\">true<\/span>\ntheme: <span class=\"hljs-keyword\">default<\/span>\npaginate: <span class=\"hljs-keyword\">true<\/span>\nheader: <span class=\"hljs-string\">\"OpenShift Training\"<\/span>\nfooter: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Slide 1<\/span>\n\nContent\n\n---\n\n<span class=\"hljs-comment\"># Slide 2<\/span>\n\nContent\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Required front matter<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Minimum:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\nmarp: <span class=\"hljs-keyword\">true<\/span>\n---\n\n<span class=\"hljs-comment\"># My Slide<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Better educator\/trainer setup:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\nmarp: <span class=\"hljs-keyword\">true<\/span>\ntheme: <span class=\"hljs-keyword\">default<\/span>\npaginate: <span class=\"hljs-keyword\">true<\/span>\nheader: <span class=\"hljs-string\">\"Red Hat OpenShift\"<\/span>\nfooter: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marpit directives can control theme, page numbers, header, footer, style, and other slide-deck behavior. (<a href=\"https:\/\/marpit.marp.app\/directives?utm_source=chatgpt.com\">marpit.marp.app<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Built-in themes<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Common built-in themes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">default<\/span>\ngaia\nuncover\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use in front matter:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">theme<\/span>: gaia\n<span class=\"hljs-attr\">paginate<\/span>: <span class=\"hljs-literal\">true<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Override theme from CLI:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--theme<\/span> <span class=\"hljs-selector-tag\">gaia<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports overriding the theme by CLI option and using custom CSS themes. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Convert to HTML<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Default Marp output is HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Specific output file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Using <code>npx<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli slide-deck.md -o output.html\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI converts a passed Markdown file to HTML by default, and <code>--output<\/code> \/ <code>-o<\/code> changes the output path. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Convert to PDF<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-40\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.pdf<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With local images:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-41\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span> <span class=\"hljs-selector-tag\">--allow-local-files<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-41\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With PDF notes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-42\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span> <span class=\"hljs-selector-tag\">--pdf-notes<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With PDF outlines\/bookmarks:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-43\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span> <span class=\"hljs-selector-tag\">--pdf-outlines<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">PDF conversion is triggered by <code>--pdf<\/code> or an output filename ending in <code>.pdf<\/code>; Marp CLI also supports <code>--pdf-notes<\/code> and <code>--pdf-outlines<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Convert to PowerPoint PPTX<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-44\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-44\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With local images:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-46\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--allow-local-files<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-46\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports PPTX conversion by <code>--pptx<\/code> or output path ending in <code>.pptx<\/code>; the created PPTX includes rendered Marp slide pages and supports presenter notes. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Editable PPTX option<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Regular Marp PPTX is usually rendered as slide pages, so it may not be easily editable like native PowerPoint text boxes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Experimental editable PPTX:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--pptx-editable<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With output name:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--pptx-editable<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">editable-output<\/span><span class=\"hljs-selector-class\">.pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-48\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Important: the official docs mark <code>--pptx-editable<\/code> as experimental, require both a browser and LibreOffice Impress, warn that complex styles may break, and say reproducibility is lower than regular PPTX. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install LibreOffice on macOS:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask libreoffice\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--pptx-editable<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">My advice:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-50\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">normal<\/span> --<span class=\"hljs-title\">pptx<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">best<\/span> <span class=\"hljs-title\">visual<\/span> <span class=\"hljs-title\">accuracy<\/span>.\n<span class=\"hljs-title\">Use<\/span> --<span class=\"hljs-title\">pptx<\/span>-<span class=\"hljs-title\">editable<\/span> <span class=\"hljs-title\">only<\/span> <span class=\"hljs-title\">when<\/span> <span class=\"hljs-title\">client<\/span> <span class=\"hljs-title\">must<\/span> <span class=\"hljs-title\">edit<\/span> <span class=\"hljs-title\">text<\/span>\/<span class=\"hljs-title\">shapes<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-50\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Convert to images<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Convert all slides to PNG<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--images<\/span> <span class=\"hljs-selector-tag\">png<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-51\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Convert all slides to JPEG<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--images<\/span> <span class=\"hljs-selector-tag\">jpeg<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-52\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Convert only title slide to PNG<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--image<\/span> <span class=\"hljs-selector-tag\">png<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-54\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">title-slide<\/span><span class=\"hljs-selector-class\">.png<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-54\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">High-resolution image<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-55\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">title-slide<\/span><span class=\"hljs-keyword\">@2x<\/span>.png --image-scale <span class=\"hljs-number\">2<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-55\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports <code>--images png|jpeg<\/code> for multiple images, <code>--image png|jpeg<\/code> for only the first slide, and <code>--image-scale<\/code> for higher-resolution output. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. Export presenter notes<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--notes<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-57\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">notes<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-57\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI can export presenter notes to a text file using <code>--notes<\/code> or by specifying a <code>.txt<\/code> output. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Local images and <code>--allow-local-files<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When your slides reference local files like:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">browser-based conversion may block local access unless you pass:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">--allow-local-files\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-58\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span> <span class=\"hljs-selector-tag\">--allow-local-files<\/span>\n<span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--allow-local-files<\/span>\n<span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--images<\/span> <span class=\"hljs-selector-tag\">png<\/span> <span class=\"hljs-selector-tag\">--allow-local-files<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-58\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official CLI docs say browser-based conversion cannot use local files by default for security reasons, and <code>--allow-local-files<\/code> should only be used with trusted Markdown. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For your course files, use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pptx --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Preview mode<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Preview in a separate window:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-60\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--preview<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-60\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Short form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-61\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">-p<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-61\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">With <code>npx<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-62\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --preview slide-deck.md\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-62\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview mode automatically enables watch mode while the preview window is open. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For your current file:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\nnpx @marp-team\/marp-cli --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. Watch mode<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Watch Markdown and theme changes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-63\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--watch<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-63\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Short form:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-64\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">-w<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-64\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Watch and output HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-65\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">-w<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-65\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI watch mode observes Markdown and theme CSS changes and triggers conversion whenever files are updated. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Server mode<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Serve a directory:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --server .\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Short form:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp -s .\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use custom port:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">PORT=5000 marp -s .\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then open:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-66\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">http:<span class=\"hljs-comment\">\/\/localhost:5000\/<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-66\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Server mode performs on-demand conversion by HTTP request; the official docs also note query strings such as <code>?pdf<\/code> can return converted outputs from the server. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-67\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">http:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md<\/span>\nhttp:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md?pdf<\/span>\nhttp:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md?pptx<\/span>\nhttp:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md?png<\/span>\nhttp:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md?jpeg<\/span>\nhttp:<span class=\"hljs-comment\">\/\/localhost:8080\/deck.md?txt<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-67\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. Choose browser for conversion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Default is auto, but you can force:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-68\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--browser<\/span> <span class=\"hljs-selector-tag\">chrome<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span>\n<span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--browser<\/span> <span class=\"hljs-selector-tag\">edge<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span>\n<span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--browser<\/span> <span class=\"hljs-selector-tag\">firefox<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pdf<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-68\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Prefer Firefox then Chrome:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-69\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">--browser<\/span> <span class=\"hljs-selector-tag\">firefox<\/span>,<span class=\"hljs-selector-tag\">chrome<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.png<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-69\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports <code>--browser<\/code> with <code>chrome<\/code>, <code>edge<\/code>, and <code>firefox<\/code>; the docs note Firefox support is still early-stage and may render PDFs differently than Chrome. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. Multiple file conversion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Convert multiple files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-70\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">deck-a<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">deck-b<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">deck-c<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-70\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert all Markdown files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-71\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> *<span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-71\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert files in directory:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp .\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert with glob:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-72\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> \"<span class=\"hljs-selector-tag\">slides<\/span><span class=\"hljs-comment\">\/**\/<\/span>*<span class=\"hljs-selector-class\">.md<\/span>\"\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-72\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Disable parallel processing:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-73\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> \"<span class=\"hljs-selector-tag\">slides<\/span><span class=\"hljs-comment\">\/**\/<\/span>*<span class=\"hljs-selector-class\">.md<\/span>\" <span class=\"hljs-selector-tag\">--no-parallel<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-73\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Set parallel count:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-74\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> \"<span class=\"hljs-selector-tag\">slides<\/span><span class=\"hljs-comment\">\/**\/<\/span>*<span class=\"hljs-selector-class\">.md<\/span>\" <span class=\"hljs-selector-tag\">--parallel<\/span> 2\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-74\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports multiple paths, directories, and glob patterns; when converting multiple files, it processes them in parallel with default concurrency of 5 and supports <code>--parallel<\/code> \/ <code>--no-parallel<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">24. Input directory and output directory<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>--input-dir<\/code> \/ <code>-I<\/code> to preserve directory structure:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp --input-dir slides --output output\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Short form:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp -I slides -o output\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp -I src -o dist\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The CLI docs say <code>--input-dir<\/code> is used when you want converted output in another directory while keeping the origin directory structure. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">25. Metadata options<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In Markdown front matter:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-75\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">title<\/span>: <span class=\"hljs-string\">\"Introduction to Red Hat OpenShift\"<\/span>\n<span class=\"hljs-attr\">description<\/span>: <span class=\"hljs-string\">\"OpenShift training slides by DevOpsSchool\"<\/span>\n<span class=\"hljs-attr\">author<\/span>: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\n<span class=\"hljs-attr\">keywords<\/span>: <span class=\"hljs-string\">\"openshift,kubernetes,devops,devopsschool\"<\/span>\n<span class=\"hljs-attr\">url<\/span>: <span class=\"hljs-string\">\"https:\/\/www.devopsschool.com\"<\/span>\n<span class=\"hljs-attr\">image<\/span>: <span class=\"hljs-string\">\"images\/og-image.png\"<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-75\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Override from CLI:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-76\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">marp slide-deck.md \\\n  --title <span class=\"hljs-string\">\"OpenShift Training\"<\/span> \\\n  --description <span class=\"hljs-string\">\"DevOpsSchool OpenShift Slides\"<\/span> \\\n  --author <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span> \\\n  --keywords <span class=\"hljs-string\">\"openshift,kubernetes,devops\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-76\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports metadata via global directives and CLI options such as <code>--title<\/code>, <code>--description<\/code>, <code>--author<\/code>, <code>--keywords<\/code>, <code>--url<\/code>, and <code>--og-image<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">26. Enable HTML in Markdown<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Marp normally treats HTML carefully. To enable HTML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-77\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-77\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example Markdown:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-78\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"text-align:center; font-size:48px;\"<\/span>&gt;<\/span>\n  Important Concept\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-78\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-79\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-79\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use HTML only for trusted content.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">27. Basic Markdown syntax in Marp<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-80\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Heading 1<\/span>\n\n<span class=\"hljs-comment\">## Heading 2<\/span>\n\nNormal paragraph.\n\n- Bullet one\n- Bullet two\n\n<span class=\"hljs-number\">1.<\/span> Number one\n<span class=\"hljs-number\">2.<\/span> Number two\n\n**Bold text**\n\n*Italic text*\n\n`inline code`\n\n```bash\nkubectl get pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-80\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>Marp<\/td><td>Markdown slides<\/td><\/tr><tr><td>Quarto<\/td><td>Publishing system<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-81\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n---\n\n<span class=\"hljs-comment\"># 28. Slide separator<\/span>\n\nMarp slides are separated by:\n\n```markdown\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-81\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-82\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Slide 1<\/span>\n\nContent\n\n---\n\n<span class=\"hljs-comment\"># Slide 2<\/span>\n\nContent\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-82\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marpit docs say slide pages are split by horizontal rulers such as <code>---<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marpit\/blob\/main\/docs\/markdown.md\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">29. Images in Marp<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Normal image<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;OpenShift Architecture](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Set width<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;width:900px](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Set height<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;height:500px](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Width and height<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;width:800px height:400px](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Percentage width<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;width:80%](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marpit extends normal Markdown image syntax to help create slide layouts. (<a href=\"https:\/\/github.com\/marp-team\/marpit\/blob\/main\/docs\/markdown.md\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">30. Background images in Marp<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Full background<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-83\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">!&#91;bg](images\/background.png)\n\n<span class=\"hljs-comment\"># OpenShift Training<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-83\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Right-side background<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-84\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">!&#91;bg right](images\/openshift-logo.png)\n\n<span class=\"hljs-comment\"># OpenShift<\/span>\n\nEnterprise Kubernetes platform.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-84\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Left-side background<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-85\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">!&#91;bg left](images\/architecture.png)\n\n<span class=\"hljs-comment\"># Architecture<\/span>\n\nControl plane <span class=\"hljs-keyword\">and<\/span> worker nodes.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-85\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Right-side with width<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-86\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">!&#91;bg right:<span class=\"hljs-number\">40<\/span>%](images\/openshift-logo.png)\n\n<span class=\"hljs-comment\"># OpenShift CLI<\/span>\n\n```bash\noc get projects\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-86\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-87\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\nMarpit image syntax supports split backgrounds with `bg left` <span class=\"hljs-keyword\">or<\/span> `bg right`, shrinking the slide content area to the other side. :contentReference&#91;oaicite:<span class=\"hljs-number\">28<\/span>]{index=<span class=\"hljs-number\">28<\/span>}\n\n---\n\n<span class=\"hljs-comment\"># 31. Multiple background images<\/span>\n\n```markdown\n!&#91;bg](images\/bg1.png)\n!&#91;bg opacity:<span class=\"hljs-number\">.4<\/span>](images\/bg2.png)\n\n<span class=\"hljs-comment\"># Multi-layer Background<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-87\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use carefully; simple layouts work better for PPTX\/PDF.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">32. Fragmented lists<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Normal bullet list shows all items:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">- First\n- Second\n- Third\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Fragmented list reveals one by one:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">* First\n* Second\n* Third\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marpit parses lists with specific markers as fragmented lists for appearing content one by one. (<a href=\"https:\/\/github.com\/marp-team\/marpit\/blob\/main\/docs\/markdown.md\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">33. Presenter notes<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Add notes as HTML comments:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-88\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"># What is OpenShift?\n\nOpenShift is Red Hat's enterprise Kubernetes platform.\n\n<span class=\"hljs-comment\">&lt;!--\nPresenter notes:\nExplain that OpenShift is Kubernetes plus enterprise capabilities:\nsecurity, operators, registry, routes, monitoring, and developer tools.\n--&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-88\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Export notes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-89\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--notes<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-89\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-90\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">notes<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-90\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">34. Header and footer<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Global header\/footer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-91\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">header<\/span>: <span class=\"hljs-string\">\"OpenShift Training\"<\/span>\n<span class=\"hljs-attr\">footer<\/span>: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n<span class=\"hljs-attr\">paginate<\/span>: <span class=\"hljs-literal\">true<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-91\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Slide-specific header\/footer:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-92\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-comment\">&lt;!-- _header: \"Architecture\" --&gt;<\/span>\n<span class=\"hljs-comment\">&lt;!-- _footer: \"DevOpsSchool | OpenShift\" --&gt;<\/span>\n\n# OpenShift Architecture\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-92\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Underscore directives like <code>_header<\/code> apply to the current slide only.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">35. Disable pagination on title slide<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-93\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-comment\">&lt;!-- _paginate: false --&gt;<\/span>\n\n# Introduction to Red Hat OpenShift\n\n## DevOpsSchool Training\n\n---\n\n<span class=\"hljs-comment\">&lt;!-- paginate: true --&gt;<\/span>\n\n# Agenda\n\n- What is OpenShift?\n- Why OpenShift?\n- Architecture\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-93\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">36. Slide-specific class<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-94\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-comment\">&lt;!-- _class: lead --&gt;<\/span>\n\n# Red Hat OpenShift\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-94\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use with theme CSS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">37. Change background\/color on one slide<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-95\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-comment\">&lt;!--\n_backgroundColor: #111827\n_color: white\n--&gt;<\/span>\n\n# Important Concept\n\nThis slide uses dark background.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-95\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">38. Use custom CSS theme<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mkdir -p themes\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create theme file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-96\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; themes\/devopsschool.css &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">\/* <span class=\"hljs-doctag\">@theme<\/span> devopsschool *\/<\/span>\n\n@import <span class=\"hljs-string\">'default'<\/span>;\n\nsection {\n  font-family: Arial, Helvetica, sans-serif;\n  background: <span class=\"hljs-comment\">#ffffff;<\/span>\n  color: <span class=\"hljs-comment\">#111827;<\/span>\n}\n\nh1 {\n  color: <span class=\"hljs-comment\">#1f2937;<\/span>\n  font-weight: <span class=\"hljs-number\">800<\/span>;\n}\n\nh2 {\n  color: <span class=\"hljs-comment\">#374151;<\/span>\n}\n\nfooter {\n  color: <span class=\"hljs-comment\">#6b7280;<\/span>\n  font-size: <span class=\"hljs-number\">20<\/span>px;\n}\n\nsection::after {\n  color: <span class=\"hljs-comment\">#6b7280;<\/span>\n  font-size: <span class=\"hljs-number\">18<\/span>px;\n}\nEOF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-96\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use in deck:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-97\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">theme<\/span>: devopsschool\n<span class=\"hljs-attr\">paginate<\/span>: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">footer<\/span>: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-97\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render with theme set:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-98\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">marp slide-deck.md --theme-<span class=\"hljs-keyword\">set<\/span> themes\/devopsschool.css\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-98\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-99\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">marp slide-deck.md --theme-<span class=\"hljs-keyword\">set<\/span> .\/themes\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-99\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports custom themes through <code>--theme<\/code> and multiple theme files\/directories through <code>--theme-set<\/code>. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">39. Use custom theme directly<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">marp slide-deck.md --theme themes\/devopsschool.css\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This overrides the theme at CLI level.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">40. Marp config file<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For repeated commands, create <code>marp.config.js<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-100\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">cat &gt; marp.config.js &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-built_in\">module<\/span>.exports = {\n  <span class=\"hljs-attr\">themeSet<\/span>: &#91;<span class=\"hljs-string\">'.\/themes\/devopsschool.css'<\/span>],\n  <span class=\"hljs-attr\">html<\/span>: <span class=\"hljs-literal\">true<\/span>,\n  <span class=\"hljs-attr\">allowLocalFiles<\/span>: <span class=\"hljs-literal\">true<\/span>,\n}\nEOF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-100\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-101\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">slide-deck<\/span><span class=\"hljs-selector-class\">.md<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-101\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For modern config:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-102\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/** <span class=\"hljs-doctag\">@type<\/span> {import('<span class=\"hljs-doctag\">@marp<\/span>-team\/marp-cli').Config} *\/<\/span>\n<span class=\"hljs-keyword\">const<\/span> config = {\n  themeSet: &#91;<span class=\"hljs-string\">'.\/themes\/devopsschool.css'<\/span>],\n  html: <span class=\"hljs-keyword\">true<\/span>,\n  allowLocalFiles: <span class=\"hljs-keyword\">true<\/span>,\n}\n\nmodule.exports = config\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-102\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp CLI supports configuration files for options that cannot or should not be repeated every time; its docs also show typed configuration patterns. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">41. Local project installation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For stable course projects, local install is better than global install.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-103\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">mkdir<\/span> <span class=\"hljs-selector-tag\">openshift-marp-course<\/span>\n<span class=\"hljs-selector-tag\">cd<\/span> <span class=\"hljs-selector-tag\">openshift-marp-course<\/span>\n\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">init<\/span> <span class=\"hljs-selector-tag\">-y<\/span>\n<span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">--save-dev<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-103\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create folder structure:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mkdir -p slides images themes output\/html output\/pdf output\/pptx output\/images\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create <code>package.json<\/code> scripts:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-104\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">npm pkg <span class=\"hljs-keyword\">set<\/span> scripts.preview=\"marp --preview slides\/01-introduction.marp.md\"\nnpm pkg <span class=\"hljs-keyword\">set<\/span> scripts.html=\"marp slides\/*.marp.md -o output\/html\"\nnpm pkg <span class=\"hljs-keyword\">set<\/span> scripts.pdf=\"marp slides\/*.marp.md --pdf --allow-local-files -o output\/pdf\"\nnpm pkg <span class=\"hljs-keyword\">set<\/span> scripts.pptx=\"marp slides\/*.marp.md --pptx --allow-local-files -o output\/pptx\"\nnpm pkg <span class=\"hljs-keyword\">set<\/span> scripts.images=\"marp slides\/*.marp.md --images png --allow-local-files -o output\/images\"\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-104\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">npm run preview\nnpm run html\nnpm run pdf\nnpm run pptx\nnpm run images\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The official docs recommend local project installation when you want exact control of CLI version and engine version. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">42. Recommended folder structure<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">openshift-marp-course\/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 marp.config.js\n\u251c\u2500\u2500 slides\/\n\u2502   \u251c\u2500\u2500 01-introduction.marp.md\n\u2502   \u251c\u2500\u2500 02-architecture.marp.md\n\u2502   \u2514\u2500\u2500 03-hands-on.marp.md\n\u251c\u2500\u2500 images\/\n\u2502   \u251c\u2500\u2500 devopsschool-logo.png\n\u2502   \u251c\u2500\u2500 openshift-architecture.png\n\u2502   \u2514\u2500\u2500 lifecycle.png\n\u251c\u2500\u2500 themes\/\n\u2502   \u2514\u2500\u2500 devopsschool.css\n\u251c\u2500\u2500 output\/\n\u2502   \u251c\u2500\u2500 html\/\n\u2502   \u251c\u2500\u2500 pdf\/\n\u2502   \u251c\u2500\u2500 pptx\/\n\u2502   \u2514\u2500\u2500 images\/\n\u2514\u2500\u2500 build.sh\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">43. Complete sample Marp deck for educators<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-105\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/slides\/m<\/span>arp-course\/images\ncd ~<span class=\"hljs-regexp\">\/slides\/m<\/span>arp-course\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-105\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create deck:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-106\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; openshift-complete.marp.md &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\nmarp: <span class=\"hljs-keyword\">true<\/span>\ntheme: <span class=\"hljs-keyword\">default<\/span>\npaginate: <span class=\"hljs-keyword\">true<\/span>\ntitle: <span class=\"hljs-string\">\"Introduction to Red Hat OpenShift\"<\/span>\ndescription: <span class=\"hljs-string\">\"OpenShift course slides by DevOpsSchool\"<\/span>\nauthor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nfooter: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n&lt;!-- _paginate: <span class=\"hljs-keyword\">false<\/span> --&gt;\n&lt;!-- _class: lead --&gt;\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/span>\n\n<span class=\"hljs-comment\">## DevOpsSchool Training<\/span>\n\nRajesh Kumar\n\n---\n\n<span class=\"hljs-comment\"># Learning Objectives<\/span>\n\nBy the end of this module, you will understand:\n\n* What OpenShift is\n* Why OpenShift is used\n* How OpenShift extends Kubernetes\n* Common OpenShift commands\n* Basic troubleshooting flow\n\n---\n\n<span class=\"hljs-comment\"># What is OpenShift?<\/span>\n\nRed Hat OpenShift is an enterprise Kubernetes platform.\n\nIt provides:\n\n- Kubernetes orchestration\n- Developer experience\n- Security defaults\n- CI\/CD integration\n- Operators\n- Monitoring\n\n---\n\n<span class=\"hljs-comment\"># Why OpenShift?<\/span>\n\n:::: columns\n\nOpenShift helps teams:\n\n- Deploy applications faster\n- Standardize Kubernetes usage\n- Improve platform security\n- Reduce operational complexity\n\n::::\n\n---\n\n<span class=\"hljs-comment\"># Kubernetes vs OpenShift<\/span>\n\n| Area | Kubernetes | OpenShift |\n|---|---|---|\n| Type | Orchestration | Enterprise platform |\n| Security | Configurable | Strong defaults |\n| Registry | External | Integrated |\n| Routes | Not native | Built-in |\n| Developer tools | External | Built-in |\n\n---\n\n!&#91;bg right:<span class=\"hljs-number\">42<\/span>%](images\/openshift-logo.png)\n\n<span class=\"hljs-comment\"># OpenShift CLI<\/span>\n\n```bash\noc login\noc get projects\noc <span class=\"hljs-keyword\">new<\/span>-project demo\noc get pods -A\noc get routes -A\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-106\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Common Troubleshooting<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Issue<\/th><th>Check<\/th><\/tr><\/thead><tbody><tr><td>Pod not running<\/td><td><code>oc describe pod<\/code><\/td><\/tr><tr><td>Route not working<\/td><td><code>oc get route<\/code><\/td><\/tr><tr><td>Image pull error<\/td><td>Secret\/registry access<\/td><\/tr><tr><td>App not reachable<\/td><td>Service selector\/route<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Summary<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenShift is enterprise Kubernetes<\/li>\n\n\n\n<li>It improves developer and operator workflows<\/li>\n\n\n\n<li>It adds security, routes, registry, operators, and monitoring<\/li>\n\n\n\n<li><code>oc<\/code> is the OpenShift CLI<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">EOF<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-107\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n<span class=\"hljs-attr\">Preview<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nnpx @marp-team\/marp-cli --preview openshift-complete.marp.md\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-107\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Generate:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-108\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli openshift-complete.marp.md --html --allow-local-files -o openshift-complete.html\nnpx @marp-team\/marp-cli openshift-complete.marp.md --pdf --allow-local-files -o openshift-complete.pdf\nnpx @marp-team\/marp-cli openshift-complete.marp.md --pptx --allow-local-files -o openshift-complete.pptx\nnpx @marp-team\/marp-cli openshift-complete.marp.md --images png --allow-local-files\nnpx @marp-team\/marp-cli openshift-complete.marp.md --notes -o openshift-notes.txt\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-108\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">44. Build script for your current file<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In your current <code>~\/slides<\/code> folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-109\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\n\ncat &gt; build-marp.sh &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nMARP=<span class=\"hljs-string\">\"Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\"<\/span>\n\nmkdir -p output\/marp\/html output\/marp\/pdf output\/marp\/pptx output\/marp\/images output\/marp\/notes\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Marp version:\"<\/span>\nnpx @marp-team\/marp-cli --version\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building HTML...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --html --allow-local-files \\\n  -o output\/marp\/html\/openshift-marp.html\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building PDF...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --pdf --allow-local-files \\\n  -o output\/marp\/pdf\/openshift-marp.pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building PPTX...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --pptx --allow-local-files \\\n  -o output\/marp\/pptx\/openshift-marp.pptx\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building PNG images...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --images png --allow-local-files \\\n  -o output\/marp\/images\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Exporting notes...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --notes \\\n  -o output\/marp\/notes\/openshift-notes.txt || <span class=\"hljs-keyword\">true<\/span>\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Generated files:\"<\/span>\nfind output\/marp -type f -<span class=\"hljs-keyword\">print<\/span>\nEOF\n\nchmod +x build-marp.sh\n.\/build-marp.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-109\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">45. Build all Marp decks<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-110\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; build-all-marp.sh &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nmkdir -p output\/html output\/pdf output\/pptx output\/images output\/notes\n\n<span class=\"hljs-keyword\">for<\/span> FILE in *.marp.md; <span class=\"hljs-keyword\">do<\/span>\n  BASENAME=<span class=\"hljs-string\">\"$(basename \"<\/span>$FILE<span class=\"hljs-string\">\" .marp.md)\"<\/span>\n\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building $FILE\"<\/span>\n\n  npx @marp-team\/marp-cli <span class=\"hljs-string\">\"$FILE\"<\/span> --html --allow-local-files \\\n    -o <span class=\"hljs-string\">\"output\/html\/${BASENAME}.html\"<\/span>\n\n  npx @marp-team\/marp-cli <span class=\"hljs-string\">\"$FILE\"<\/span> --pdf --allow-local-files \\\n    -o <span class=\"hljs-string\">\"output\/pdf\/${BASENAME}.pdf\"<\/span>\n\n  npx @marp-team\/marp-cli <span class=\"hljs-string\">\"$FILE\"<\/span> --pptx --allow-local-files \\\n    -o <span class=\"hljs-string\">\"output\/pptx\/${BASENAME}.pptx\"<\/span>\n\n  npx @marp-team\/marp-cli <span class=\"hljs-string\">\"$FILE\"<\/span> --images png --allow-local-files \\\n    -o <span class=\"hljs-string\">\"output\/images\/${BASENAME}\"<\/span>\n\n  npx @marp-team\/marp-cli <span class=\"hljs-string\">\"$FILE\"<\/span> --notes \\\n    -o <span class=\"hljs-string\">\"output\/notes\/${BASENAME}.txt\"<\/span> || <span class=\"hljs-keyword\">true<\/span>\ndone\n\nfind output -type f -<span class=\"hljs-keyword\">print<\/span>\nEOF\n\nchmod +x build-all-marp.sh\n.\/build-all-marp.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-110\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">46. GitHub Actions automation<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-111\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">name: Build Marp Slides\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout\n        uses: actions\/checkout@v4\n\n      - name: Setup Node.js\n        uses: actions\/setup-node@v4\n        with:\n          node-version: <span class=\"hljs-number\">22<\/span>\n\n      - name: Install Marp CLI\n        run: npm install -g @marp-team\/marp-cli\n\n      - name: Install Chrome\n        uses: browser-actions\/setup-chrome@v1\n\n      - name: Build Marp slides\n        run: |\n          mkdir -p output\/html output\/pdf output\/pptx\n          <span class=\"hljs-keyword\">for<\/span> FILE in *.marp.md; <span class=\"hljs-keyword\">do<\/span>\n            BASENAME=<span class=\"hljs-string\">\"$(basename \"<\/span>$FILE<span class=\"hljs-string\">\" .marp.md)\"<\/span>\n            marp <span class=\"hljs-string\">\"$FILE\"<\/span> --html --allow-local-files -o <span class=\"hljs-string\">\"output\/html\/${BASENAME}.html\"<\/span>\n            marp <span class=\"hljs-string\">\"$FILE\"<\/span> --pdf --allow-local-files -o <span class=\"hljs-string\">\"output\/pdf\/${BASENAME}.pdf\"<\/span>\n            marp <span class=\"hljs-string\">\"$FILE\"<\/span> --pptx --allow-local-files -o <span class=\"hljs-string\">\"output\/pptx\/${BASENAME}.pptx\"<\/span>\n          done\n\n      - name: Upload output\n        uses: actions\/upload-artifact@v4\n        with:\n          name: marp-slides\n          path: output\/\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-111\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">47. VS Code workflow<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Install extension:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-112\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">code<\/span> <span class=\"hljs-selector-tag\">--install-extension<\/span> <span class=\"hljs-selector-tag\">marp-team<\/span><span class=\"hljs-selector-class\">.marp-vscode<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-112\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Open folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\ncode .\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Open <code>.marp.md<\/code> file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Command Palette \u2192 Marp: Export slide deck\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or click the Marp icon in VS Code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supported VS Code exports include HTML, PDF, PPTX, PNG, JPEG, and TXT notes. (<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=marp-team.marp-vscode\">Visual Studio Marketplace<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">48. VS Code custom theme settings<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-113\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">mkdir<\/span> <span class=\"hljs-selector-tag\">-p<\/span> <span class=\"hljs-selector-class\">.vscode<\/span> <span class=\"hljs-selector-tag\">themes<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-113\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create <code>.vscode\/settings.json<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-114\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"markdown.marp.enableHtml\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n  <span class=\"hljs-attr\">\"markdown.marp.themes\"<\/span>: &#91;\n    <span class=\"hljs-string\">\".\/themes\/devopsschool.css\"<\/span>\n  ],\n  <span class=\"hljs-attr\">\"markdown.marp.exportType\"<\/span>: <span class=\"hljs-string\">\"pptx\"<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-114\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The VS Code extension supports custom theme CSS through <code>markdown.marp.themes<\/code>, including relative paths to local files. (<a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=marp-team.marp-vscode\">Visual Studio Marketplace<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">49. Best commands for your exact file<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run these now:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-115\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\n\n<span class=\"hljs-comment\"># Verify Marp<\/span>\nnpx @marp-team\/marp-cli --version\n\n<span class=\"hljs-comment\"># Preview<\/span>\nnpx @marp-team\/marp-cli --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n\n<span class=\"hljs-comment\"># HTML<\/span>\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md \\\n  --html --allow-local-files \\\n  -o Introduction_to_Red_Hat_OpenShift_DevOpsSchool.html\n\n<span class=\"hljs-comment\"># PDF<\/span>\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md \\\n  --pdf --allow-local-files \\\n  -o Introduction_to_Red_Hat_OpenShift_DevOpsSchool.pdf\n\n<span class=\"hljs-comment\"># PPTX<\/span>\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md \\\n  --pptx --allow-local-files \\\n  -o Introduction_to_Red_Hat_OpenShift_DevOpsSchool.pptx\n\n<span class=\"hljs-comment\"># PNG images for all slides<\/span>\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md \\\n  --images png --allow-local-files\n\n<span class=\"hljs-comment\"># Presenter notes<\/span>\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md \\\n  --notes \\\n  -o Introduction_to_Red_Hat_OpenShift_DevOpsSchool.notes.txt\n\n<span class=\"hljs-comment\"># Check generated files<\/span>\nls -lh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-115\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">50. Browser dependency troubleshooting<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">PDF\/PPTX\/images need Chrome, Edge, or Firefox. Marp\u2019s official docs state that one of these browsers is required for PDF, PPTX, and image conversion. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On macOS:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask google-chrome\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask microsoft-edge\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-116\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli deck.marp.md --pdf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-116\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use browser option:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-117\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli deck.marp.md --pdf --browser chrome\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-117\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">51. Troubleshooting guide<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: <code>marp: command not found<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-118\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-118\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or fix PATH:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-119\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">npm config <span class=\"hljs-keyword\">get<\/span> prefix\necho 'export PATH=\"$(npm config <span class=\"hljs-keyword\">get<\/span> prefix)\/bin:$PATH\"' &gt;&gt; ~\/.zshrc\nsource ~\/.zshrc\nrehash\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-119\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: PDF\/PPTX export fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install Chrome:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask google-chrome\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-120\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli deck.marp.md --pdf --browser chrome\nnpx @marp-team\/marp-cli deck.marp.md --pptx --browser chrome\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-120\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Local images missing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">--allow-local-files\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-121\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli deck.marp.md --pdf --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-121\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Image path wrong<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pwd\nls -lh images\/\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;](images\/my-image.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Avoid:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-122\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">!&#91;](<span class=\"hljs-regexp\">\/Users\/<\/span>rajesh\/Desktop\/my-image.png)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-122\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: YAML\/front matter error<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bad:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-123\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp <span class=\"hljs-literal\">true<\/span>\ntheme <span class=\"hljs-keyword\">default<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-123\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Good:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-124\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">theme<\/span>: <span class=\"hljs-keyword\">default<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-124\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: slide separator not working<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use empty lines around:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-125\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Slide 1<\/span>\n\nContent\n\n---\n\n<span class=\"hljs-comment\"># Slide 2<\/span>\n\nContent\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-125\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: PPTX is not editable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Normal Marp PPTX is optimized for visual fidelity, not native PowerPoint editing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Try experimental:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-126\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">deck<\/span><span class=\"hljs-selector-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--pptx<\/span> <span class=\"hljs-selector-tag\">--pptx-editable<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-126\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">But expect lower fidelity and possible errors with complex themes. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Custom theme not loading<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-127\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">marp deck.marp.md --theme-<span class=\"hljs-keyword\">set<\/span> themes\/devopsschool.css\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-127\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check CSS has theme metadata:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-128\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">\/* <span class=\"hljs-doctag\">@theme<\/span> devopsschool *\/<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-128\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then deck:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-129\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nmarp: <span class=\"hljs-literal\">true<\/span>\n<span class=\"hljs-attr\">theme<\/span>: devopsschool\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-129\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: HTML tags not rendering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-130\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">marp<\/span> <span class=\"hljs-selector-tag\">deck<\/span><span class=\"hljs-selector-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">--html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-130\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: Preview not available in Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Correct. Official docs say <code>--preview<\/code> cannot be used with the official Docker image. (<a href=\"https:\/\/github.com\/marp-team\/marp-cli\/blob\/main\/README.md?plain=1\">GitHub<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use local Marp or server mode instead.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">52. Command cheat sheet<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-131\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Version<\/span>\nmarp --version\nnpx @marp-team\/marp-cli --version\n\n<span class=\"hljs-comment\"># Preview<\/span>\nmarp --preview deck.md\nmarp -p deck.md\nnpx @marp-team\/marp-cli --preview deck.md\n\n<span class=\"hljs-comment\"># HTML<\/span>\nmarp deck.md\nmarp deck.md -o output.html\nmarp deck.md --html -o output.html\n\n<span class=\"hljs-comment\"># PDF<\/span>\nmarp deck.md --pdf\nmarp deck.md -o output.pdf\nmarp deck.md --pdf --allow-local-files\nmarp deck.md --pdf --pdf-notes\nmarp deck.md --pdf --pdf-outlines\n\n<span class=\"hljs-comment\"># PPTX<\/span>\nmarp deck.md --pptx\nmarp deck.md -o output.pptx\nmarp deck.md --pptx --allow-local-files\nmarp deck.md --pptx --pptx-editable\n\n<span class=\"hljs-comment\"># Images<\/span>\nmarp deck.md --image png\nmarp deck.md --images png\nmarp deck.md --images jpeg\nmarp deck.md -o title-slide.png\nmarp deck.md -o title-slide@<span class=\"hljs-number\">2<\/span>x.png --image-scale <span class=\"hljs-number\">2<\/span>\n\n<span class=\"hljs-comment\"># Notes<\/span>\nmarp deck.md --notes\nmarp deck.md -o notes.txt\n\n<span class=\"hljs-comment\"># Watch \/ server<\/span>\nmarp --watch deck.md\nmarp -w deck.md\nmarp --server .\/slides\nmarp -s .\/slides\nPORT=<span class=\"hljs-number\">5000<\/span> marp -s .\/slides\n\n<span class=\"hljs-comment\"># Browser<\/span>\nmarp deck.md --pdf --browser chrome\nmarp deck.md --pdf --browser edge\nmarp deck.md --pdf --browser firefox\nmarp deck.md -o slide.png --browser firefox,chrome\n\n<span class=\"hljs-comment\"># Multiple files<\/span>\nmarp deck-a.md deck-b.md\nmarp *.md\nmarp <span class=\"hljs-string\">\"slides\/**\/*.md\"<\/span>\nmarp <span class=\"hljs-string\">\"slides\/**\/*.md\"<\/span> --parallel <span class=\"hljs-number\">2<\/span>\nmarp <span class=\"hljs-string\">\"slides\/**\/*.md\"<\/span> --no-parallel\n\n<span class=\"hljs-comment\"># Input\/output directory<\/span>\nmarp -I slides -o output\n\n<span class=\"hljs-comment\"># Themes<\/span>\nmarp deck.md --theme gaia\nmarp deck.md --theme custom-theme.css\nmarp deck.md --theme-set .\/themes\nmarp --theme-set theme-a.css theme-b.css -- deck-a.md deck-b.md\n\n<span class=\"hljs-comment\"># Metadata<\/span>\nmarp deck.md --title <span class=\"hljs-string\">\"OpenShift Training\"<\/span>\nmarp deck.md --description <span class=\"hljs-string\">\"DevOpsSchool Slides\"<\/span>\nmarp deck.md --author <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nmarp deck.md --keywords <span class=\"hljs-string\">\"openshift,kubernetes,devops\"<\/span>\n\n<span class=\"hljs-comment\"># Local files<\/span>\nmarp deck.md --pdf --allow-local-files\nmarp deck.md --pptx --allow-local-files\nmarp deck.md --images png --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-131\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">53. Best daily workflow for you<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For current testing:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\n\nnpx @marp-team\/marp-cli --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Once it looks good:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">.\/build-marp.sh\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For long-term course production:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-132\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Write .marp.md\nKeep images <span class=\"hljs-keyword\">in<\/span> images\/\nKeep theme <span class=\"hljs-keyword\">in<\/span> themes\/\nPreview <span class=\"hljs-keyword\">with<\/span> Marp\nExport HTML\/PDF\/PPTX\/images\nCommit to Git\nAutomate <span class=\"hljs-keyword\">with<\/span> CI\/CD\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-132\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">54. Final recommendation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use Marp like this:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Marp = quick and clean Markdown-to-PPTX\/PDF slide generator\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For your educator workflow:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-133\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Use Quarto <span class=\"hljs-keyword\">as<\/span> main long-term course publishing system.\nUse Marp <span class=\"hljs-keyword\">for<\/span> quick PPTX\/PDF decks and lightweight slide automation.\nUse PowerPoint only <span class=\"hljs-keyword\">for<\/span> final manual polish when needed.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-133\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Your immediate next command should be:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\nnpx @marp-team\/marp-cli --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then generate the files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-134\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --html --allow-local-files\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pdf --allow-local-files\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pptx --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-134\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Marp is a Markdown presentation ecosystem. Marp CLI converts Marp\/Marpit Markdown files into static HTML\/CSS, PDF, PowerPoint\/PPTX, and images. The official CLI docs also say Node.js v18+&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-77181","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=77181"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77181\/revisions"}],"predecessor-version":[{"id":77182,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77181\/revisions\/77182"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=77181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=77181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=77181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}