Quarto

Le mot de la fin

today

Hello Quarto

share • collaborate • teach • reimagine
(un Notebook pour les gouverner tous)

Aurélie Mercadié
Christophe Regouby

camembr.quarto.pub/hello-quarto

artwork by allison horst

Penguin with nametag that says "Aurélie"

Penguin with nametag that says "Christophe"



Une
his-
toire
du
Notebook

Une définition

Une définition


Le Notebook, c’est la rencontre entre


  • l’exécution du code
  • la narration
    • l’intention
    • l’approche
    • les résultats

Quelques exemples

Quelques exemples

Quelques exemples

::: :::

Quelques exemples

Les publications

Les packages

Les packages

Hex logos for various packages from the R Markdown ecosystem. tout un écosystème…

Hello, Quarto?

Quarto unifie et étend
l’écosystème R Markdown

Quarto unifie et étend
l’écosystème R Markdown


unifie les fans de R Markdown


étend l’écosysteme à ceux qui ne connaissent pas R Markdown

Quarto se présente comme le nouveau système open-source
de publication d’articles scientifiques and techniques

Quarto se présente comme le nouveau système open-source
de publication d’articles scientifiques and techniques

dans le but de rendre le process de création
et de collaboration radicalement plus simple

A schematic representing the multi-language input (e.g. Python, R, Observable, Julia) and multi-format output (e.g. PDF, html, Word documents, and more) versatility of Quarto.

Quarto logo with two quadrants labelled as Share and Teach with a blue penguin next to it.

Quarto logo with two quadrants labelled as Collaborate and Reimagine with an orange penguin next to it.

Quarto logo with all fouur quadrants labelled as Share, Collaborate, Teach, and Reimagine.

Share

The R Markdown ecosystem

Hex logos for various packages from the R Markdown ecosystem.

Quarto: Next generation R Markdown

Quarto logo.

Quarto highlights

One quadrant of the Quarto logo. Consistent implementation of attractive and handy features across outputs: tabsets, code-folding, syntax highlighting, etc.

Two quadrants of the Quarto logo. More accessible defaults as well as better support for accessibility

Three quadrants of the Quarto logo. Guardrails, particularly helpful for new learners: YAML completion, informative syntax errors, etc.

Four quadrants of the Quarto logo. Support for other languages like Python, Julia, Observable, and more via Jupyter engine for executable code chunks.

Quarto CLI orchestrates
each step of rendering

A schematic representing rendering of Quarto documents from .qmd, to knitr or jupyter, to plain text markdown, then converted by pandoc into any number of output types including html, PDF, or Word document.

Quarto makes moving between formats straightforward

Document

lesson-1.qmd

title: "Lesson 1"
format: html

Presentation

lesson-1.qmd

title: "Lesson 1"
format: revealjs

Website

_quarto.yml

project:
  type: website

website: 
  navbar: 
    left:
      - lesson-1.qmd

Quarto facilitates open sharing


Tooling that makes it easy to share what you do
with the world on the web is incredibly useful


It’s useful not just to you, but to the world
as it facilitates open sharing of knowledge
for learning and for reuse

Collaborate

Many Data scientists
use Python
😬

Quarto enables collaborating
across coding languages


_quarto.yml

contents:
  - section: in-development/index.qmd
    contents:
      - in-development/earthdata-access-demo.ipynb
      - in-development/nsidc/icesat2-cmr-onprem-vs-cloud.ipynb
      - in-development/lpdaac/lpdaac_ecostress_lste_kerchunk.ipynb
      - in-development/matlab-aws.qmd
      - in-development/earthdata-python-r-handoff.rmd  
  - section: contributing/onboarding.qmd
    contents: 
      - contributing/quarto-website-tutorial.md

Quarto enables contributing
from our current tools

Screenshot of RStudio IDE

Screenshot of Jupyter Lab

Screenshot of GitHub IDE

Screenshot of VS Code IDE

Teach

Quarto flattens the learning curve

A schematic showing many qmd files, going through Quarto, to generate an HTML, PDF, or Word document or more. The Quarto logo is depicted as a baseball a penguin is spinning.

Quarto can grow with learners in a profound way


A schematic showing many computing languages (R, Python, Julia, Observable, and more) going into many single qmd files, going through Quarto, to generate an HTML, PDF, or Word document or more. The Quarto logo is depicted as a baseball a penguin is spinning.

camembr.quarto.pub/hello-quarto

La Technique

Installer


Suivre les instructions de Quarto.org.


Remarque

Nécessaire d’avoir une certaine version de l’IDE RStudio (v2022.07).

  1. Installer Quarto CLI
  2. Installer le package éponyme quarto



Quarto peut s’utiliser en dehors de tout IDE, directement en ligne de commande

