{"id":77175,"date":"2026-06-23T09:09:25","date_gmt":"2026-06-23T09:09:25","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=77175"},"modified":"2026-06-23T09:09:27","modified_gmt":"2026-06-23T09:09:27","slug":"quarto-vs-marp-the-complete-educators-guide-to-automated-slide-creation-using-markdown","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/quarto-vs-marp-the-complete-educators-guide-to-automated-slide-creation-using-markdown\/","title":{"rendered":"Quarto vs Marp: The Complete Educator\u2019s Guide to Automated Slide Creation Using Markdown"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Meta Description<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A complete tutorial comparing Quarto and Marp for educators, trainers, DevOps instructors, and course creators. Learn which tool to use for automated slides, PPTX, PDF, reveal.js, HTML, images, speaker notes, templates, and CI\/CD-based slide generation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Target Keywords<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quarto vs Marp<\/li>\n\n\n\n<li>Markdown slides<\/li>\n\n\n\n<li>automated slide creation<\/li>\n\n\n\n<li>Quarto reveal.js tutorial<\/li>\n\n\n\n<li>Marp CLI tutorial<\/li>\n\n\n\n<li>create slides from Markdown<\/li>\n\n\n\n<li>best slide tool for educators<\/li>\n\n\n\n<li>generate PPTX from Markdown<\/li>\n\n\n\n<li>generate PDF slides from Markdown<\/li>\n\n\n\n<li>DevOps course slide automation<\/li>\n\n\n\n<li>reveal.js slides using Quarto<\/li>\n\n\n\n<li>Marp PowerPoint export<\/li>\n\n\n\n<li>Markdown presentation tools<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Quarto vs Marp: Which One Should Educators Use for Automated Slide Creation?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Creating slides manually in PowerPoint works when you are making one presentation. But when you are an educator, trainer, coach, technical instructor, or course creator, PowerPoint quickly becomes painful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You do not create one slide deck.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You create:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>multiple courses<\/li>\n\n\n\n<li>multiple modules<\/li>\n\n\n\n<li>many versions of the same course<\/li>\n\n\n\n<li>PPTX files for clients<\/li>\n\n\n\n<li>PDF handouts for students<\/li>\n\n\n\n<li>HTML slides for online training<\/li>\n\n\n\n<li>code examples<\/li>\n\n\n\n<li>diagrams<\/li>\n\n\n\n<li>labs<\/li>\n\n\n\n<li>speaker notes<\/li>\n\n\n\n<li>reusable templates<\/li>\n\n\n\n<li>branded slides<\/li>\n\n\n\n<li>updates every few months<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">At that point, the real question is not:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Which software can create good-looking slides?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The better question is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Which slide system can help me automate, reuse, publish, version-control, and scale my course content?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">That is where tools like <strong>Quarto<\/strong>, <strong>Marp<\/strong>, and <strong>reveal.js<\/strong> become powerful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this guide, we will deeply compare <strong>Quarto vs Marp<\/strong> and decide which one is best for educators who want to automate slide generation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. The Problem with Traditional PowerPoint-Based Slide Creation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">PowerPoint is excellent for manual design. But it is not ideal as the main source of truth for a large training business.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PowerPoint becomes difficult when you need to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>manage hundreds of slides<\/li>\n\n\n\n<li>reuse content across courses<\/li>\n\n\n\n<li>update old courses quickly<\/li>\n\n\n\n<li>maintain consistent branding<\/li>\n\n\n\n<li>track changes in Git<\/li>\n\n\n\n<li>generate PDF and HTML automatically<\/li>\n\n\n\n<li>convert the same content into slides, notes, docs, and website pages<\/li>\n\n\n\n<li>automate slide generation using scripts or CI\/CD<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">PowerPoint is a good final editing tool, but it is not the best master source for automated education content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For educators, the better strategy is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Write course content in Markdown\nGenerate slides automatically\nExport to HTML, PDF, and PPTX\nKeep everything in Git\nReuse templates and images\nAutomate builds\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is the modern slide creation workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Best Modern Approach for Educators<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The best approach is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Markdown \/ Quarto source file\n        \u2193\nAutomated build tool\n        \u2193\nHTML slides\nPDF handout\nPowerPoint file\nWebsite pages\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Instead of manually designing every slide, you write content in a clean text format and generate outputs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">course-topic<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n        \u2193\n<span class=\"hljs-selector-tag\">Quarto<\/span>\n        \u2193\n<span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span> <span class=\"hljs-selector-tag\">HTML<\/span> <span class=\"hljs-selector-tag\">slides<\/span>\n<span class=\"hljs-selector-tag\">PDF<\/span>\n<span class=\"hljs-selector-tag\">PPTX<\/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\">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-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">course-topic<\/span><span class=\"hljs-selector-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span>\n        \u2193\n<span class=\"hljs-selector-tag\">Marp<\/span> <span class=\"hljs-selector-tag\">CLI<\/span>\n        \u2193\n<span class=\"hljs-selector-tag\">HTML<\/span>\n<span class=\"hljs-selector-tag\">PDF<\/span>\n<span class=\"hljs-selector-tag\">PPTX<\/span>\n<span class=\"hljs-selector-tag\">Images<\/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\">This is much better for automation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. What Is Quarto?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Quarto<\/strong> is a complete technical publishing system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is not only a slide tool.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quarto can create:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>slides<\/li>\n\n\n\n<li>HTML pages<\/li>\n\n\n\n<li>PDFs<\/li>\n\n\n\n<li>Word documents<\/li>\n\n\n\n<li>PowerPoint files<\/li>\n\n\n\n<li>books<\/li>\n\n\n\n<li>blogs<\/li>\n\n\n\n<li>websites<\/li>\n\n\n\n<li>technical tutorials<\/li>\n\n\n\n<li>data reports<\/li>\n\n\n\n<li>documentation<\/li>\n\n\n\n<li>course notes<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Quarto files usually use the extension:<\/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-class\">.qmd<\/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<p class=\"wp-block-paragraph\">A Quarto slide file may look like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\ntitle: <span class=\"hljs-string\">\"Introduction to Red Hat OpenShift\"<\/span>\nsubtitle: <span class=\"hljs-string\">\"DevOpsSchool Training\"<\/span>\nauthor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nformat:\n  revealjs:\n    theme: simple\n    slide-number: <span class=\"hljs-keyword\">true<\/span>\n---\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/span>\n\n---\n\n<span class=\"hljs-comment\">## What is OpenShift?<\/span>\n\nRed Hat OpenShift is an enterprise Kubernetes platform.\n\n---\n\n<span class=\"hljs-comment\">## Why OpenShift?<\/span>\n\n- Enterprise Kubernetes\n- Built-in security\n- Developer-friendly experience\n- CI\/CD support\n- Integrated registry\n- Operators\n- Monitoring\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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\">Quarto is very powerful for educators because the same source file can become:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">HTML slides\nPDF handout\nPowerPoint deck\nCourse documentation\nWebsite page\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\">4. What Is Marp?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Marp<\/strong> is a Markdown-based slide creation ecosystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is focused mainly on this:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Markdown \u2192 Slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A Marp file usually uses:<\/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-class\">.marp<\/span><span class=\"hljs-selector-class\">.md<\/span>\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\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" 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>\nfooter: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/span>\n\n---\n\n<span class=\"hljs-comment\">## What is OpenShift?<\/span>\n\nRed Hat OpenShift is an enterprise Kubernetes platform.\n\n---\n\n<span class=\"hljs-comment\">## Why OpenShift?<\/span>\n\n- Enterprise Kubernetes\n- Security\n- CI\/CD\n- Operators\n- Monitoring\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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 is simple, fast, and very good for creating clean slide decks from Markdown.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its major strength is simplicity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can quickly generate:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">HTML\nPDF\nPPTX\nImages\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\">5. What Is reveal.js?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>reveal.js<\/strong> is a browser-based HTML presentation framework.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It gives you web-style slides with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>browser presentation mode<\/li>\n\n\n\n<li>keyboard navigation<\/li>\n\n\n\n<li>speaker notes<\/li>\n\n\n\n<li>fragments<\/li>\n\n\n\n<li>transitions<\/li>\n\n\n\n<li>animations<\/li>\n\n\n\n<li>nested slides<\/li>\n\n\n\n<li>code highlighting<\/li>\n\n\n\n<li>PDF export<\/li>\n\n\n\n<li>web hosting support<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You can use reveal.js directly, but for educators, the better way is usually:<\/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\">Quarto<\/span> + <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span>\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\">Quarto handles the authoring and automation. reveal.js handles the browser-based slide engine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the recommended stack is:<\/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\">Quarto<\/span> <span class=\"hljs-selector-tag\">source<\/span> <span class=\"hljs-selector-tag\">file<\/span> \u2192 <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span> <span class=\"hljs-selector-tag\">HTML<\/span> <span class=\"hljs-selector-tag\">presentation<\/span>\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Quarto vs Marp in One Sentence<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Quarto = full course publishing platform\nMarp   = simple Markdown slide generator\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">That is the most important difference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you only want quick slides, Marp is excellent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want a long-term automated course system, Quarto is stronger.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Final Recommendation for Educators<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For educators, trainers, and course creators:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Use Quarto <span class=\"hljs-keyword\">as<\/span> your main system.\nUse Marp <span class=\"hljs-keyword\">for<\/span> quick PPTX\/PDF slide decks.\nDo not use PowerPoint <span class=\"hljs-keyword\">as<\/span> the master source.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><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\">Recommended setup:<\/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\">Primary<\/span> <span class=\"hljs-selector-tag\">authoring<\/span> <span class=\"hljs-selector-tag\">format<\/span>: <span class=\"hljs-selector-class\">.qmd<\/span>\n<span class=\"hljs-selector-tag\">Primary<\/span> <span class=\"hljs-selector-tag\">slide<\/span> <span class=\"hljs-selector-tag\">engine<\/span>: <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span> <span class=\"hljs-selector-tag\">through<\/span> <span class=\"hljs-selector-tag\">Quarto<\/span>\n<span class=\"hljs-selector-tag\">Secondary<\/span> <span class=\"hljs-selector-tag\">export<\/span>: <span class=\"hljs-selector-tag\">PPTX<\/span>\n<span class=\"hljs-selector-tag\">Student<\/span> <span class=\"hljs-selector-tag\">handout<\/span>: <span class=\"hljs-selector-tag\">PDF<\/span>\n<span class=\"hljs-selector-tag\">Quick<\/span> <span class=\"hljs-selector-tag\">slide<\/span> <span class=\"hljs-selector-tag\">tool<\/span>: <span class=\"hljs-selector-tag\">Marp<\/span>\n<span class=\"hljs-selector-tag\">Final<\/span> <span class=\"hljs-selector-tag\">manual<\/span> <span class=\"hljs-selector-tag\">polish<\/span>: <span class=\"hljs-selector-tag\">PowerPoint<\/span> <span class=\"hljs-selector-tag\">only<\/span> <span class=\"hljs-selector-tag\">if<\/span> <span class=\"hljs-selector-tag\">required<\/span>\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Quarto vs Marp: Full Comparison Table<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Comparison Point<\/th><th>Quarto<\/th><th>Marp<\/th><th>Best Choice<\/th><\/tr><\/thead><tbody><tr><td>Core purpose<\/td><td>Full publishing system<\/td><td>Markdown slide generator<\/td><td>Quarto<\/td><\/tr><tr><td>Best use case<\/td><td>Courses, websites, docs, slides<\/td><td>Quick slide decks<\/td><td>Depends<\/td><\/tr><tr><td>Main file format<\/td><td><code>.qmd<\/code><\/td><td><code>.marp.md<\/code> \/ <code>.md<\/code><\/td><td>Tie<\/td><\/tr><tr><td>Learning curve<\/td><td>Medium<\/td><td>Easy<\/td><td>Marp<\/td><\/tr><tr><td>First slide creation speed<\/td><td>Good<\/td><td>Very fast<\/td><td>Marp<\/td><\/tr><tr><td>Long-term scalability<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Course automation<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Multi-course management<\/td><td>Strong<\/td><td>Limited<\/td><td>Quarto<\/td><\/tr><tr><td>HTML slides<\/td><td>Excellent via reveal.js<\/td><td>Good static HTML<\/td><td>Quarto<\/td><\/tr><tr><td>reveal.js support<\/td><td>Native<\/td><td>No direct reveal.js export<\/td><td>Quarto<\/td><\/tr><tr><td>PowerPoint export<\/td><td>Good<\/td><td>Very good<\/td><td>Marp<\/td><\/tr><tr><td>PDF export<\/td><td>Good<\/td><td>Very good<\/td><td>Marp<\/td><\/tr><tr><td>Image support<\/td><td>Good<\/td><td>Very simple<\/td><td>Marp<\/td><\/tr><tr><td>Background images<\/td><td>Supported<\/td><td>Very easy<\/td><td>Marp<\/td><\/tr><tr><td>Speaker notes<\/td><td>Excellent<\/td><td>Available<\/td><td>Quarto<\/td><\/tr><tr><td>Live teaching mode<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Interactivity<\/td><td>Strong<\/td><td>Limited<\/td><td>Quarto<\/td><\/tr><tr><td>Animations<\/td><td>Strong with reveal.js<\/td><td>Basic<\/td><td>Quarto<\/td><\/tr><tr><td>Code blocks<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Technical training<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Data\/code execution<\/td><td>Strong<\/td><td>Not designed for it<\/td><td>Quarto<\/td><\/tr><tr><td>Custom themes<\/td><td>Strong<\/td><td>Strong and simple<\/td><td>Tie<\/td><\/tr><tr><td>Branding<\/td><td>Excellent for full platform<\/td><td>Good for slides<\/td><td>Quarto<\/td><\/tr><tr><td>Footer\/logo\/page numbers<\/td><td>Supported<\/td><td>Very easy<\/td><td>Marp<\/td><\/tr><tr><td>Course website<\/td><td>Excellent<\/td><td>Not intended<\/td><td>Quarto<\/td><\/tr><tr><td>Student handouts<\/td><td>Excellent<\/td><td>Basic<\/td><td>Quarto<\/td><\/tr><tr><td>Books\/tutorials<\/td><td>Excellent<\/td><td>Not ideal<\/td><td>Quarto<\/td><\/tr><tr><td>Git\/version control<\/td><td>Excellent<\/td><td>Excellent<\/td><td>Tie<\/td><\/tr><tr><td>CI\/CD automation<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Output images<\/td><td>Possible<\/td><td>Directly supported<\/td><td>Marp<\/td><\/tr><tr><td>Best for client PPTX<\/td><td>Good<\/td><td>Excellent<\/td><td>Marp<\/td><\/tr><tr><td>Best for online course platform<\/td><td>Excellent<\/td><td>Not ideal<\/td><td>Quarto<\/td><\/tr><tr><td>Best for reusable educator content<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Best for simple corporate decks<\/td><td>Good<\/td><td>Excellent<\/td><td>Marp<\/td><\/tr><tr><td>Best as master source<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/td><\/tr><tr><td>Best for 50\u2013100 courses<\/td><td>Excellent<\/td><td>Manageable<\/td><td>Quarto<\/td><\/tr><tr><td>Overall flexibility<\/td><td>Very high<\/td><td>Medium\/high<\/td><td>Quarto<\/td><\/tr><tr><td>Simplicity<\/td><td>Medium<\/td><td>Excellent<\/td><td>Marp<\/td><\/tr><tr><td>Future-proof for training business<\/td><td>Excellent<\/td><td>Good<\/td><td>Quarto<\/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\">9. Decision Table<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Your Requirement<\/th><th>Recommended Tool<\/th><\/tr><\/thead><tbody><tr><td>Serious automated course platform<\/td><td>Quarto<\/td><\/tr><tr><td>Quick PowerPoint slides<\/td><td>Marp<\/td><\/tr><tr><td>Browser-based interactive slides<\/td><td>Quarto<\/td><\/tr><tr><td>PDF\/PPTX from Markdown quickly<\/td><td>Marp<\/td><\/tr><tr><td>DevOpsSchool course library<\/td><td>Quarto<\/td><\/tr><tr><td>Slides + notes + labs + website<\/td><td>Quarto<\/td><\/tr><tr><td>Simple one-file presentation<\/td><td>Marp<\/td><\/tr><tr><td>Long-term educator automation<\/td><td>Quarto<\/td><\/tr><tr><td>Technical course with code<\/td><td>Quarto<\/td><\/tr><tr><td>Corporate training deck<\/td><td>Marp or Quarto<\/td><\/tr><tr><td>Client requires editable PPTX<\/td><td>Marp first<\/td><\/tr><tr><td>Web-based self-paced course<\/td><td>Quarto<\/td><\/tr><tr><td>Course documentation<\/td><td>Quarto<\/td><\/tr><tr><td>Student handouts<\/td><td>Quarto<\/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\">10. Recommended Architecture for Course Automation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The best long-term structure is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">course-name\/\n\u251c\u2500\u2500 _quarto.yml\n\u251c\u2500\u2500 slides\/\n\u2502   \u251c\u2500\u2500 01-introduction.qmd\n\u2502   \u251c\u2500\u2500 02-architecture.qmd\n\u2502   \u251c\u2500\u2500 03-installation.qmd\n\u2502   \u251c\u2500\u2500 04-lifecycle.qmd\n\u2502   \u2514\u2500\u2500 05-best-practices.qmd\n\u251c\u2500\u2500 marp\/\n\u2502   \u2514\u2500\u2500 01-introduction.marp.md\n\u251c\u2500\u2500 images\/\n\u2502   \u251c\u2500\u2500 architecture.png\n\u2502   \u251c\u2500\u2500 workflow.png\n\u2502   \u2514\u2500\u2500 lifecycle.png\n\u251c\u2500\u2500 css\/\n\u2502   \u251c\u2500\u2500 reveal.scss\n\u2502   \u2514\u2500\u2500 marp-theme.css\n\u251c\u2500\u2500 templates\/\n\u2502   \u2514\u2500\u2500 devopsschool-reference.pptx\n\u251c\u2500\u2500 output\/\n\u2502   \u251c\u2500\u2500 html\/\n\u2502   \u251c\u2500\u2500 pdf\/\n\u2502   \u2514\u2500\u2500 pptx\/\n\u2514\u2500\u2500 build.sh\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This structure keeps everything clean:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">source files separate\nimages separate\nthemes separate\noutputs separate\nautomation script separate\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is important when you create many courses.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Best Folder Structure for One Simple Test<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If you are just testing Quarto and Marp with two files, use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">slides\/\n\u251c\u2500\u2500 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n\u251c\u2500\u2500 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n\u251c\u2500\u2500 images\/\n\u2514\u2500\u2500 output\/\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Your current folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">slides\/\n\u251c\u2500\u2500 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n\u2514\u2500\u2500 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is perfect for testing.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. How to Install Quarto on macOS<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Using Homebrew:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask quarto\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check installation:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview a Quarto slide:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <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-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<p class=\"wp-block-paragraph\">Generate reveal.js HTML slides:<\/p>\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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">revealjs<\/span>\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\">Generate PowerPoint:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><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-14\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">pdf<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><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\">13. How to Install Marp CLI on macOS<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">First 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 Node:<\/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-15\" 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-15\"><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 Marp:<\/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 is not found, use <code>npx<\/code>:<\/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-selector-tag\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --version\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\">Preview Marp slides:<\/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 --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\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<p class=\"wp-block-paragraph\">Generate HTML:<\/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 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --html --allow-local-files\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\">Generate PDF:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" 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 --pdf --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><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-20\" 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-20\"><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\">14. Fix: <code>zsh: command not found: marp<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes Marp installs correctly, but the global npm binary path is not added to your shell PATH.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You may see:<\/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 works:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" 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-21\"><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 your shell cannot find the global command.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check npm global prefix:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" 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-22\"><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 output:<\/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<p class=\"wp-block-paragraph\">Check Marp binary:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" 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-23\"><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\">If it exists, add it to PATH:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" 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-24\"><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\">If that still does not work, add the exact path:<\/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\"><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-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<p class=\"wp-block-paragraph\">If needed, create a stable symlink:<\/p>\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\">But practically, you are not blocked. You can always run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" 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 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><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\">15. Sample Quarto Slide File<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/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\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\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\">Content:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\ntitle: <span class=\"hljs-string\">\"Introduction to Red Hat OpenShift\"<\/span>\nsubtitle: <span class=\"hljs-string\">\"DevOpsSchool Training\"<\/span>\nauthor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nformat:\n  revealjs:\n    theme: simple\n    slide-number: <span class=\"hljs-keyword\">true<\/span>\n    transition: slide\n    logo: images\/devopsschool-logo.png\n---\n\n<span class=\"hljs-comment\"># Introduction to Red Hat OpenShift<\/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 platform\n- Built-in developer experience\n- Integrated CI\/CD support\n- Strong security model\n- Operator-based automation\n- Hybrid cloud support\n\n---\n\n<span class=\"hljs-comment\">## Kubernetes vs OpenShift<\/span>\n\n| Area | Kubernetes | OpenShift |\n|---|---|---|\n| Type | Container orchestration | Enterprise Kubernetes platform |\n| Security | Configurable | Strong defaults |\n| Developer tools | External | Built-in |\n| Registry | External | Integrated |\n| Routes | Not native | Built-in |\n\n---\n\n<span class=\"hljs-comment\">## OpenShift Architecture<\/span>\n\n!&#91;](images\/openshift-architecture.png)\n\n---\n\n<span class=\"hljs-comment\">## Example Command<\/span>\n\n```bash\noc get pods -A\noc get projects\noc get routes -A\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><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\">Speaker Notes Example<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenShift is not a replacement for Kubernetes.<br>It is an enterprise platform built on top of Kubernetes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">::: {.notes}<br>Explain that OpenShift adds security, developer experience, operators, registry, routes, monitoring, and enterprise lifecycle management.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n<span class=\"hljs-attr\">Render<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nquarto preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><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\">16. Sample Marp Slide File<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" 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-30\"><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\">Content:<\/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>\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 platform\n- Built-in developer experience\n- Integrated CI\/CD support\n- Strong security model\n- Operator-based automation\n- Hybrid cloud support\n\n---\n\n<span class=\"hljs-comment\"># Kubernetes vs OpenShift<\/span>\n\n| Area | Kubernetes | OpenShift |\n|---|---|---|\n| Type | Container orchestration | Enterprise Kubernetes platform |\n| Security | Configurable | Strong defaults |\n| Developer tools | External | Built-in |\n| Registry | External | Integrated |\n| Routes | Not native | Built-in |\n\n---\n\n<span class=\"hljs-comment\"># OpenShift Architecture<\/span>\n\n!&#91;width:<span class=\"hljs-number\">900<\/span>px](images\/openshift-architecture.png)\n\n---\n\n!&#91;bg right:<span class=\"hljs-number\">45<\/span>%](images\/openshift-logo.png)\n\n<span class=\"hljs-comment\"># OpenShift CLI<\/span>\n\n```bash\noc get pods -A\noc get projects\noc get routes -A\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<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" 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 Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><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 PPTX:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" 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-33\"><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\">17. Can You Embed Images?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Yes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both Quarto and Marp support images.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">course\/\n\u251c\u2500\u2500 course-topic.qmd\n\u251c\u2500\u2500 course-topic.marp.md\n\u2514\u2500\u2500 images\/\n    \u251c\u2500\u2500 architecture.png\n    \u251c\u2500\u2500 lifecycle.png\n    \u2514\u2500\u2500 logo.png\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Quarto image<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Marp image<\/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\">Marp background image<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">!&#91;bg right:<span class=\"hljs-number\">45<\/span>%](images\/openshift-logo.png)\n\n<span class=\"hljs-comment\"># OpenShift Architecture<\/span>\n\nEnterprise Kubernetes platform.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><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\">For courses, use local images instead of remote URLs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bad for long-term course reliability:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">!&#91;](https:<span class=\"hljs-comment\">\/\/example.com\/image.png)<\/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\">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\">Better:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;](images\/image.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Why?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because remote URLs can break. Local images make your course portable and stable.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Quarto Output Commands<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">From your <code>slides<\/code> folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <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-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\">Generate reveal.js HTML:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">revealjs<\/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\">Generate PPTX:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">pptx<\/span>\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\">Generate PDF:<\/p>\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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Marp Output Commands<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">From your <code>slides<\/code> folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview:<\/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\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli --preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\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\">Generate HTML:<\/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\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --html --allow-local-files\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\">Generate PDF:<\/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\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pdf --allow-local-files\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\">Generate PPTX:<\/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\">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-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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. One Automation Script to Build Both Quarto and Marp<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\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\">build<\/span><span class=\"hljs-selector-class\">.sh<\/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\">Content:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nmkdir -p output\/quarto output\/marp\n\nQMD=<span class=\"hljs-string\">\"Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\"<\/span>\nMARP=<span class=\"hljs-string\">\"Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md\"<\/span>\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building Quarto reveal.js HTML...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to revealjs --output-dir output\/quarto\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building Quarto PPTX...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pptx --output-dir output\/quarto\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building Marp HTML...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --html --allow-local-files -o output\/marp\/openshift-marp.html\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building Marp PDF...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --pdf --allow-local-files -o output\/marp\/openshift-marp.pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building Marp PPTX...\"<\/span>\nnpx @marp-team\/marp-cli <span class=\"hljs-string\">\"$MARP\"<\/span> --pptx --allow-local-files -o output\/marp\/openshift-marp.pptx\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Done.\"<\/span>\nls -lh output\/quarto output\/marp\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><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\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">chmod +x build.sh\n.\/build.sh\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This gives you both Quarto and Marp outputs side by side.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Quarto Project Configuration<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For serious course automation, create:<\/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\">quarto<\/span><span class=\"hljs-selector-class\">.yml<\/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\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">project:\n  type: website\n  output-dir: output\/site\n\n<span class=\"hljs-attr\">format<\/span>:\n  revealjs:\n    theme: &#91;simple, css\/reveal.scss]\n    slide-number: <span class=\"hljs-literal\">true<\/span>\n    <span class=\"hljs-attr\">transition<\/span>: slide\n    <span class=\"hljs-attr\">logo<\/span>: images\/devopsschool-logo.png\n    <span class=\"hljs-attr\">footer<\/span>: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n  <span class=\"hljs-attr\">pptx<\/span>:\n    reference-doc: templates\/devopsschool-reference.pptx\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><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\">Now you can standardize:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>logo<\/li>\n\n\n\n<li>footer<\/li>\n\n\n\n<li>slide number<\/li>\n\n\n\n<li>fonts<\/li>\n\n\n\n<li>brand color<\/li>\n\n\n\n<li>theme<\/li>\n\n\n\n<li>PPTX template<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is very useful when you have many courses.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. Marp Front Matter Configuration<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" 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<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-48\"><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\">You can also use custom classes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" 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# OpenShift Training\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><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\">And custom backgrounds:<\/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\">!&#91;bg](images\/title-background.png)\n\n<span class=\"hljs-comment\"># Red Hat OpenShift<\/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<p class=\"wp-block-paragraph\">Marp is excellent for clean, direct visual control.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. Branding Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a training business like DevOpsSchool, branding consistency is very important.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should standardize:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>logo<\/li>\n\n\n\n<li>title slide<\/li>\n\n\n\n<li>section divider slide<\/li>\n\n\n\n<li>footer<\/li>\n\n\n\n<li>slide number<\/li>\n\n\n\n<li>instructor name<\/li>\n\n\n\n<li>website URL<\/li>\n\n\n\n<li>course category<\/li>\n\n\n\n<li>certificate\/training brand identity<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended rule:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" 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\">Quarto<\/span> <span class=\"hljs-title\">theme<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">main<\/span> <span class=\"hljs-title\">course<\/span> <span class=\"hljs-title\">system<\/span>.\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">Marp<\/span> <span class=\"hljs-title\">CSS<\/span> <span class=\"hljs-title\">theme<\/span> <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\">decks<\/span>.\n<span class=\"hljs-title\">Keep<\/span> <span class=\"hljs-title\">images<\/span> <span class=\"hljs-title\">and<\/span> <span class=\"hljs-title\">logos<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">shared<\/span> <span class=\"hljs-title\">assets<\/span> <span class=\"hljs-title\">folder<\/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\">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 shared structure:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">shared-assets\/\n\u251c\u2500\u2500 logos\/\n\u2502   \u251c\u2500\u2500 devopsschool-logo.png\n\u2502   \u2514\u2500\u2500 cotocus-logo.png\n\u251c\u2500\u2500 backgrounds\/\n\u2502   \u251c\u2500\u2500 title-bg.png\n\u2502   \u2514\u2500\u2500 section-bg.png\n\u2514\u2500\u2500 css\/\n    \u251c\u2500\u2500 reveal.scss\n    \u2514\u2500\u2500 marp-theme.css\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\">24. Best Workflow for Educators<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The recommended workflow is:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-number\">1.<\/span> Write course content in Markdown \/ Quarto\n<span class=\"hljs-number\">2.<\/span> Keep images in local folder\n<span class=\"hljs-number\">3.<\/span> <span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">reusable<\/span> <span class=\"hljs-title\">templates<\/span>\n4. <span class=\"hljs-title\">Render<\/span> <span class=\"hljs-title\">slides<\/span> <span class=\"hljs-title\">automatically<\/span>\n5. <span class=\"hljs-title\">Export<\/span> <span class=\"hljs-title\">HTML<\/span>\/<span class=\"hljs-title\">PDF<\/span>\/<span class=\"hljs-title\">PPTX<\/span>\n6. <span class=\"hljs-title\">Store<\/span> <span class=\"hljs-title\">everything<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">Git<\/span>\n7. <span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">CI<\/span>\/<span class=\"hljs-title\">CD<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">automatic<\/span> <span class=\"hljs-title\">publishing<\/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\">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\"><span><code class=\"hljs\">Git push\n   \u2193\nBuild script runs\n   \u2193\nQuarto generates HTML slides\n   \u2193\nQuarto generates PDF\/PPTX\n   \u2193\nMarp generates quick PPTX\/PDF if needed\n   \u2193\nOutput published to website or shared folder\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is how you scale course production.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">25. Recommended CI\/CD Pipeline<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A simple GitHub Actions workflow may look like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">name<\/span>: Build Course Slides\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build-slides:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions\/checkout@v4\n\n      - name: Setup Quarto\n        uses: quarto-dev\/quarto-actions\/setup@v2\n\n      - name: Setup Node\n        uses: actions\/setup-node@v4\n        with:\n          node-version: 22\n\n      - name: Install Marp CLI\n        run: npm install -g @marp-team\/marp-cli\n\n      - name: Build Slides\n        run: |\n          chmod +x build.sh\n          .\/build.sh\n\n      - name: Upload Output\n        uses: actions\/upload-artifact@v4\n        with:\n          name: course-output\n          path: output\/\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This allows you to generate slides automatically every time you update the course.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">26. Best Use Cases for Quarto<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use Quarto when you want:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>long-term course platform<\/li>\n\n\n\n<li>interactive HTML slides<\/li>\n\n\n\n<li>reveal.js output<\/li>\n\n\n\n<li>speaker notes<\/li>\n\n\n\n<li>course website<\/li>\n\n\n\n<li>student handouts<\/li>\n\n\n\n<li>labs<\/li>\n\n\n\n<li>documentation<\/li>\n\n\n\n<li>code-heavy lessons<\/li>\n\n\n\n<li>technical training<\/li>\n\n\n\n<li>Git-based automation<\/li>\n\n\n\n<li>reusable templates<\/li>\n\n\n\n<li>multi-output publishing<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Best examples:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Kubernetes course\nOpenShift course\nTerraform course\nAnsible course\nDocker course\nJenkins course\nGitLab CI\/CD course\nDevOps course\nSRE course\nAIOps course\nMLOps course\nCloudOps course\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto is especially good when your content includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>commands<\/li>\n\n\n\n<li>YAML files<\/li>\n\n\n\n<li>architecture diagrams<\/li>\n\n\n\n<li>labs<\/li>\n\n\n\n<li>code examples<\/li>\n\n\n\n<li>tables<\/li>\n\n\n\n<li>notes<\/li>\n\n\n\n<li>explanations<\/li>\n\n\n\n<li>lifecycle diagrams<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">27. Best Use Cases for Marp<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use Marp when you want:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>quick Markdown slides<\/li>\n\n\n\n<li>fast PDF export<\/li>\n\n\n\n<li>fast PPTX export<\/li>\n\n\n\n<li>simple corporate decks<\/li>\n\n\n\n<li>single-topic training slides<\/li>\n\n\n\n<li>static presentation files<\/li>\n\n\n\n<li>image-heavy slide decks<\/li>\n\n\n\n<li>quick instructor notes<\/li>\n\n\n\n<li>lightweight slide generation<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Best examples:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">30-minute overview deck\nSales\/intro deck\nWorkshop opening slides\nQuick DevOps topic slides\nInterview preparation slides\nClient-specific PPTX\nSimple PDF handout slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Marp is very efficient when you need:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">write markdown quickly \u2192 generate PPTX\/PDF quickly\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\">28. When Not to Use Quarto<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Do not use Quarto if:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>you want the simplest possible slide tool<\/li>\n\n\n\n<li>you only need one small PPTX<\/li>\n\n\n\n<li>you dislike configuration<\/li>\n\n\n\n<li>you do not need HTML\/reveal.js<\/li>\n\n\n\n<li>you do not need documentation or course website output<\/li>\n\n\n\n<li>you want PowerPoint-style manual editing as the main workflow<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In those cases, Marp may be easier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">29. When Not to Use Marp<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Do not use Marp as your main system if:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>you want a full course platform<\/li>\n\n\n\n<li>you need reveal.js slides<\/li>\n\n\n\n<li>you need website + slides + notes<\/li>\n\n\n\n<li>you need advanced interactivity<\/li>\n\n\n\n<li>you need code execution<\/li>\n\n\n\n<li>you need reusable documentation workflows<\/li>\n\n\n\n<li>you want one source to become many content types<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In those cases, Quarto is better.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">30. Common Mistake: Trying to Force Marp into reveal.js<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Marp does not directly export to reveal.js.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is important.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Marp can create HTML slides, but that HTML is Marp\u2019s own slide output, not reveal.js.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So avoid this mental model:<\/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\">Markdown<\/span> \u2192 <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/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<p class=\"wp-block-paragraph\">Instead, use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Quarto \u2192 reveal.js\nMarp \u2192 HTML\/PDF\/PPTX\/images\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Correct decision:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-55\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Need reveal.js? <span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">Quarto<\/span>.\n<span class=\"hljs-title\">Need<\/span> <span class=\"hljs-title\">quick<\/span> <span class=\"hljs-title\">PPTX<\/span>\/<span class=\"hljs-title\">PDF<\/span>? <span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">Marp<\/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\">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\">31. Common Mistake: Using PowerPoint as Master Source<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">PowerPoint is not bad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But it should not be your master source for a large automated course system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Better strategy:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Quarto\/Markdown = master source\nPowerPoint = <span class=\"hljs-keyword\">export<\/span> or final polish\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><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\">Why?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because text files are easier to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>version-control<\/li>\n\n\n\n<li>search<\/li>\n\n\n\n<li>reuse<\/li>\n\n\n\n<li>automate<\/li>\n\n\n\n<li>generate<\/li>\n\n\n\n<li>update<\/li>\n\n\n\n<li>review<\/li>\n\n\n\n<li>maintain<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">PowerPoint is better for final manual design, not large-scale content automation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">32. Practical Testing Plan<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If you have both files:<\/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\">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-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\">Test both.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Generate Quarto Output<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\n\nquarto preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to revealjs\n\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to pptx\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 2: Generate Marp Output<\/h2>\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\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --html --allow-local-files\n\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pdf --allow-local-files\n\nnpx @marp-team\/marp-cli Introduction_to_Red_Hat_OpenShift_DevOpsSchool.marp.md --pptx --allow-local-files\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Step 3: Compare<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ask these questions:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Which HTML looks better?\nWhich PPTX opens better?\nWhich PDF is cleaner?\nWhich source file is easier to edit?\nWhich one handles images better?\nWhich one is better for teaching?\nWhich one is easier to automate?\nWhich one can scale to 100 courses?\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This test will give you a practical answer.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">33. Recommended Standard for DevOpsSchool<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For DevOpsSchool or any technical training platform, I recommend this rule:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-58\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">Default<\/span>: Quarto\nQuick deck: Marp\n<span class=\"hljs-keyword\">Final<\/span> client editing: PowerPoint\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-58\"><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\">More clearly:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Purpose<\/th><th>Tool<\/th><\/tr><\/thead><tbody><tr><td>Master source<\/td><td>Quarto<\/td><\/tr><tr><td>Web slides<\/td><td>Quarto reveal.js<\/td><\/tr><tr><td>PDF handouts<\/td><td>Quarto<\/td><\/tr><tr><td>PPTX export<\/td><td>Quarto or Marp<\/td><\/tr><tr><td>Quick PPTX<\/td><td>Marp<\/td><\/tr><tr><td>Simple static slides<\/td><td>Marp<\/td><\/tr><tr><td>Course website<\/td><td>Quarto<\/td><\/tr><tr><td>Final manual editing<\/td><td>PowerPoint<\/td><\/tr><tr><td>Source control<\/td><td>Git<\/td><\/tr><tr><td>Automation<\/td><td>Shell script \/ CI\/CD<\/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\">34. Suggested Naming Convention<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use consistent file names.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bad:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">slides1.qmd\n<span class=\"hljs-keyword\">final<\/span>-<span class=\"hljs-keyword\">new<\/span>-latest-v2.pptx\ncourse-updated-<span class=\"hljs-keyword\">final<\/span>-<span class=\"hljs-keyword\">final<\/span>.md\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><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\">Good:<\/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\">01<span class=\"hljs-selector-tag\">-introduction-to-openshift<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n02<span class=\"hljs-selector-tag\">-openshift-architecture<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n03<span class=\"hljs-selector-tag\">-openshift-installation<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n04<span class=\"hljs-selector-tag\">-openshift-projects-and-routes<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n05<span class=\"hljs-selector-tag\">-openshift-deployment-lifecycle<\/span><span class=\"hljs-selector-class\">.qmd<\/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\">For Marp:<\/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\">01<span class=\"hljs-selector-tag\">-introduction-to-openshift<\/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-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\">For output:<\/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\">openshift-introduction<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<span class=\"hljs-selector-tag\">openshift-introduction<\/span><span class=\"hljs-selector-class\">.pdf<\/span>\n<span class=\"hljs-selector-tag\">openshift-introduction<\/span><span class=\"hljs-selector-class\">.pptx<\/span>\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">35. Course Content Design Pattern<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For every technical topic, use this slide structure:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-63\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-number\">1.<\/span> Title\n<span class=\"hljs-number\">2.<\/span> What is it?\n<span class=\"hljs-number\">3.<\/span> Why is it needed?\n<span class=\"hljs-number\">4.<\/span> Where is it used?\n<span class=\"hljs-number\">5.<\/span> When should you <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">it<\/span>?\n6. <span class=\"hljs-title\">How<\/span> <span class=\"hljs-title\">does<\/span> <span class=\"hljs-title\">it<\/span> <span class=\"hljs-title\">work<\/span>?\n7. <span class=\"hljs-title\">Architecture<\/span>\n8. <span class=\"hljs-title\">Lifecycle<\/span>\n9. <span class=\"hljs-title\">Hands<\/span>-<span class=\"hljs-title\">on<\/span> <span class=\"hljs-title\">example<\/span>\n10. <span class=\"hljs-title\">Common<\/span> <span class=\"hljs-title\">errors<\/span>\n11. <span class=\"hljs-title\">Troubleshooting<\/span>\n12. <span class=\"hljs-title\">Best<\/span> <span class=\"hljs-title\">practices<\/span>\n13. <span class=\"hljs-title\">Interview<\/span> <span class=\"hljs-title\">questions<\/span>\n14. <span class=\"hljs-title\">Summary<\/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\">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\">This structure is excellent for topics like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kubernetes Pod<\/li>\n\n\n\n<li>Kubernetes Deployment<\/li>\n\n\n\n<li>OpenShift Route<\/li>\n\n\n\n<li>Terraform Module<\/li>\n\n\n\n<li>Ansible Playbook<\/li>\n\n\n\n<li>Docker Image<\/li>\n\n\n\n<li>Jenkins Pipeline<\/li>\n\n\n\n<li>GitLab CI\/CD<\/li>\n\n\n\n<li>Helm Chart<\/li>\n\n\n\n<li>Argo CD Application<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-64\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Kubernetes Pod\n\u251c\u2500\u2500 What is a Pod?\n\u251c\u2500\u2500 Why <span class=\"hljs-keyword\">do<\/span> we need Pod?\n\u251c\u2500\u2500 Where is Pod used?\n\u251c\u2500\u2500 When should we create Pod directly?\n\u251c\u2500\u2500 Pod lifecycle\n\u251c\u2500\u2500 Pod YAML example\n\u251c\u2500\u2500 Pod troubleshooting\n\u251c\u2500\u2500 Pod best practices\n\u2514\u2500\u2500 Pod interview questions\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-64\"><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\">This is the \u201cwhat, why, where, when, how, lifecycle\u201d teaching rule.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">36. Best Slide Strategy for Technical Courses<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For technical education, every slide should not be just bullets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use a mix of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>concept slides<\/li>\n\n\n\n<li>diagram slides<\/li>\n\n\n\n<li>command slides<\/li>\n\n\n\n<li>YAML\/code slides<\/li>\n\n\n\n<li>comparison tables<\/li>\n\n\n\n<li>lifecycle slides<\/li>\n\n\n\n<li>troubleshooting slides<\/li>\n\n\n\n<li>quiz slides<\/li>\n\n\n\n<li>recap slides<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example course module:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Slide 1: Title\nSlide 2: Learning objectives\nSlide 3: What is OpenShift?\nSlide 4: Kubernetes vs OpenShift\nSlide 5: Architecture diagram\nSlide 6: Login using oc CLI\nSlide 7: Projects and namespaces\nSlide 8: Deploy sample app\nSlide 9: Expose app using route\nSlide 10: Troubleshooting route issue\nSlide 11: Best practices\nSlide 12: Summary\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This makes the course practical and memorable.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">37. Recommended Slide Design Rules<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use these rules:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-65\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">One concept per slide\n<span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">diagrams<\/span> <span class=\"hljs-title\">where<\/span> <span class=\"hljs-title\">possible<\/span>\n<span class=\"hljs-title\">Avoid<\/span> <span class=\"hljs-title\">too<\/span> <span class=\"hljs-title\">much<\/span> <span class=\"hljs-title\">text<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">large<\/span> <span class=\"hljs-title\">fonts<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">consistent<\/span> <span class=\"hljs-title\">colors<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">local<\/span> <span class=\"hljs-title\">images<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">speaker<\/span> <span class=\"hljs-title\">notes<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">teaching<\/span> <span class=\"hljs-title\">details<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">code<\/span> <span class=\"hljs-title\">blocks<\/span> <span class=\"hljs-title\">only<\/span> <span class=\"hljs-title\">when<\/span> <span class=\"hljs-title\">necessary<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">tables<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">comparison<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">lifecycle<\/span> <span class=\"hljs-title\">diagrams<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">process<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">summary<\/span> <span class=\"hljs-title\">slides<\/span> <span class=\"hljs-title\">after<\/span> <span class=\"hljs-title\">every<\/span> <span class=\"hljs-title\">major<\/span> <span class=\"hljs-title\">topic<\/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\">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\">Bad slide:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Too many bullets\nToo much text\nNo visual hierarchy\nNo diagram\nNo practical example\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Good slide:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Clear title\nShort explanation\nDiagram\nCommand\/example\nOne takeaway\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\">38. How to Use Images Correctly<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended image folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">images\/\n\u251c\u2500\u2500 openshift-logo.png\n\u251c\u2500\u2500 openshift-architecture.png\n\u251c\u2500\u2500 kubernetes-vs-openshift.png\n\u251c\u2500\u2500 pod-lifecycle.png\n\u2514\u2500\u2500 route-flow.png\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In Quarto:<\/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\">In Marp:<\/p>\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<p class=\"wp-block-paragraph\">In Marp background layout:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-66\" 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\"># Red Hat OpenShift<\/span>\n\nEnterprise Kubernetes platform.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-66\"><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\">Best practice:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-67\" 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\">PNG<\/span>\/<span class=\"hljs-title\">SVG<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">diagrams<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">JPG<\/span>\/<span class=\"hljs-title\">WebP<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">photos<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">local<\/span> <span class=\"hljs-title\">images<\/span>\n<span class=\"hljs-title\">Compress<\/span> <span class=\"hljs-title\">large<\/span> <span class=\"hljs-title\">images<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">consistent<\/span> <span class=\"hljs-title\">aspect<\/span> <span class=\"hljs-title\">ratio<\/span>\n<span class=\"hljs-title\">Avoid<\/span> <span class=\"hljs-title\">copyrighted<\/span> <span class=\"hljs-title\">images<\/span> <span class=\"hljs-title\">without<\/span> <span class=\"hljs-title\">permission<\/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\">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\">39. How to Handle Diagrams<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For diagrams, you can use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PNG exports from diagram tools<\/li>\n\n\n\n<li>SVG diagrams<\/li>\n\n\n\n<li>Mermaid diagrams<\/li>\n\n\n\n<li>Draw.io diagrams exported as PNG\/SVG<\/li>\n\n\n\n<li>Excalidraw diagrams<\/li>\n\n\n\n<li>architecture icons<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For automation, the safest method is:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-68\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Create diagram \u2192 <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">as<\/span> PNG\/SVG \u2192 include <span class=\"hljs-keyword\">in<\/span> slides\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-68\"><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\">This works reliably in both Quarto and Marp.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">40. Speaker Notes Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Speaker notes are very important for trainers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use notes for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>what to explain verbally<\/li>\n\n\n\n<li>examples to say live<\/li>\n\n\n\n<li>common student confusion<\/li>\n\n\n\n<li>troubleshooting tips<\/li>\n\n\n\n<li>real-world stories<\/li>\n\n\n\n<li>interview points<\/li>\n\n\n\n<li>transition notes<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In Quarto:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-69\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">## What is OpenShift?<\/span>\n\nOpenShift is an enterprise Kubernetes platform.\n\n::: {.notes}\nExplain that OpenShift is Kubernetes plus enterprise features such <span class=\"hljs-keyword\">as<\/span> routes, operators, security, registry, monitoring, <span class=\"hljs-keyword\">and<\/span> developer tools.\n:::\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-69\"><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\">Speaker notes let you keep the slide clean while retaining teaching depth.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">41. PPTX Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Many clients still ask for PowerPoint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So your automation system should support PPTX.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended approach:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-70\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Create master in Quarto\nExport PPTX when needed\n<span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">Marp<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">quick<\/span> <span class=\"hljs-title\">PPTX<\/span>-<span class=\"hljs-title\">heavy<\/span> <span class=\"hljs-title\">decks<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">PowerPoint<\/span> <span class=\"hljs-title\">only<\/span> <span class=\"hljs-title\">for<\/span> <span class=\"hljs-title\">final<\/span> <span class=\"hljs-title\">client<\/span>-<span class=\"hljs-title\">specific<\/span> <span class=\"hljs-title\">polish<\/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\">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\">PowerPoint should be treated as an output, not the source.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">42. PDF Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">PDF is best for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>student handouts<\/li>\n\n\n\n<li>offline sharing<\/li>\n\n\n\n<li>printable training material<\/li>\n\n\n\n<li>course download<\/li>\n\n\n\n<li>LMS upload<\/li>\n\n\n\n<li>email attachments<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">pdf<\/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\">or:<\/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\">npx<\/span> <span class=\"hljs-keyword\">@marp-team<\/span>\/marp-cli course.marp.md --pdf --allow-local-files\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\">For handout-style documents, Quarto is better.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For slide-style PDFs, both are good.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">43. HTML Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">HTML is best for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>web-based course slides<\/li>\n\n\n\n<li>online teaching<\/li>\n\n\n\n<li>self-paced learning<\/li>\n\n\n\n<li>hosting on your website<\/li>\n\n\n\n<li>sharing links<\/li>\n\n\n\n<li>mobile\/tablet access<\/li>\n\n\n\n<li>interactive presentations<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For HTML, use Quarto reveal.js:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">revealjs<\/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\">This is one of the strongest reasons to choose Quarto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">44. Recommended Tool Stack<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a professional educator automation system:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-74\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Authoring: Quarto\nSlide engine: reveal.js\nQuick slide <span class=\"hljs-keyword\">export<\/span>: Marp\nVersion control: Git\n<span class=\"hljs-attr\">Automation<\/span>: Shell script\nCI\/CD: GitHub Actions \/ GitLab CI\n<span class=\"hljs-attr\">Images<\/span>: local images folder\n<span class=\"hljs-attr\">Diagrams<\/span>: Draw.io \/ Excalidraw \/ Mermaid exported to PNG\/SVG\nFinal editing: PowerPoint only when needed\n<span class=\"hljs-attr\">Hosting<\/span>: GitHub Pages \/ Netlify \/ Cloudflare Pages \/ own website\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-74\"><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\">45. Best Practical Setup for Rajesh \/ DevOpsSchool<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">DevOpsSchool Courses Repository\n\u251c\u2500\u2500 kubernetes\/\n\u251c\u2500\u2500 openshift\/\n\u251c\u2500\u2500 docker\/\n\u251c\u2500\u2500 terraform\/\n\u251c\u2500\u2500 ansible\/\n\u251c\u2500\u2500 jenkins\/\n\u251c\u2500\u2500 gitlab-ci\/\n\u251c\u2500\u2500 sre\/\n\u251c\u2500\u2500 devops\/\n\u251c\u2500\u2500 aiops\/\n\u2514\u2500\u2500 shared-assets\/\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Each course:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">openshift\/\n\u251c\u2500\u2500 _quarto.yml\n\u251c\u2500\u2500 slides\/\n\u251c\u2500\u2500 labs\/\n\u251c\u2500\u2500 notes\/\n\u251c\u2500\u2500 images\/\n\u251c\u2500\u2500 output\/\n\u2514\u2500\u2500 build.sh\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This setup can scale to hundreds of courses.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">46. Example Build Script for Multiple Courses<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-75\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nCOURSES=(<span class=\"hljs-string\">\"openshift\"<\/span> <span class=\"hljs-string\">\"kubernetes\"<\/span> <span class=\"hljs-string\">\"docker\"<\/span> <span class=\"hljs-string\">\"terraform\"<\/span>)\n\n<span class=\"hljs-keyword\">for<\/span> COURSE in <span class=\"hljs-string\">\"${COURSES&#91;@]}\"<\/span>; <span class=\"hljs-keyword\">do<\/span>\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building course: $COURSE\"<\/span>\n\n  cd <span class=\"hljs-string\">\"$COURSE\"<\/span>\n\n  mkdir -p output\/html output\/pptx output\/pdf\n\n  <span class=\"hljs-keyword\">for<\/span> FILE in slides<span class=\"hljs-comment\">\/*.qmd; do\n    echo \"Rendering $FILE to reveal.js\"\n    quarto render \"$FILE\" --to revealjs --output-dir output\/html\n\n    echo \"Rendering $FILE to PowerPoint\"\n    quarto render \"$FILE\" --to pptx --output-dir output\/pptx\n  done\n\n  cd ..\ndone\n\necho \"All courses built successfully.\"\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-75\"><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. Recommended Course Lifecycle<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this lifecycle:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Plan topic\n   \u2193\nCreate outline\n   \u2193\nWrite .qmd source\n   \u2193\nAdd images and diagrams\n   \u2193\nAdd code examples\n   \u2193\nAdd speaker notes\n   \u2193\nRender HTML\/PDF\/PPTX\n   \u2193\nReview\n   \u2193\nPublish\n   \u2193\nUpdate version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is much better than editing PowerPoint repeatedly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">48. Version Control Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use Git branches:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">main\ndevelop\ncourse\/openshift-update\ncourse\/kubernetes-v2\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use commits like:<\/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\">Add OpenShift architecture slides\nUpdate Kubernetes pod lifecycle diagram\nFix Terraform <span class=\"hljs-built_in\">module<\/span> examples\nAdd speaker notes <span class=\"hljs-keyword\">for<\/span> Jenkins pipeline\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\">This makes your course development professional.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">49. Course Versioning Strategy<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use version numbers:<\/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\">OpenShift<\/span> <span class=\"hljs-selector-tag\">Course<\/span> <span class=\"hljs-selector-tag\">v1<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<span class=\"hljs-selector-tag\">OpenShift<\/span> <span class=\"hljs-selector-tag\">Course<\/span> <span class=\"hljs-selector-tag\">v1<\/span><span class=\"hljs-selector-class\">.1<\/span>\n<span class=\"hljs-selector-tag\">OpenShift<\/span> <span class=\"hljs-selector-tag\">Course<\/span> <span class=\"hljs-selector-tag\">v2<\/span><span class=\"hljs-selector-class\">.0<\/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:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-78\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\ntitle: <span class=\"hljs-string\">\"Introduction to Red Hat OpenShift\"<\/span>\n<span class=\"hljs-attr\">subtitle<\/span>: <span class=\"hljs-string\">\"DevOpsSchool Training\"<\/span>\n<span class=\"hljs-attr\">author<\/span>: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\n<span class=\"hljs-attr\">date<\/span>: <span class=\"hljs-string\">\"2026-06-23\"<\/span>\n<span class=\"hljs-attr\">version<\/span>: <span class=\"hljs-string\">\"1.0\"<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-78\"><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\">This helps when courses are updated over time.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">50. Best Practice: Create Reusable Templates<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create reusable templates for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>title slide<\/li>\n\n\n\n<li>agenda slide<\/li>\n\n\n\n<li>section divider<\/li>\n\n\n\n<li>architecture slide<\/li>\n\n\n\n<li>comparison slide<\/li>\n\n\n\n<li>lifecycle slide<\/li>\n\n\n\n<li>command slide<\/li>\n\n\n\n<li>YAML slide<\/li>\n\n\n\n<li>quiz slide<\/li>\n\n\n\n<li>summary slide<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example template pattern:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">templates\/\n\u251c\u2500\u2500 title-slide.qmd\n\u251c\u2500\u2500 agenda-slide.qmd\n\u251c\u2500\u2500 comparison-slide.qmd\n\u251c\u2500\u2500 lifecycle-slide.qmd\n\u251c\u2500\u2500 command-slide.qmd\n\u2514\u2500\u2500 summary-slide.qmd\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This makes slide creation much faster.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">51. Example Course Slide Template<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-79\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\ntitle: <span class=\"hljs-string\">\"{{COURSE_TITLE}}\"<\/span>\nsubtitle: <span class=\"hljs-string\">\"{{COURSE_SUBTITLE}}\"<\/span>\nauthor: <span class=\"hljs-string\">\"{{INSTRUCTOR_NAME}}\"<\/span>\nformat:\n  revealjs:\n    theme: simple\n    slide-number: <span class=\"hljs-keyword\">true<\/span>\n---\n\n<span class=\"hljs-comment\"># {{COURSE_TITLE}}<\/span>\n\n<span class=\"hljs-comment\">## {{COURSE_SUBTITLE}}<\/span>\n\n---\n\n<span class=\"hljs-comment\">## Learning Objectives<\/span>\n\nBy the end of this module, you will understand:\n\n- {{OBJECTIVE_1}}\n- {{OBJECTIVE_2}}\n- {{OBJECTIVE_3}}\n\n---\n\n<span class=\"hljs-comment\">## What is {{TOPIC}}?<\/span>\n\n{{SHORT_DEFINITION}}\n\n---\n\n<span class=\"hljs-comment\">## Why {{TOPIC}} is Needed?<\/span>\n\n- {{POINT_1}}\n- {{POINT_2}}\n- {{POINT_3}}\n\n---\n\n<span class=\"hljs-comment\">## How {{TOPIC}} Works<\/span>\n\n!&#91;](images\/{{TOPIC_IMAGE}})\n\n---\n\n<span class=\"hljs-comment\">## Example<\/span>\n\n```bash\n{{COMMAND_EXAMPLE}}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-79\"><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\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>{{SUMMARY_1}}<\/li>\n\n\n\n<li>{{SUMMARY_2}}<\/li>\n\n\n\n<li>{{SUMMARY_3}}<\/li>\n<\/ul>\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\">\n---\n\n<span class=\"hljs-comment\"># 52. AI-Assisted Slide Creation Workflow<\/span>\n\nSince educators now <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">AI<\/span> <span class=\"hljs-title\">heavily<\/span>, <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">best<\/span> <span class=\"hljs-title\">workflow<\/span> <span class=\"hljs-title\">is<\/span>:\n\n```<span class=\"hljs-title\">text<\/span>\n<span class=\"hljs-title\">Ask<\/span> <span class=\"hljs-title\">AI<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">create<\/span> <span class=\"hljs-title\">outline<\/span>\n<span class=\"hljs-title\">Review<\/span> <span class=\"hljs-title\">outline<\/span>\n<span class=\"hljs-title\">Ask<\/span> <span class=\"hljs-title\">AI<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">create<\/span> .<span class=\"hljs-title\">qmd<\/span> <span class=\"hljs-title\">slides<\/span>\n<span class=\"hljs-title\">Add<\/span> <span class=\"hljs-title\">diagrams<\/span>\/<span class=\"hljs-title\">images<\/span>\n<span class=\"hljs-title\">Review<\/span> <span class=\"hljs-title\">technical<\/span> <span class=\"hljs-title\">accuracy<\/span>\n<span class=\"hljs-title\">Render<\/span> <span class=\"hljs-title\">slides<\/span>\n<span class=\"hljs-title\">Manually<\/span> <span class=\"hljs-title\">improve<\/span> <span class=\"hljs-title\">examples<\/span>\n<span class=\"hljs-title\">Publish<\/span>\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<p class=\"wp-block-paragraph\">Prompt example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-81\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">Quarto<\/span> <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span> <span class=\"hljs-selector-tag\">slide<\/span> <span class=\"hljs-selector-tag\">deck<\/span> <span class=\"hljs-selector-tag\">on<\/span> <span class=\"hljs-selector-tag\">Kubernetes<\/span> <span class=\"hljs-selector-tag\">Pod<\/span>.\n<span class=\"hljs-selector-tag\">Include<\/span> <span class=\"hljs-selector-tag\">what<\/span>, <span class=\"hljs-selector-tag\">why<\/span>, <span class=\"hljs-selector-tag\">where<\/span>, <span class=\"hljs-selector-tag\">when<\/span>, <span class=\"hljs-selector-tag\">how<\/span>, <span class=\"hljs-selector-tag\">lifecycle<\/span>, <span class=\"hljs-selector-tag\">YAML<\/span> <span class=\"hljs-selector-tag\">example<\/span>, <span class=\"hljs-selector-tag\">troubleshooting<\/span>, <span class=\"hljs-selector-tag\">best<\/span> <span class=\"hljs-selector-tag\">practices<\/span>, <span class=\"hljs-selector-tag\">and<\/span> <span class=\"hljs-selector-tag\">interview<\/span> <span class=\"hljs-selector-tag\">questions<\/span>.\n<span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">educator-friendly<\/span> <span class=\"hljs-selector-tag\">language<\/span>.\n<span class=\"hljs-selector-tag\">Output<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">format<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-81\"><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\">This can speed up slide creation massively.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">53. Quality Checklist Before Publishing<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Before publishing any generated slide deck, check:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-82\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Does the first slide clearly define the topic?\nIs there an agenda?\nAre learning objectives clear?\nIs every concept explained <span class=\"hljs-keyword\">with<\/span> examples?\nAre diagrams readable?\nAre commands tested?\nAre YAML examples valid?\nAre images local?\nAre speaker notes useful?\nDoes PDF <span class=\"hljs-keyword\">export<\/span> work?\nDoes PPTX <span class=\"hljs-keyword\">export<\/span> open correctly?\nDoes HTML slide navigation work?\nIs branding consistent?\nAre file names clean?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-82\"><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\">This checklist prevents low-quality course output.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">54. Troubleshooting Quarto<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: <code>quarto: command not found<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fix:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask quarto\nquarto --version\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: Image not showing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-83\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Is the image path correct?\nIs image inside images\/ folder?\nAre you running command <span class=\"hljs-keyword\">from<\/span> correct folder?\nIs the filename <span class=\"hljs-keyword\">case<\/span>-sensitive?\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-83\"><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\">!&#91;](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: PPTX output looks different<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PPTX output may not match HTML perfectly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fix:<\/p>\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\"><span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">custom<\/span> <span class=\"hljs-title\">PowerPoint<\/span> <span class=\"hljs-title\">reference<\/span> <span class=\"hljs-title\">template<\/span>\n<span class=\"hljs-title\">Simplify<\/span> <span class=\"hljs-title\">slide<\/span> <span class=\"hljs-title\">layout<\/span>\n<span class=\"hljs-title\">Avoid<\/span> <span class=\"hljs-title\">complex<\/span> <span class=\"hljs-title\">web<\/span>-<span class=\"hljs-title\">only<\/span> <span class=\"hljs-title\">effects<\/span>\n<span class=\"hljs-title\">Use<\/span> <span class=\"hljs-title\">standard<\/span> <span class=\"hljs-title\">fonts<\/span>\n<span class=\"hljs-title\">Test<\/span> <span class=\"hljs-title\">PPTX<\/span> <span class=\"hljs-title\">early<\/span>\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\">Problem: PDF generation fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check whether your environment supports required PDF engine\/browser setup.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">55. Troubleshooting Marp<\/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-85\" 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-85\"><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-86\" 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-86\"><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\">Problem: PDF\/PPTX export fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install Chromium dependency:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">npx playwright install chromium\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then rerun:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-87\" 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 course.marp.md --pdf --allow-local-files\nnpx @marp-team\/marp-cli course.marp.md --pptx --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-87\"><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\">Problem: Local images not loading<\/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-88\" 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 course.marp.md --pdf --allow-local-files\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-88\"><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\">Problem: Image path wrong<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">images\/file-name.png\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">not:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\/Users\/rajesh\/Desktop\/file-name.png\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Relative paths are better.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">56. Recommended Rule for Choosing Quarto or Marp<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this simple rule:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-89\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">If<\/span> the content is part of a course library, <span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Quarto<\/span>.\n<span class=\"hljs-title\">If<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">content<\/span> <span class=\"hljs-title\">is<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">quick<\/span> <span class=\"hljs-title\">standalone<\/span> <span class=\"hljs-title\">deck<\/span>, <span class=\"hljs-title\">use<\/span> <span class=\"hljs-title\">Marp<\/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\">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\">Another rule:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-90\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Need reveal.js or course website? Quarto.\nNeed quick PPTX\/PDF? Marp.\nNeed both? Use Quarto <span class=\"hljs-keyword\">as<\/span> master and Marp <span class=\"hljs-keyword\">for<\/span> special quick decks.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-90\"><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\">57. Final Verdict<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For an educator who wants automation, reusability, web publishing, PDF handouts, and long-term course management:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Quarto is the best primary choice.\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For someone who wants simple Markdown-to-PPTX\/PDF slides quickly:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Marp is excellent.\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For a serious training business:<\/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\">Use Quarto <span class=\"hljs-keyword\">as<\/span> the main system.\nUse Marp <span class=\"hljs-keyword\">as<\/span> a supporting tool.\nUse PowerPoint only <span class=\"hljs-keyword\">for<\/span> final manual editing.\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">58. Final Recommended Architecture<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-92\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Master source: Quarto .qmd\nSlide engine: reveal.js\nQuick deck tool: Marp\nOutput formats: HTML, PDF, PPTX\nImage storage: local images folder\nAutomation: build.sh\nVersion control: Git\nPublishing: CI\/CD\n<span class=\"hljs-keyword\">Final<\/span> editing: PowerPoint only when required\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-92\"><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\">This gives you the best balance of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>automation<\/li>\n\n\n\n<li>professional output<\/li>\n\n\n\n<li>scalability<\/li>\n\n\n\n<li>course reuse<\/li>\n\n\n\n<li>technical teaching support<\/li>\n\n\n\n<li>client compatibility<\/li>\n\n\n\n<li>future-proof publishing<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">59. Final One-Line Answer<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">If you are an educator and want to automate slide creation seriously:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-93\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Go <span class=\"hljs-keyword\">with<\/span> Quarto <span class=\"hljs-keyword\">as<\/span> your main platform, and keep Marp <span class=\"hljs-keyword\">as<\/span> a fast secondary tool <span class=\"hljs-keyword\">for<\/span> simple PPTX\/PDF slide decks.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-93\"><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\">That is the best long-term decision.<br>:::<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meta Description A complete tutorial comparing Quarto and Marp for educators, trainers, DevOps instructors, and course creators. Learn which tool to use for automated slides, PPTX, PDF,&#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-77175","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77175","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=77175"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77175\/revisions"}],"predecessor-version":[{"id":77176,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77175\/revisions\/77176"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=77175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=77175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=77175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}