hebstr-doc : Example Document
Multi-format Quarto extension
1 Typography and headings
This document exercises every capability declared in _extension.yml, so quarto render example.qmd validates the extension in one shot. Only hebstr-doc-html is declared on main; Typst and DOCX outputs land once those formats are validated.
The body font is Luciole (sans-serif, designed for low-vision readers). Inline code() uses Fira Code with programming ligatures.
1.1 Level 2 heading
Headings are numbered down to level 4 (number-depth: 4). The cross-reference title delimiter is a literal dot (e.g. Figure 1.1).
1.1.1 Level 3 heading
Paragraph with emphasis, strong emphasis, a link to the Quarto docs, and an internal reference to Section 3.
1.1.1.1 Level 4 heading
Deepest numbered level.
2 Lists
Unordered:
- First item
- Second item with a nested block:
- Nested bullet one
- Nested bullet two
- Third item
Ordered:
- Initialise the R session
- Load the tidyverse
- Render the document
3 Figure
Figure 1 comes from ggplot2 on the palmerpenguins dataset, with the shared knitr chunk options from _extension.yml (echo: false, message: false, warning: false).
The HTML output wraps figures in lightbox; click the image to enlarge.
4 Table
The chunk below is a simple aggregation rendered as a Markdown table. tbl-cap-location: top puts the caption above the table; tbl-title: "Table" is language-neutral.
library(dplyr)
palmerpenguins::penguins |>
count(species) |>
rename(Sp = species)
#> # A tibble: 3 × 2
#> Sp n
#> <fct> <int>
#> 1 Adelie 152
#> 2 Chinstrap 68
#> 3 Gentoo 1245 Code block
The chunk below sets echo: true (overriding the default) to exercise syntax highlighting, code folding, and the copy-on-hover button (HTML), plus the code.tmTheme TextMate theme that Typst applies via #set raw(theme: …) in template.typ.
Code
library(dplyr)
palmerpenguins::penguins |>
filter(!is.na(body_mass_g)) |>
group_by(species, island) |>
summarise(
n = n(),
mean_mass_g = mean(body_mass_g),
.groups = "drop"
) |>
arrange(desc(mean_mass_g))6 Code window
The blocks below exercise the mcanouil/quarto-code-window filter declared in the YAML front matter. The extension sets style: default (plain filename header, no traffic lights or window chrome; see _extension.yml); with auto-filename: true, blocks without an explicit filename= show the language name as the header label.
6.1 Auto-generated filename (language name)
def greet(name: str) -> str:
return f"Hello, {name}!"penguins |>
dplyr::count(species)quarto add hebstr/quarto-hebstr-doc --no-prompt
quarto render example.qmd7 Injected script
The block below is not an inline chunk. It holds the content of scripts/demo_penguins.R, injected via the script shortcode (in-tree filters/add-code-files.lua). The shortcode reads the file and emits the populated code block with the cell-code class, so Quarto’s code-fold wraps it in a foldable <details> element (collapsed by default); clicking the filename header expands it. filters/add-code-files.js rewrites the <summary> text to the filename (derived from shafayetShafee/add-code-files, MIT).
This is the canonical pattern for hebstr-doc: inline chunks render as code-window, externalised scripts render as foldable script blocks.
7.1 Tabset
Tabs use the .panel-tabset div class; tab-background from theme-light.scss / theme-dark.scss sets the panel fill.
palmerpenguins::penguins |>
dplyr::filter(species == "Adelie") |>
dplyr::select(island, bill_length_mm, flipper_length_mm, body_mass_g) |>
head(5)
#> # A tibble: 5 × 4
#> island bill_length_mm flipper_length_mm body_mass_g
#> <fct> <dbl> <int> <int>
#> 1 Torgersen 39.1 181 3750
#> 2 Torgersen 39.5 186 3800
#> 3 Torgersen 40.3 195 3250
#> 4 Torgersen NA NA NA
#> 5 Torgersen 36.7 193 3450palmerpenguins::penguins |>
dplyr::filter(species == "Chinstrap") |>
dplyr::select(island, bill_length_mm, flipper_length_mm, body_mass_g) |>
head(5)
#> # A tibble: 5 × 4
#> island bill_length_mm flipper_length_mm body_mass_g
#> <fct> <dbl> <int> <int>
#> 1 Dream 46.5 192 3500
#> 2 Dream 50 196 3900
#> 3 Dream 51.3 193 3650
#> 4 Dream 45.4 188 3525
#> 5 Dream 52.7 197 3725palmerpenguins::penguins |>
dplyr::filter(species == "Gentoo") |>
dplyr::select(island, bill_length_mm, flipper_length_mm, body_mass_g) |>
head(5)
#> # A tibble: 5 × 4
#> island bill_length_mm flipper_length_mm body_mass_g
#> <fct> <dbl> <int> <int>
#> 1 Biscoe 46.1 211 4500
#> 2 Biscoe 50 230 5700
#> 3 Biscoe 48.7 210 4450
#> 4 Biscoe 50 218 5700
#> 5 Biscoe 47.6 215 54008 Equation
Inline math: \(y = \beta_0 + \beta_1 x + \varepsilon\).
Display math with a cross-reference target (Equation 1):
\[ \hat{\beta} = (X^\top X)^{-1} X^\top y \tag{1}\]
Textual equations (Equation 2):
\[ \frac {\text{upper text}} {\text{lower text}} \text{ beside text} \tag{2}\]
9 Callouts
Callouts use callout-appearance: simple.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
10 Block quote
A citation.
— author
11 Cross-references
- Section reference: Section 3
- Figure reference: Figure 1
- Equation reference: Equation 1
Session
Code
sessioninfo::session_info(pkgs = "attached")
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.6.0 (2026-04-24)
#> os Ubuntu 24.04.4 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate C.UTF-8
#> ctype C.UTF-8
#> tz UTC
#> date 2026-05-04
#> pandoc 3.1.3 @ /usr/bin/ (via rmarkdown)
#> quarto 1.9.37 @ /usr/local/bin/quarto
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> dplyr * 1.2.1 2026-04-03 [1] any (@1.2.1)
#> ggplot2 * 4.0.3 2026-04-22 [1] any (@4.0.3)
#>
#> [1] /home/runner/work/_temp/Library
#> [2] /opt/R/4.6.0/lib/R/site-library
#> [3] /opt/R/4.6.0/lib/R/library
#> * ── Packages attached to the search path.
#>
#> ──────────────────────────────────────────────────────────────────────────────