Créer un notebook

Une fois l’installation faite, comment lancer Quarto?

Des formats de fichiers spéciaux proposés dans File: une nouvelle extension, .qmd

Les nouveautés dans le notebook Jupyter: les options globales dans le premier bloc (= YAML header dans .qmd), les options dans les blocs de code (= chunks options .qmd)

Créer un notebook

Une fois l’installation faite, comment lancer Quarto?

Un bouton Render au lieu de Knitr pour générer le document

Pour prévisualiser le document :

quarto preview hello.ipynb



et pour générer le document:

quarto render hello.ipynb --to pdf
quarto render hello.ipynb --to html

Créer un notebook

Une fois l’installation faite, comment lancer Quarto?

Une autre manière de spécifier les “chunk options” (pipe natif \(\#|\))

Créer un notebook

Une fois l’installation faite, comment lancer Quarto?

Deux modes: Source ou Visual, possible d’aller de l’un à l’autre à volonté

Que peut-on faire en Quarto ?

Que peut-on faire en Quarto ?

  • des rapports;
  • des présentations;
  • des sites web;
  • des livres et articles.

Quarto rend possible de passer de l’un à l’autre sans (presque) aucune modification dans le code!

Rapports

  • HTML
  • PDF
  • Word

Quoi de plus que dans Rmarkdown (HTML) ?

Rapport HTML : formats

  • margin : Mettre des figures à côté (et non plus juste en dessous) du code

  • columns : arranger plus ou moins la place prise par l’objet en fonction du bloc

Rapport HTML: le copier-coller

Possible de copier-coller une image (s’enregistre automatiquement dans un dossier images)

Rapport HTML: le copier-coller

Ainsi que du texte formaté (Quarto va conserver ce format).

Rapport HTML : autres

Les trucs un peu gadget (mais quand même cool!) :

  • Pouvoir afficher le rapport en mode clair ou sombre1.
  • Le code: copier-coller, cacher/montrer, séparer automatiquement en plusieurs lignes
  • Afficher les citations et notes de bas de page en passant la souris dessus
  • code-link ou intégrer l’URL des pages d’aide des fonctions R2.

Présentations

  • Reveal.js
  • Beamer
  • Même possible d’exporter en .ppt

Au-revoir les captures écran pour intégrer les graphiques et tableaux depuis R dans les présentations!

Quoi de plus que dans RMarkdown ?

Présentation HTML : surligner le code

Faire apparaître au fur et à mesure le code pour pouvoir le commenter plus facilement

# Most basic bubble plot
data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, fill=continent)) +
    geom_point(alpha=0.5, shape=21, color="black") +
    scale_size(range = c(.1, 24), name="Population (M)") +
    scale_fill_viridis(discrete=TRUE, guide=FALSE, option="A") +
    theme_ipsum() +
    theme(legend.position="bottom") +
    ylab("Life Expectancy") +
    xlab("Gdp per Capita") +
    theme(legend.position = "none")

Présentation HTML : chalkboard

  • Un outil pour entourer, dessiner, écrire sur le slide
  • Un tableau noir + craie avec possibilité d’intégrer les notes aux slides

Pour en savoir plus: chalkboard

Présentation HTML : extension pointeur



$ quarto install extension quarto-ext/pointer



Raccourci = Touche q pour switcher entre le curseur et le pointeur.

Blogs, sites webs

Pas possible ?! Ok, essayons de monter un site web…

  1. Créer un compte Quarto.pub3 et se connecter via le navigateur par défaut.
  2. Faire le site et le publier.

Blogs, sites webs

  • Nouvelle tab qui apparaît (“Build”) pour voir en avant-première le rendu du site (avant publication)
  • Une seule ligne dans le terminal pour publier le site: quarto publish
  • Possible de monter un site web à la fois avec des outputs R et Python (.qmd et .ipynb)

Articles, books4

  • On peut spécifier un format connu d’article scientifique (via CLI), i.e. ASS

Quarto est polyglote

Quarto est polyglote

Quarto permet d’exécuter du code

  • python,

  • R

  • Observable.hq

  • Julia …

  • dans le même notebook

  • en partageant les données

les cellules de code

python

import pandas
pingouin = pandas.read_csv("penguins.csv")
# ojs_define( pypingouin = pingouin)

R

library(reticulate)
library(dplyr)
pingouin <- py$pingouin %>% mutate(bill_length_mm = 0.98 * bill_length_mm)
ojs_define( rpingouin = pingouin)

Observable.js

