bash
quarto use template royfrancis/abstraveAbstrave quarto theme
Roy Francis
05-Sep-2026
The custom template is a Quarto website project with html reports and revealjs presentation.
To download a starter template, run in the terminal:
Install required extensions
bash
# adds fontawesome icons
quarto add --no-prompt quarto-ext/fontawesome
# adds 2 logo header to slides
quarto add --no-prompt royfrancis/quarto-revealjs-header
# adds pointer to slides
quarto add --no-prompt royfrancis/quarto-revealjs-pointer
# adds code output folding
quarto add --no-prompt mcanouil/quarto-collapse-output@1.4.0
# adds collapsible accordion component from bootstrap
quarto add --no-prompt royfrancis/quarto-accordion
# adds leaflet maps
quarto add --no-prompt royfrancis/quarto-leaflet
# adds profile images layout
quarto add --no-prompt royfrancis/quarto-team
# adds toastui schedule component
quarto add --no-prompt royfrancis/quarto-toastuiThis creates a website template that you can modify as needed. The directory structure is as follows:
.
├── 404.md
├── assets/
├── _extensions/
├── home_about.qmd
├── home_contents.qmd
├── home_faq.qmd
├── home_precourse.qmd
├── home_schedule.qmd
├── home_syllabus.qmd
├── index.qmd
├── schedule.csv
├── _metadata.yml
├── _quarto.yml
├── reports/
└── slides/
Quarto allows for live preview of changes.
Preview will build all the files in the project. So, this might not be a good option if there are incomplete documents.
Using freeze is a good way to speed up rendering as chunks are pre-computed and cached. This also allows you to render pages when the original environment/tools is not available.
A quarto document can be rendered from the terminal as follows:
This will generate the output files in the docs/ directory as specified in _quarto.yml. The output format is determined by the YAML front matter of each qmd file. For example, format: html will generate an html file and format: revealjs will generate a revealjs presentation.
Start by updating the settings. The website/project settings are contained in the _quarto.yml file. A website is a quarto project. Projects are documented here and websites are documented here.
output-dir: docssite-url to your intended destinationwebsite: image sets the path to the opengraph seo image used as preview when sharing linksassets/css/styles.scss)toc: true)number-sections: true)code-overflow: wrap)date: last-modified)image:)lightbox: auto)assets/css/slides.scss)incremental: false), override with .fragment class## to define slides (slide-level: 2)chalkboard: true)image:)hero:)title-slide-attributes: data-background-image:)header-logo-*)execute settings
eval: true) and displayed (echo: true) by defaultfreeze is an option available for projects that allow code chunks to be cached to speed up rendering_metadata.yml and use it across the project as {{< meta metadata >}}. This is used for map information._quarto.yml or locally in individual qmd files{{< meta quarto_version >}}) or date/time ({{< meta current_year >}}), enabled through custom lua (assets/custom.lua)quarto-collapse-output extension. This is documented herequarto-accordion extension. Use the shortcode {{< accordion name >}} to include an accordion in any qmd file. Accordions are documented hereleaflet extension. Add map information as metadata in _metadata.yml and use the shortcode {{< leaflet mapname >}} to include the map in any qmd file. Leaflet maps are documented heretoastui extension. Add schedule information as metadata in _metadata.yml and use the shortcode {{< toastui schedule >}} to include the schedule in any qmd file. ToastUI schedule is documented hereq on slides to show the pointer and q again to hide itquarto remove extension-namecss: "styles.css"Now you can start adding content.
The starter template should render completely using quarto alone. You can add R or Python code chunks for example as needed.
##) as the highest level#| eval: false rather than `{r eval=FALSE}`_ such as _content.qmd are child documents and are not rendered alone{{< include _content.qmd >>}}. They do not work in .ipynb notebooks. Includes is documented here._variables.yml and used as {{< var variable >>}}. Dynamic variables are documented here._metadata.yml and used as {{< meta metadata >>}}sessionInfo() or sessioninfo::session_info(). For Python, use import session_info; session_info.show()