{"id":77179,"date":"2026-06-23T09:30:25","date_gmt":"2026-06-23T09:30:25","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=77179"},"modified":"2026-06-23T09:30:27","modified_gmt":"2026-06-23T09:30:27","slug":"complete-practical-quarto-installation-command-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/complete-practical-quarto-installation-command-guide\/","title":{"rendered":"Complete practical Quarto installation + command guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Quarto is an open-source technical publishing system built on Pandoc. It can create documents, websites, blogs, books, and slides, and supports authoring in Markdown-like <code>.qmd<\/code> files. It also supports executable content from Python, R, Julia, and JavaScript through Jupyter, Knitr, and Observable integrations. (<a href=\"https:\/\/github.com\/quarto-dev\/quarto-cli\">GitHub<\/a>) For presentations, Quarto officially supports <code>revealjs<\/code>, <code>pptx<\/code>, and <code>beamer<\/code>; Quarto\u2019s own docs say <code>revealjs<\/code> is the most capable presentation format unless you specifically need Office or LaTeX output. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">1. What you are going to build<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For your course-slide automation system, the model should be:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">course-topic.qmd\n      \u2193\nquarto render \/ quarto preview\n      \u2193\nHTML reveal.js slides\nPDF\nPPTX\nwebsite\nhandouts\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For your current folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\nls\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">You already have:<\/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\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<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-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\">For Quarto, we will mainly work with:<\/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\">Introduction_to_Red_Hat_OpenShift_DevOpsSchool<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">2. Install Quarto on macOS<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Install using Homebrew<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the easiest on your Mac:<\/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 version:<\/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\">Check location:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">which quarto\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Run Quarto health check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto check\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto\u2019s getting-started page directs users to install Quarto first and then choose an authoring tool such as VS Code, Jupyter, RStudio, Positron, Neovim, or a normal text editor. (<a href=\"https:\/\/quarto.org\/docs\/get-started\/\">Quarto<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Install manually<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Download the macOS installer from the official Quarto download page and install it like a normal <code>.pkg<\/code> application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After install:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto --version\nquarto check\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Option C: Install Homebrew first, then Quarto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If Homebrew itself is not installed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\/bin\/bash -c <span class=\"hljs-string\">\"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"<\/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\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install --cask quarto\nquarto --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Homebrew describes itself as a package manager for macOS, Linux, and WSL. (<a href=\"https:\/\/brew.sh\/?utm_source=chatgpt.com\">Homebrew<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">3. Install Quarto on Windows<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Preferred method: use the official Windows installer from Quarto\u2019s download page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After install, open <strong>PowerShell<\/strong> and run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto --version\nquarto check\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Optional Winget method:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">winget<\/span> <span class=\"hljs-selector-tag\">search<\/span> <span class=\"hljs-selector-tag\">Quarto<\/span>\n<span class=\"hljs-selector-tag\">winget<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">Posit<\/span><span class=\"hljs-selector-class\">.Quarto<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then close and reopen PowerShell:<\/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\">If Windows says <code>quarto is not recognized<\/code>, restart the terminal or check whether Quarto\u2019s install directory was added to <code>PATH<\/code>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">4. Install Quarto on Linux<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For Ubuntu\/Debian, use the official <code>.deb<\/code> package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common latest-download style:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">wget https:<span class=\"hljs-comment\">\/\/quarto.org\/download\/latest\/quarto-linux-amd64.deb<\/span>\nsudo apt install .\/quarto-linux-amd64.deb\nquarto --version\nquarto check\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><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\">For Red Hat\/CentOS\/Fedora style systems, use the <code>.rpm<\/code> package from the Quarto download page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quarto also provides Linux tarball installation for single-user setups. (<a href=\"https:\/\/quarto.org\/docs\/download\/tarball.html?utm_source=chatgpt.com\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">5. Install recommended editor support<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">VS Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install VS Code extension:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">code<\/span> <span class=\"hljs-selector-tag\">--install-extension<\/span> <span class=\"hljs-selector-tag\">quarto<\/span><span class=\"hljs-selector-class\">.quarto<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Or open VS Code:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Extensions \u2192 Search \u201cQuarto\u201d \u2192 Install\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then open your folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\ncode .\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recommended VS Code extensions for your workflow:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Quarto\nMarkdown All in One\nYAML\nMermaid Markdown Syntax Highlighting\nGitLens\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">6. First Quarto commands to run<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go to your slides 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\">Check Quarto:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto --version\nquarto check\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview your slide deck:<\/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\">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-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\">Render your slide deck:<\/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\">render<\/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-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render specifically to reveal.js HTML slides:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render to PowerPoint:<\/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\">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-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render to PDF:<\/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\">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-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\">The official CLI docs describe <code>quarto render<\/code> as the command for rendering files or projects to different document types, with options like <code>--to<\/code>, <code>--output<\/code>, <code>--output-dir<\/code>, <code>--metadata<\/code>, <code>--execute<\/code>, and <code>--execute-param<\/code>. (<a href=\"https:\/\/quarto.org\/docs\/cli\/render.html\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">7. Most important Quarto commands<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>quarto --version<\/code><\/td><td>Show installed Quarto version<\/td><\/tr><tr><td><code>quarto check<\/code><\/td><td>Verify Quarto installation<\/td><\/tr><tr><td><code>quarto tools<\/code><\/td><td>Show installed dependencies\/tools<\/td><\/tr><tr><td><code>quarto render file.qmd<\/code><\/td><td>Render one file<\/td><\/tr><tr><td><code>quarto preview file.qmd<\/code><\/td><td>Preview with live reload<\/td><\/tr><tr><td><code>quarto render<\/code><\/td><td>Render current project<\/td><\/tr><tr><td><code>quarto create project<\/code><\/td><td>Create a project<\/td><\/tr><tr><td><code>quarto install tinytex<\/code><\/td><td>Install TinyTeX for LaTeX PDF output<\/td><\/tr><tr><td><code>quarto install chrome-headless-shell<\/code><\/td><td>Install headless browser dependency<\/td><\/tr><tr><td><code>quarto publish<\/code><\/td><td>Publish document\/project<\/td><\/tr><tr><td><code>quarto inspect<\/code><\/td><td>Inspect project\/input configuration<\/td><\/tr><tr><td><code>quarto add<\/code><\/td><td>Add extension<\/td><\/tr><tr><td><code>quarto remove<\/code><\/td><td>Remove extension<\/td><\/tr><tr><td><code>quarto update<\/code><\/td><td>Update extension or dependency<\/td><\/tr><tr><td><code>quarto pandoc<\/code><\/td><td>Run bundled Pandoc<\/td><\/tr><tr><td><code>quarto typst<\/code><\/td><td>Run bundled Typst<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The Quarto CLI reference lists the main commands, including <code>render<\/code>, <code>preview<\/code>, <code>create<\/code>, <code>use<\/code>, <code>add<\/code>, <code>update<\/code>, <code>remove<\/code>, <code>convert<\/code>, <code>pandoc<\/code>, <code>typst<\/code>, <code>run<\/code>, <code>install<\/code>, <code>uninstall<\/code>, <code>tools<\/code>, <code>publish<\/code>, <code>capabilities<\/code>, <code>inspect<\/code>, and <code>check<\/code>. (<a href=\"https:\/\/quarto.org\/docs\/cli\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">8. Create your first simple Quarto slide file<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create a test folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/slides\/<\/span>quarto-test\/images\ncd ~<span class=\"hljs-regexp\">\/slides\/<\/span>quarto-test\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create a file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; openshift-intro.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\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---\n\n<span class=\"hljs-comment\"># Introduction<\/span>\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 experience\n- Integrated CI\/CD\n- Operators\n- Monitoring\n\n---\n\n<span class=\"hljs-comment\">## Example Command<\/span>\n\n```bash\noc get projects\noc get pods -A\noc get routes -A\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><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>OpenShift is built on Kubernetes<\/li>\n\n\n\n<li>It adds enterprise features<\/li>\n\n\n\n<li>It improves developer and operations workflows<br>EOF<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n<span class=\"hljs-attr\">Preview<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nquarto preview openshift-intro.qmd\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">openshift-intro<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\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\">Render to specific formats:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">openshift-intro<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">revealjs<\/span>\n<span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">openshift-intro<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--to<\/span> <span class=\"hljs-selector-tag\">pptx<\/span>\n<span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">openshift-intro<\/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-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<h1 class=\"wp-block-heading\">9. Basic Quarto file structure<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A Quarto file has two major parts:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">YAML front matter\nMarkdown content\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-17\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\ntitle: <span class=\"hljs-string\">\"My Course\"<\/span>\nauthor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nformat: revealjs\n---\n\n<span class=\"hljs-comment\">## Slide 1<\/span>\n\nContent here.\n\n---\n\n<span class=\"hljs-comment\">## Slide 2<\/span>\n\nMore content here.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><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\">The YAML front matter controls:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">title\nauthor\nformat\ntheme\nslide numbers\nlogo\nfooter\nexecution settings\noutput format\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The Markdown content controls:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">headings\nslides\nbullets\ntables\nimages\ncode blocks\nspeaker notes\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">10. How slides are created in Quarto<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For <code>revealjs<\/code>, slides are usually created using headings.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">## Slide One<\/span>\n\nThis is slide one.\n\n<span class=\"hljs-comment\">## Slide Two<\/span>\n\nThis is slide two.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><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\">You can also create section slides with level-1 headings:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Section 1<\/span>\n\n<span class=\"hljs-comment\">## Topic 1<\/span>\n\nContent.\n\n<span class=\"hljs-comment\">## Topic 2<\/span>\n\nContent.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><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\">You can also separate slides using horizontal rules:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">First slide content.\n\n---\n\nSecond slide content.\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto\u2019s reveal.js docs explain that slides are delineated using headings, and horizontal rules can also be used for slides without titles. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">11. Reveal.js slide deck example for educators<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; kubernetes-basics.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\ntitle: <span class=\"hljs-string\">\"Kubernetes Basics\"<\/span>\nsubtitle: <span class=\"hljs-string\">\"Instructor-Led 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: fade\n    incremental: <span class=\"hljs-keyword\">false<\/span>\n---\n\n<span class=\"hljs-comment\"># Kubernetes Basics<\/span>\n\n<span class=\"hljs-comment\">## Learning Objectives<\/span>\n\nBy the end of this session, you will understand:\n\n- What Kubernetes is\n- Why Kubernetes is used\n- Key Kubernetes resources\n- Basic kubectl commands\n\n---\n\n<span class=\"hljs-comment\">## What is Kubernetes?<\/span>\n\nKubernetes is a container orchestration platform.\n\nIt helps automate:\n\n- Deployment\n- Scaling\n- Networking\n- <span class=\"hljs-keyword\">Self<\/span>-healing\n- Rollouts <span class=\"hljs-keyword\">and<\/span> rollbacks\n\n---\n\n<span class=\"hljs-comment\">## Why Kubernetes?<\/span>\n\n:::: {.columns}\n\n::: {.column width=<span class=\"hljs-string\">\"50%\"<\/span>}\n<span class=\"hljs-comment\">### Before Kubernetes<\/span>\n\n- Manual deployments\n- Hard scaling\n- No standard scheduling\n- Complex recovery\n:::\n\n::: {.column width=<span class=\"hljs-string\">\"50%\"<\/span>}\n<span class=\"hljs-comment\">### With Kubernetes<\/span>\n\n- Automated scheduling\n- Declarative deployment\n- <span class=\"hljs-keyword\">Self<\/span>-healing\n- Easy scaling\n:::\n\n::::\n\n---\n\n<span class=\"hljs-comment\">## Common Commands<\/span>\n\n```bash\nkubectl get nodes\nkubectl get pods -A\nkubectl get deployments -A\nkubectl get svc -A\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><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\">This slide is visible to students.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">::: {.notes}<br>Explain that Kubernetes is not just a container runner.<br>It is a platform for managing containerized workloads across a cluster.<br>:::<\/p>\n\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>Kubernetes manages containers<\/li>\n\n\n\n<li>Pods are the smallest deployable unit<\/li>\n\n\n\n<li>Deployments manage application rollout<\/li>\n\n\n\n<li>Services expose applications<br>EOF<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" 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\nquarto preview kubernetes-basics.qmd\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" 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\">kubernetes-basics<\/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-22\"><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 reveal.js supports incremental lists, multiple columns, speaker notes, footers\/logos, line highlighting, executable code, tabsets, and slide backgrounds. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">12. Add images in Quarto slides<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create an images folder:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mkdir -p images\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Put images inside:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">images\/\n\u251c\u2500\u2500 openshift-architecture.png\n\u251c\u2500\u2500 kubernetes-architecture.png\n\u2514\u2500\u2500 devopsschool-logo.png\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use image:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">## OpenShift Architecture<\/span>\n\n!&#91;](images\/openshift-architecture.png)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><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\">Image with alt text:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;OpenShift Architecture Diagram](images\/openshift-architecture.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Image with width:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">!&#91;](images\/openshift-architecture.png){width=<span class=\"hljs-string\">\"80%\"<\/span>}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Image centered:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">::: {.center}\n!&#91;](images\/openshift-architecture.png){width=<span class=\"hljs-string\">\"75%\"<\/span>}\n:::\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><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<h1 class=\"wp-block-heading\">13. Add logo and footer<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this in YAML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\ntitle: <span class=\"hljs-string\">\"OpenShift Training\"<\/span>\n<span class=\"hljs-attr\">format<\/span>:\n  revealjs:\n    theme: simple\n    slide-number: <span class=\"hljs-literal\">true<\/span>\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---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto reveal.js supports <code>logo<\/code> and <code>footer<\/code> options. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">14. Add background images<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">## OpenShift Platform {background-image=\"images\/openshift-bg.png\"}<\/span>\n\n- Enterprise Kubernetes\n- Built-in security\n- Developer experience\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><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\">Background color:<\/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\"><span class=\"hljs-comment\">## Important Concept {background-color=\"#f5f5f5\"}<\/span>\n\nThis slide has a background color.\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<p class=\"wp-block-paragraph\">Title slide background:<\/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\">---\ntitle: <span class=\"hljs-string\">\"OpenShift Training\"<\/span>\n<span class=\"hljs-attr\">format<\/span>:\n  revealjs:\n    theme: simple\ntitle-slide-attributes:\n  data-background-image: images\/title-bg.png\n  data-background-size: cover\n  data-background-opacity: <span class=\"hljs-string\">\"0.5\"<\/span>\n---\n<\/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<p class=\"wp-block-paragraph\">Quarto reveal.js supports background color, gradient, image, video, and iframe backgrounds. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">15. Incremental bullets<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Globally enable incremental bullets:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">---\nformat:\n  revealjs:\n    incremental: <span class=\"hljs-literal\">true<\/span>\n---\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><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\">Only one list incremental:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">::: {.incremental}\n- First point\n- Second point\n- Third point\n:::\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Force non-incremental:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">::: {.nonincremental}\n- Show all at once\n- No step-by-step reveal\n:::\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Pause inside slide:<\/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\"><span class=\"hljs-comment\">## Step-by-step Flow<\/span>\n\nStep <span class=\"hljs-number\">1<\/span>: Developer pushes code.\n\n. . .\n\nStep <span class=\"hljs-number\">2<\/span>: CI pipeline builds image.\n\n. . .\n\nStep <span class=\"hljs-number\">3<\/span>: Kubernetes deploys app.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">16. Two-column layout<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">## Kubernetes vs OpenShift<\/span>\n\n:::: {.columns}\n\n::: {.column width=<span class=\"hljs-string\">\"50%\"<\/span>}\n<span class=\"hljs-comment\">### Kubernetes<\/span>\n\n- Open-source orchestration\n- Flexible\n- Requires integrations\n:::\n\n::: {.column width=<span class=\"hljs-string\">\"50%\"<\/span>}\n<span class=\"hljs-comment\">### OpenShift<\/span>\n\n- Enterprise Kubernetes\n- Built-in tools\n- Opinionated security\n:::\n\n::::\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">17. Tables<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><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<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><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<h1 class=\"wp-block-heading\">18. Code blocks<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Static code block:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nkubectl get pods -A\noc get routes -A\n`<\/span><span class=\"hljs-string\">``<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">YAML code block:<\/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\"><span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\nspec:\n  containers:\n    - name: nginx\n      image: nginx\n`<\/span><span class=\"hljs-string\">``<\/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\">Line numbers:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`{.yaml code-line-numbers=\"1-4\"}\napiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\n`<\/span><span class=\"hljs-string\">``<\/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\">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\">Progressive line highlighting:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`{.yaml code-line-numbers=\"|1|2|3-4\"}\napiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\n`<\/span><span class=\"hljs-string\">``<\/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\">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\">Quarto reveal.js supports line highlighting for code blocks, including progressive highlighting. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">19. Speaker notes<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" 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 Red Hat\u2019s enterprise Kubernetes platform.\n\n::: {.notes}\nExplain that OpenShift is Kubernetes plus enterprise capabilities:\nsecurity, operators, registry, routes, monitoring, <span class=\"hljs-keyword\">and<\/span> developer tools.\n:::\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><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\">Presenter view:<\/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\">Press<\/span> <span class=\"hljs-selector-tag\">S<\/span> <span class=\"hljs-selector-tag\">during<\/span> <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js<\/span> <span class=\"hljs-selector-tag\">presentation<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Basic reveal.js navigation includes arrow keys, space, <code>N<\/code>, <code>P<\/code>, and fullscreen with <code>F<\/code>; Quarto\u2019s presenting docs also describe speaker view, navigation menu, overview mode, printing to PDF, drawing\/chalkboard, and multiplex presentation features. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/revealjs\/presenting.html\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">20. Render command examples<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Render based on YAML format<\/h2>\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\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render to reveal.js<\/h2>\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\">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-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<h2 class=\"wp-block-heading\">Render to HTML document<\/h2>\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\">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\">html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render to PowerPoint<\/h2>\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\">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\">pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render to Word<\/h2>\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\">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\">docx<\/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<h2 class=\"wp-block-heading\">Render to PDF<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render to Beamer PDF slides<\/h2>\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-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\">beamer<\/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<h2 class=\"wp-block-heading\">Render to Typst PDF document<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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\">typst<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render with output name<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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> <span class=\"hljs-selector-tag\">--output<\/span> <span class=\"hljs-selector-tag\">openshift-training<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-48\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Render to output directory<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto render course.qmd --to revealjs --output-dir output\/html\nquarto render course.qmd --to pptx --output-dir output\/pptx\nquarto render course.qmd --to pdf --output-dir output\/pdf\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">21. Preview command examples<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Preview file:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview on specific port:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-50\" 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\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--port<\/span> 7777\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-50\"><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 without opening browser:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--no-browser<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-51\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview without watching input changes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--no-watch-inputs<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-52\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview and bind to all interfaces:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">preview<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--host<\/span> 0<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span> <span class=\"hljs-selector-tag\">--port<\/span> 7777\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview a project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto preview\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The <code>preview<\/code> command renders and previews a document or website project, automatically reloading the browser when input files or resources like CSS change. (<a href=\"https:\/\/quarto.org\/docs\/cli\/preview.html\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">22. Create a Quarto project<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For one-off slides, you can use a single <code>.qmd<\/code> file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For course automation, use a project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create website project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto create project website openshift-course\ncd openshift-course\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create book project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto create project book openshift-book\ncd openshift-book\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create default project interactively:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto create project\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto websites are designed for publishing groups of documents with shared navigation, rendering options, and visual style; they can be published to GitHub Pages, Netlify, Posit Connect, or other static hosting\/intranet options. (<a href=\"https:\/\/quarto.org\/docs\/websites\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">23. Recommended course project structure<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For your training\/course business:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">openshift-course\/\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   \u2514\u2500\u2500 04-lifecycle.qmd\n\u251c\u2500\u2500 notes\/\n\u2502   \u251c\u2500\u2500 01-introduction.qmd\n\u2502   \u2514\u2500\u2500 02-architecture.qmd\n\u251c\u2500\u2500 labs\/\n\u2502   \u251c\u2500\u2500 lab-01-login-cli.qmd\n\u2502   \u2514\u2500\u2500 lab-02-deploy-app.qmd\n\u251c\u2500\u2500 images\/\n\u2502   \u251c\u2500\u2500 devopsschool-logo.png\n\u2502   \u251c\u2500\u2500 openshift-architecture.png\n\u2502   \u2514\u2500\u2500 lifecycle.png\n\u251c\u2500\u2500 css\/\n\u2502   \u2514\u2500\u2500 reveal.scss\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<h1 class=\"wp-block-heading\">24. <code>_quarto.yml<\/code> project config for slides<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create <code>_quarto.yml<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-54\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">project:\n  title: <span class=\"hljs-string\">\"OpenShift Course\"<\/span>\n  output-dir: output\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    code-line-numbers: <span class=\"hljs-literal\">true<\/span>\n\n<span class=\"hljs-attr\">execute<\/span>:\n  freeze: auto\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-54\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then render project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto render\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Preview project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto preview\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">25. Create custom CSS for reveal.js<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/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\">mkdir -p css\ncat &gt; css\/reveal.scss &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">\/*-- scss:defaults --*\/<\/span>\n\n$presentation-heading-color: <span class=\"hljs-comment\">#1f2937;<\/span>\n$presentation-font-size-root: <span class=\"hljs-number\">32<\/span>px;\n\n<span class=\"hljs-comment\">\/*-- scss:rules --*\/<\/span>\n\n.reveal .slide-logo {\n  max-height: <span class=\"hljs-number\">48<\/span>px !important;\n}\n\n.reveal h1,\n.reveal h2 {\n  font-weight: <span class=\"hljs-number\">700<\/span>;\n}\n\n.reveal code {\n  font-size: <span class=\"hljs-number\">0.85<\/span>em;\n}\nEOF\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<p class=\"wp-block-paragraph\">Use in YAML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">format<\/span>:\n  <span class=\"hljs-selector-tag\">revealjs<\/span>:\n    <span class=\"hljs-selector-tag\">theme<\/span>: <span class=\"hljs-selector-attr\">&#91;simple, css\/reveal.scss]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">26. Build script for your current two files<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For your <code>~\/slides<\/code> folder:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-57\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\ncat &gt; build-quarto.sh &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nQMD=<span class=\"hljs-string\">\"Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\"<\/span>\n\nmkdir -p output\/quarto\/html output\/quarto\/pptx output\/quarto\/pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking Quarto...\"<\/span>\nquarto --version\nquarto check\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering reveal.js HTML...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to revealjs --output-dir output\/quarto\/html\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering PowerPoint...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pptx --output-dir output\/quarto\/pptx\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering PDF...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pdf --output-dir output\/quarto\/pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Done.\"<\/span>\nfind output\/quarto -maxdepth <span class=\"hljs-number\">3<\/span> -type f -<span class=\"hljs-keyword\">print<\/span>\nEOF\n\nchmod +x build-quarto.sh\n.\/build-quarto.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-57\"><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<h1 class=\"wp-block-heading\">27. Build script for multiple <code>.qmd<\/code> files<\/h1>\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\">cat &gt; build-all-quarto.sh &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nmkdir -p output\/html output\/pptx output\/pdf\n\n<span class=\"hljs-keyword\">for<\/span> QMD in *.qmd; <span class=\"hljs-keyword\">do<\/span>\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Building $QMD\"<\/span>\n\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"HTML reveal.js...\"<\/span>\n  quarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to revealjs --output-dir output\/html\n\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"PPTX...\"<\/span>\n  quarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pptx --output-dir output\/pptx\n\n  <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"PDF...\"<\/span>\n  quarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pdf --output-dir output\/pdf\ndone\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"All Quarto files built.\"<\/span>\nfind output -type f -<span class=\"hljs-keyword\">print<\/span>\nEOF\n\nchmod +x build-all-quarto.sh\n.\/build-all-quarto.sh\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<h1 class=\"wp-block-heading\">28. Install dependencies for PDF and browser export<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Install TinyTeX for LaTeX-based PDF:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install tinytex\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Install Chrome Headless Shell:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install chrome-headless-shell\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Install Chromium legacy option:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install chromium\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Install VeraPDF for PDF standards\/accessibility validation:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install verapdf\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">List tools:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto tools\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The <code>quarto install<\/code> command installs global dependencies such as TinyTeX, Chromium, Chrome Headless Shell, and VeraPDF. (<a href=\"https:\/\/quarto.org\/docs\/cli\/install.html\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">29. Working with PowerPoint output<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create a PowerPoint output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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\">pptx<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use a custom PowerPoint template:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">format:\n  pptx:\n    reference-doc: templates\/devopsschool-reference.pptx\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-60\" 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\">pptx<\/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\">Recommended PPTX workflow:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-61\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Create clean PPTX reference template\n<span class=\"hljs-keyword\">Use<\/span> <span class=\"hljs-title\">it<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">Quarto<\/span>\n<span class=\"hljs-title\">Generate<\/span> <span class=\"hljs-title\">PPTX<\/span>\n<span class=\"hljs-title\">Open<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">PowerPoint<\/span>\n<span class=\"hljs-title\">Do<\/span> <span class=\"hljs-title\">final<\/span> <span class=\"hljs-title\">polish<\/span> <span class=\"hljs-title\">only<\/span> <span class=\"hljs-title\">if<\/span> <span class=\"hljs-title\">required<\/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\">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<h1 class=\"wp-block-heading\">30. Working with PDF output<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: LaTeX PDF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install TinyTeX:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install tinytex\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">YAML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-62\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">format<\/span>: pdf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-62\"><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\">Render:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-63\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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-63\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Option B: Typst PDF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">YAML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-64\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">format<\/span>: typst\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-64\"><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\">Render:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-65\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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\">typst<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-65\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Option C: reveal.js print-to-PDF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Render reveal.js:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-66\" 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-66\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Open the HTML presentation in browser and use print\/PDF mode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For reveal.js presentations, Quarto docs note that reveal.js slides can be presented as HTML or printed to PDF for easier distribution. (<a href=\"https:\/\/quarto.org\/docs\/presentations\/\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">31. Share HTML slides properly<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When Quarto creates reveal.js slides, output may include supporting files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So instead of sharing only one <code>.html<\/code> file, share the whole output folder unless you configure embedded resources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto render course.qmd --to revealjs --output-dir output\/html\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then share:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">output\/html\/\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For website publishing, publish the full site\/project output.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">32. Create self-contained HTML<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Try this YAML for standalone HTML-style sharing:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-67\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">format:\n  revealjs:\n    embed-resources: <span class=\"hljs-literal\">true<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-67\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-68\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">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-68\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For large courses with images\/videos, I still prefer sharing the full output folder or hosting the slides online.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">33. Publish Quarto project<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Interactive publish:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto publish\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publish a document:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-69\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">publish<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-69\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publish to GitHub Pages:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto publish gh-pages\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publish to Netlify:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto publish netlify\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publish to Quarto Pub:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto publish quarto-pub\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Publish without rendering again:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto publish gh-pages --no-render\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarto publish supports providers including Quarto Pub, GitHub Pages, Posit Connect, Posit Connect Cloud, Netlify, Confluence, and Hugging Face Spaces. (<a href=\"https:\/\/quarto.org\/docs\/cli\/publish.html\">Quarto<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">34. Create a Quarto website for courses<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto create project website devopsschool-slides\ncd devopsschool-slides\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example <code>_quarto.yml<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-70\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">project<\/span>:\n  <span class=\"hljs-selector-tag\">type<\/span>: <span class=\"hljs-selector-tag\">website<\/span>\n  <span class=\"hljs-selector-tag\">output-dir<\/span>: _<span class=\"hljs-selector-tag\">site<\/span>\n\n<span class=\"hljs-selector-tag\">website<\/span>:\n  <span class=\"hljs-selector-tag\">title<\/span>: \"<span class=\"hljs-selector-tag\">DevOpsSchool<\/span> <span class=\"hljs-selector-tag\">Course<\/span> <span class=\"hljs-selector-tag\">Slides<\/span>\"\n  <span class=\"hljs-selector-tag\">navbar<\/span>:\n    <span class=\"hljs-selector-tag\">left<\/span>:\n      <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">href<\/span>: <span class=\"hljs-selector-tag\">index<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n        <span class=\"hljs-selector-tag\">text<\/span>: <span class=\"hljs-selector-tag\">Home<\/span>\n      <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">href<\/span>: <span class=\"hljs-selector-tag\">openshift<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n        <span class=\"hljs-selector-tag\">text<\/span>: <span class=\"hljs-selector-tag\">OpenShift<\/span>\n      <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">href<\/span>: <span class=\"hljs-selector-tag\">kubernetes<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n        <span class=\"hljs-selector-tag\">text<\/span>: <span class=\"hljs-selector-tag\">Kubernetes<\/span>\n      <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">href<\/span>: <span class=\"hljs-selector-tag\">terraform<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\n        <span class=\"hljs-selector-tag\">text<\/span>: <span class=\"hljs-selector-tag\">Terraform<\/span>\n\n<span class=\"hljs-selector-tag\">format<\/span>:\n  <span class=\"hljs-selector-tag\">html<\/span>:\n    <span class=\"hljs-selector-tag\">theme<\/span>: <span class=\"hljs-selector-tag\">cosmo<\/span>\n    <span class=\"hljs-selector-tag\">toc<\/span>: <span class=\"hljs-selector-tag\">true<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-70\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create homepage:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-71\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; index.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\ntitle: <span class=\"hljs-string\">\"DevOpsSchool Course Slides\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Welcome<\/span>\n\nThis site contains automated training slides, notes, <span class=\"hljs-keyword\">and<\/span> course handouts.\n\n<span class=\"hljs-comment\">## Courses<\/span>\n\n- OpenShift\n- Kubernetes\n- Docker\n- Terraform\n- Ansible\nEOF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-71\"><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\">Preview:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto preview\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto render\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">35. Create course notes\/handouts<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cat &gt; openshift-notes.qmd &lt;&lt;'EOF'\n---\ntitle: \"OpenShift Training Notes\"\nauthor: \"Rajesh Kumar\"\nformat:\n  html:\n    toc: true\n  pdf:\n    toc: true\n---\n\n# Introduction\n\nOpenShift is Red Hat's enterprise Kubernetes platform.\n\n# Key Concepts\n\n## Project\n\nA project is OpenShift's enhanced namespace concept.\n\n## Route\n\nA route exposes a service externally.\n\n# Commands\n\n```bash\noc login\noc get projects\noc new-project demo\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">EOF<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-72\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\nRender HTML:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nquarto render openshift-notes.qmd --to html\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-72\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Render PDF:<\/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\">openshift-notes<\/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-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<h1 class=\"wp-block-heading\">36. Use code execution with Python<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Install Jupyter support:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">python3 -m pip install jupyter matplotlib pandas plotly\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-74\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; python-demo.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\ntitle: <span class=\"hljs-string\">\"Python Demo in Quarto\"<\/span>\nformat: html\nexecute:\n  <span class=\"hljs-keyword\">echo<\/span>: <span class=\"hljs-keyword\">true<\/span>\n---\n\n<span class=\"hljs-comment\"># Python Example<\/span>\n\n```{python}\nimport pandas <span class=\"hljs-keyword\">as<\/span> pd\n\ndf = pd.DataFrame({\n    <span class=\"hljs-string\">\"Tool\"<\/span>: &#91;<span class=\"hljs-string\">\"Quarto\"<\/span>, <span class=\"hljs-string\">\"Marp\"<\/span>, <span class=\"hljs-string\">\"PowerPoint\"<\/span>],\n    <span class=\"hljs-string\">\"Automation\"<\/span>: &#91;<span class=\"hljs-string\">\"High\"<\/span>, <span class=\"hljs-string\">\"Medium\"<\/span>, <span class=\"hljs-string\">\"Low\"<\/span>]\n})\n\ndf\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-74\"><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\">EOF<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-75\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n<span class=\"hljs-attr\">Render<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nquarto render python-demo.qmd\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\">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\">Quarto supports embedding code\/output from Python, R, Julia, and JavaScript. (<a href=\"https:\/\/github.com\/quarto-dev\/quarto-cli\">GitHub<\/a>)<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">37. Use code execution options<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In YAML:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-76\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">execute:\n  <span class=\"hljs-keyword\">echo<\/span>: <span class=\"hljs-keyword\">true<\/span>\n  warning: <span class=\"hljs-keyword\">false<\/span>\n  message: <span class=\"hljs-keyword\">false<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-76\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">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\">Per code cell:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-77\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">```{python}\n<span class=\"hljs-comment\">#| echo: true<\/span>\n<span class=\"hljs-comment\">#| warning: false<\/span>\n<span class=\"hljs-comment\">#| message: false<\/span>\n\n<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Hello Quarto\"<\/span>)\n```\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-77\"><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\">Render without executing code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-78\" 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\">python-demo<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--no-execute<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-78\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">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\">Render and execute code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-79\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">render<\/span> <span class=\"hljs-selector-tag\">python-demo<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--execute<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-79\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Pass execution parameter:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-80\" 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\">report<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">-P<\/span> <span class=\"hljs-selector-tag\">environment<\/span><span class=\"hljs-selector-pseudo\">:prod<\/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\">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<h1 class=\"wp-block-heading\">38. Use parameters<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-81\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; param-demo.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\ntitle: <span class=\"hljs-string\">\"Parameterized Course\"<\/span>\nformat: html\nparams:\n  course_name: <span class=\"hljs-string\">\"OpenShift\"<\/span>\n  instructor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Course: `r params$course_name`<\/span>\n\nInstructor: `r params$instructor`\nEOF\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-81\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For Python\/Jupyter style parameter use, parameter workflows depend on engine. For practical slide decks, I usually recommend using YAML variables or template generation from shell\/Python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Render with metadata:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-82\" 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\">param-demo<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">-M<\/span> <span class=\"hljs-selector-tag\">title<\/span><span class=\"hljs-selector-pseudo\">:\"OpenShift<\/span> <span class=\"hljs-selector-tag\">Course<\/span>\"\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-82\"><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<h1 class=\"wp-block-heading\">39. Project profiles<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use profiles for different outputs\/environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example files:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-83\" 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_<span class=\"hljs-selector-tag\">quarto-dev<\/span><span class=\"hljs-selector-class\">.yml<\/span>\n_<span class=\"hljs-selector-tag\">quarto-prod<\/span><span class=\"hljs-selector-class\">.yml<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-83\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">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\">Render with profile:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto render --profile dev\nquarto render --profile prod\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Good for:<\/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\">student version\ninstructor version\nclient version\n<span class=\"hljs-keyword\">public<\/span> version\ninternal version\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<h1 class=\"wp-block-heading\">40. Useful <code>quarto inspect<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Inspect a file:<\/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\">quarto<\/span> <span class=\"hljs-selector-tag\">inspect<\/span> <span class=\"hljs-selector-tag\">course<\/span><span class=\"hljs-selector-class\">.qmd<\/span>\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\">Inspect project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto inspect\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use this when:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">YAML output not behaving\nformat not applied\nproject config not loaded\nwrong output directory\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">41. Useful <code>quarto tools<\/code><\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto tools\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use it to see installed dependencies\/tools.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">42. Useful <code>quarto check<\/code><\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto check\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use it after install or troubleshooting.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">43. Useful <code>quarto pandoc<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Check bundled Pandoc:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto pandoc --version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Convert Markdown using bundled Pandoc:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-86\" 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\">pandoc<\/span> <span class=\"hljs-selector-tag\">input<\/span><span class=\"hljs-selector-class\">.md<\/span> <span class=\"hljs-selector-tag\">-o<\/span> <span class=\"hljs-selector-tag\">output<\/span><span class=\"hljs-selector-class\">.html<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-86\"><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<h1 class=\"wp-block-heading\">44. Useful <code>quarto typst<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Check Typst:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto typst --version\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">45. Extensions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Add extension:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto add extension-name\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Remove extension:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto remove extension-name\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Update extension:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto update extension-name\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">List:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-87\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">quarto <span class=\"hljs-keyword\">list<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-87\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">46. Recommended DevOpsSchool slide template<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-88\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mkdir -p ~<span class=\"hljs-regexp\">\/slides\/<\/span>quarto-template\/images ~<span class=\"hljs-regexp\">\/slides\/<\/span>quarto-template\/css\ncd ~<span class=\"hljs-regexp\">\/slides\/<\/span>quarto-template\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-88\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create CSS:<\/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\">cat &gt; css\/devopsschool.scss &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">\/*-- scss:defaults --*\/<\/span>\n$presentation-heading-color: <span class=\"hljs-comment\">#1f2937;<\/span>\n$presentation-font-size-root: <span class=\"hljs-number\">32<\/span>px;\n\n<span class=\"hljs-comment\">\/*-- scss:rules --*\/<\/span>\n.reveal h1 {\n  font-weight: <span class=\"hljs-number\">800<\/span>;\n}\n\n.reveal h2 {\n  border-bottom: <span class=\"hljs-number\">2<\/span>px solid <span class=\"hljs-comment\">#e5e7eb;<\/span>\n  padding-bottom: <span class=\"hljs-number\">0.2<\/span>em;\n}\n\n.reveal code {\n  font-size: <span class=\"hljs-number\">0.85<\/span>em;\n}\nEOF\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\">Create slide:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-90\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cat &gt; course-template.qmd &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n---\ntitle: <span class=\"hljs-string\">\"Course Title\"<\/span>\nsubtitle: <span class=\"hljs-string\">\"DevOpsSchool Training\"<\/span>\nauthor: <span class=\"hljs-string\">\"Rajesh Kumar\"<\/span>\nformat:\n  revealjs:\n    theme: &#91;simple, css\/devopsschool.scss]\n    slide-number: <span class=\"hljs-keyword\">true<\/span>\n    transition: slide\n    footer: <span class=\"hljs-string\">\"DevOpsSchool\"<\/span>\n---\n\n<span class=\"hljs-comment\"># Course Title<\/span>\n\n<span class=\"hljs-comment\">## Learning Objectives<\/span>\n\n- Understand the topic\n- Learn architecture\n- Practice commands\n- Troubleshoot issues\n\n---\n\n<span class=\"hljs-comment\"># What, Why, Where, When, How<\/span>\n\n<span class=\"hljs-comment\">## What is this?<\/span>\n\nShort definition.\n\n<span class=\"hljs-comment\">## Why is it needed?<\/span>\n\n- Reason <span class=\"hljs-number\">1<\/span>\n- Reason <span class=\"hljs-number\">2<\/span>\n- Reason <span class=\"hljs-number\">3<\/span>\n\n---\n\n<span class=\"hljs-comment\">## Architecture<\/span>\n\n!&#91;](images\/architecture.png){width=<span class=\"hljs-string\">\"80%\"<\/span>}\n\n---\n\n<span class=\"hljs-comment\">## Hands-on Commands<\/span>\n\n```bash\ncommand<span class=\"hljs-number\">-1<\/span>\ncommand<span class=\"hljs-number\">-2<\/span>\ncommand<span class=\"hljs-number\">-3<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-90\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">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\">Troubleshooting<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Issue<\/th><th>Cause<\/th><th>Fix<\/th><\/tr><\/thead><tbody><tr><td>Error 1<\/td><td>Reason<\/td><td>Solution<\/td><\/tr><tr><td>Error 2<\/td><td>Reason<\/td><td>Solution<\/td><\/tr><\/tbody><\/table><\/figure>\n\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>Key point 1<\/li>\n\n\n\n<li>Key point 2<\/li>\n\n\n\n<li>Key point 3<br>EOF<\/li>\n<\/ul>\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\">\n<span class=\"hljs-attr\">Preview<\/span>:\n\n<span class=\"hljs-string\">``<\/span><span class=\"hljs-string\">`bash\nquarto preview course-template.qmd\n<\/span><\/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<h1 class=\"wp-block-heading\">47. Full command cheat sheet<\/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\"><span class=\"hljs-comment\"># Version and health<\/span>\nquarto --version\nquarto check\nquarto tools\n\n<span class=\"hljs-comment\"># Render<\/span>\nquarto render file.qmd\nquarto render file.qmd --to html\nquarto render file.qmd --to revealjs\nquarto render file.qmd --to pptx\nquarto render file.qmd --to pdf\nquarto render file.qmd --to docx\nquarto render file.qmd --output custom-name.html\nquarto render file.qmd --output-dir output\/html\n\n<span class=\"hljs-comment\"># Preview<\/span>\nquarto preview file.qmd\nquarto preview file.qmd --port <span class=\"hljs-number\">7777<\/span>\nquarto preview file.qmd --no-browser\nquarto preview file.qmd --host <span class=\"hljs-number\">0.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.0<\/span>\nquarto preview file.qmd --no-watch-inputs\n\n<span class=\"hljs-comment\"># Project<\/span>\nquarto create project\nquarto create project website mysite\nquarto create project book mybook\nquarto render\nquarto preview\n\n<span class=\"hljs-comment\"># Dependencies<\/span>\nquarto install tinytex\nquarto install chrome-headless-shell\nquarto install chromium\nquarto install verapdf\n\n<span class=\"hljs-comment\"># Publish<\/span>\nquarto publish\nquarto publish gh-pages\nquarto publish netlify\nquarto publish quarto-pub\nquarto publish file.qmd\n\n<span class=\"hljs-comment\"># Debug\/inspect<\/span>\nquarto inspect\nquarto inspect file.qmd\nquarto pandoc --version\nquarto typst --version\n\n<span class=\"hljs-comment\"># Extensions<\/span>\nquarto add extension-name\nquarto remove extension-name\nquarto update extension-name\nquarto <span class=\"hljs-keyword\">list<\/span>\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<h1 class=\"wp-block-heading\">48. Your exact commands now<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run this on your Mac:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-93\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\n\n<span class=\"hljs-comment\"># Install Quarto if not installed<\/span>\nbrew install --cask quarto\n\n<span class=\"hljs-comment\"># Verify<\/span>\nquarto --version\nquarto check\n\n<span class=\"hljs-comment\"># Preview your existing Quarto file<\/span>\nquarto preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n\n<span class=\"hljs-comment\"># Render HTML reveal.js slides<\/span>\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to revealjs\n\n<span class=\"hljs-comment\"># Render PPTX<\/span>\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to pptx\n\n<span class=\"hljs-comment\"># Install PDF dependency if needed<\/span>\nquarto install tinytex\n\n<span class=\"hljs-comment\"># Render PDF<\/span>\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to pdf\n\n<span class=\"hljs-comment\"># Check generated files<\/span>\nls -lh\nfind . -maxdepth <span class=\"hljs-number\">3<\/span> -type f \\( -name <span class=\"hljs-string\">\"*.html\"<\/span> -o -name <span class=\"hljs-string\">\"*.pptx\"<\/span> -o -name <span class=\"hljs-string\">\"*.pdf\"<\/span> \\) -<span class=\"hljs-keyword\">print<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-93\"><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<h1 class=\"wp-block-heading\">49. Best folder structure for your current testing<\/h1>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\n\nmkdir -p images css output\/html output\/pdf output\/pptx templates\n\nls -lh\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recommended:<\/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 images\/\n\u251c\u2500\u2500 css\/\n\u251c\u2500\u2500 templates\/\n\u2514\u2500\u2500 output\/\n    \u251c\u2500\u2500 html\/\n    \u251c\u2500\u2500 pdf\/\n    \u2514\u2500\u2500 pptx\/\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">50. Best build script for your current file<\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-94\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\n\ncat &gt; build.sh &lt;&lt;<span class=\"hljs-string\">'EOF'<\/span>\n<span class=\"hljs-comment\">#!\/usr\/bin\/env bash<\/span>\nset -euo pipefail\n\nQMD=<span class=\"hljs-string\">\"Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\"<\/span>\n\nmkdir -p output\/html output\/pptx output\/pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Quarto version:\"<\/span>\nquarto --version\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering HTML reveal.js...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to revealjs --output-dir output\/html\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering PPTX...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pptx --output-dir output\/pptx\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Rendering PDF...\"<\/span>\nquarto render <span class=\"hljs-string\">\"$QMD\"<\/span> --to pdf --output-dir output\/pdf\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Generated files:\"<\/span>\nfind output -type f -<span class=\"hljs-keyword\">print<\/span>\nEOF\n\nchmod +x build.sh\n.\/build.sh\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-94\"><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<h1 class=\"wp-block-heading\">51. Troubleshooting<\/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\">macOS:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-95\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">which quarto\n<span class=\"hljs-keyword\">echo<\/span> $PATH\nbrew reinstall --cask quarto\nquarto --version\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-95\"><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\">Try a new terminal window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Windows:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-96\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">where<\/span><span class=\"hljs-selector-class\">.exe<\/span> <span class=\"hljs-selector-tag\">quarto<\/span>\n<span class=\"hljs-selector-tag\">quarto<\/span> <span class=\"hljs-selector-tag\">--version<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-96\"><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\">Restart PowerShell after installation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Linux:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">which quarto\nquarto --version\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: PDF fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install TinyTeX:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto install tinytex\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-97\" 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\">file<\/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-97\"><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: reveal.js PDF does not match HTML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use browser print mode from reveal.js HTML, or simplify slide-specific effects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: images do not show<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pwd\nls -lh images\/\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use relative path:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">!&#91;](images\/my-image.png)\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Avoid absolute path:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-98\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">!&#91;](<span class=\"hljs-regexp\">\/Users\/<\/span>rajesh\/Desktop\/my-image.png)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-98\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: YAML error<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">YAML is indentation-sensitive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bad:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">format:\nrevealjs:\ntheme: simple\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Good:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">format:\n  revealjs:\n    theme: simple\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: preview port busy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use another port:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-99\" 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\">file<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--port<\/span> 7777\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-99\"><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: browser does not open<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-100\" 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\">file<\/span><span class=\"hljs-selector-class\">.qmd<\/span> <span class=\"hljs-selector-tag\">--no-browser<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-100\"><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\">Then copy the local preview URL from terminal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problem: PPTX output looks different<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">That is normal. HTML\/reveal.js and PPTX are different formats.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixes:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-101\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">simpler<\/span> <span class=\"hljs-selector-tag\">layouts<\/span>\n<span class=\"hljs-selector-tag\">Avoid<\/span> <span class=\"hljs-selector-tag\">complex<\/span> <span class=\"hljs-selector-tag\">reveal<\/span><span class=\"hljs-selector-class\">.js-only<\/span> <span class=\"hljs-selector-tag\">features<\/span>\n<span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">PowerPoint<\/span> <span class=\"hljs-selector-tag\">reference<\/span> <span class=\"hljs-selector-tag\">template<\/span>\n<span class=\"hljs-selector-tag\">Test<\/span> <span class=\"hljs-selector-tag\">PPTX<\/span> <span class=\"hljs-selector-tag\">early<\/span>\n<span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">standard<\/span> <span class=\"hljs-selector-tag\">fonts<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-101\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Problem: code execution fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check Python\/Jupyter:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">python3 --version\npython3 -m pip install jupyter\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check Quarto:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarto check\n<\/code><\/span><\/pre>\n\n\n<h1 class=\"wp-block-heading\">52. Best practice for educator automation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this rule:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">One source file: .qmd\nLocal images: images\/\nBranding: css\/ and templates\/\nAutomation: build.sh\nOutputs: html\/pdf\/pptx\nVersion control: git\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recommended daily workflow:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-102\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">cd ~\/slides\n\n<span class=\"hljs-comment\"># edit file<\/span>\ncode Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n\n<span class=\"hljs-comment\"># preview while editing<\/span>\nquarto preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n\n<span class=\"hljs-comment\"># build all outputs<\/span>\n.\/build.sh\n\n<span class=\"hljs-comment\"># check output<\/span>\nfind output -type f -<span class=\"hljs-keyword\">print<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-102\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h1 class=\"wp-block-heading\">53. Final recommended command sequence for you<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run this first:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">cd ~\/slides\nbrew install --cask quarto\nquarto --version\nquarto check\nquarto preview Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then generate all outputs:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-103\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">mkdir -p output\/html output\/pptx output\/pdf\n\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to revealjs --output-dir output\/html\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to pptx --output-dir output\/pptx\n\nquarto install tinytex\nquarto render Introduction_to_Red_Hat_OpenShift_DevOpsSchool.qmd --to pdf --output-dir output\/pdf\n\nfind output -type f -<span class=\"hljs-keyword\">print<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-103\"><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 your long-term course automation, use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-104\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Quarto <span class=\"hljs-keyword\">as<\/span> master system\n.qmd <span class=\"hljs-keyword\">as<\/span> source\nreveal.js <span class=\"hljs-keyword\">as<\/span> main slide output\nPDF <span class=\"hljs-keyword\">as<\/span> student handout\nPPTX <span class=\"hljs-keyword\">as<\/span> client\/trainer output\nbuild.sh <span class=\"hljs-keyword\">for<\/span> automation\nGit <span class=\"hljs-keyword\">for<\/span> version control\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-104\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">That is the cleanest Quarto workflow for you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quarto is an open-source technical publishing system built on Pandoc. It can create documents, websites, blogs, books, and slides, and supports authoring in Markdown-like .qmd files. It&#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-77179","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77179","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=77179"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77179\/revisions"}],"predecessor-version":[{"id":77180,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/77179\/revisions\/77180"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=77179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=77179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=77179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}