```{ojs}
//| echo: true
render(mySVG)
xProperty = 'flipper_length_mm'
yProperty = 'bill_length_mm'

function render(div) {
  // draw on the SVG with D3
  const selection = d3.select(div).select('svg');
  
  const xExtent = d3.extent(rpingouin, d => d[xProperty]);
  const x = d3.scaleLinear().domain(xExtent).range([30,width-30]);
  const xAxis = d3.axisBottom(x);
  selection.select("#xAxis")
    .call(xAxis);
  
  const yExtent = d3.extent(rpingouin, d => d[yProperty]);
  const y = d3.scaleLinear().domain(yExtent).range([30,height-30]);
  const yAxis = d3.axisLeft(y);
  selection.select("#yAxis")
    .call(yAxis);
  
  const colorScale = d3.scaleOrdinal(d3.schemeCategory10);

  
  selection.selectAll('circle')
    .data(rpingouin.filter(d => d[xProperty] !== "NA"))
    .join('circle')
    .attr('r', 15)
    .style('opacity', 0.2)
    .style('fill', d => colorScale(d.species))
    .transition()
    .duration(3000)
    .attr('cx', d => x(d[xProperty]) )
    .attr('cy', d => y(d[yProperty]) );

  const legend = swatches({color: colorScale});
  d3.select(div).select("#legend")
    .append(() => legend);
  
}

mySVG = html`<div style="width:${width}px; height:${height+50}px">
<div id="legend"></div>

<svg width=${width} height=${height}>
  <circle r=50 cx=100 cy=100 fill="seagreen"></circle>
  <g id="xAxis" transform="translate(0,${height-20})"></g>
  <g id="yAxis" transform="translate(25,0)"></g>
</svg>
</div>

```

OJS Syntax Error (line 46, column 52)Unterminated template



Migration
to Quarto

::: {style=“margin-top: 50px; font-size: 1.5em; color: #75AADB;”} ” Yes but I have so many of the following notebooks already ”

flowchart LR
    B[.Rmd notebook] --fas:fa-magic--> Q(Quarto Notebook)
    A[fa:fa-python .ipynb notebook] --fas:fa-magic--> Q(Quarto Notebook)
    D[Observable.hq notebook] --fas:fa-magic--> Q(Quarto Notebook)
    C[LaTeX] --fas:fa-magic--> Q(Quarto Notebook)
    

Rmd migration
in 2.5 sec

Terminal
mv README.Rmd README.qmd

Rmd migration
in 7.5 sec

Console
# convert to Quarto doc with in-body chunk options
knitr::convert_chunk_header("to-convert.Rmd", "converted.qmd")

New documents :

:::

ipynb migration

  • step 1 :
VSCode Command Palette
Jupyter: Import Jupyter Notebook
  • step 2 :
VSCode Command Palette
Quarto: New document

Observable.hq migration

Terminal
cargo run -- --ohq-ref @hrbrmstr/just-one-more-thing --output-dir ./examples --verbose

LaTeX migration

WiP

(more at the post-event bar)

Et RMarkdown dans tout ça?

  • Conversion .Rmd \(\rightarrow\) .qmd simple et lecture de .Rmd via Quarto CLI possible
  • Restera à moyen terme supporté par Posit…
  • …mais les efforts de développement/nouveautés seront concentrées sur Quarto

Quarto Vs. RMarkdown: les plus

  • La plupart des choses peuvent être également faites en Rmarkdown, mais bien plus simple/“élégant” en Quarto (moins de bidouillage peut être)
  • Possible de switcher entre de l’édition en code et de l’édition en clique-bouton (type Word, LibreOffice), pratique quand on oublie juste une commande!
  • Propositions automatique dans le YAML header (CTRL + espace) et pour les chunk options: pareil, pratique quand on a un trou de mémoire (ou qu’on veut savoir toutes les options disponibles)
  • Intéragir avec du notebook R ou Python exactement de la même manière
  • Facile de naviguer entre plusieurs formats (peu de choses à modifier pour que le document s’édite)
  • Gérer les outputs de différentes sortes dans un même document (comme un site web)

Quarto Vs. RMarkdown: les moins

  • Tout nouveau, donc peu d’aide dans la communauté disponible

Merci !

Merci !

Say hello to Quarto!

Two penguins. The orange one is holding the Quarto logo. The blue one is looking at the orange one.

Annotated Notes: Share

Annotated Notes: Collaborate

Demo: JupyterLab JupyterHub managed by 2i2c https://2i2c.org

Other Rey with Quarto, throwback to https://jules32.github.io/useR-2019-keynote

Annotated Notes: Teach

Annotated Notes: Reimagine

FayLab Manual

Quarto Mosaic

See also: 3 takeaways for planning for the year of open science

Footnotes

  1. pas posible pour les slides…

  2. problème pour la faire fonctionner en revealjs et html…

  3. solution pour publier des sites web, proposée par Quarto (Posit)

  4. Probablement d’autres aspects sympas, mais pas d’expérience sur ces formats.