Multiformats

Note

Il s’agit d’une page miroir au chapitre 12 du support avec une compilation en plusieurs formats

Compilation en plusieurs formats

Dans le yaml de ce chapitre:

---
format: 
  html: default
  pdf:  default
  docx: default
---
  • Si plusieurs formats sont renseignés dans le yaml, à droite du document (margin) sous la table des matières un menu Other formats permet d’accéder directement au document dans un ou plusieurs autrees formats.

  • On peut supprimer ce menu dans le yaml avec l’option format-links: false

  • On peut effectuer une compilation multiformat avec le bouton RENDER ou via le terminal de RStudio.

  • Tant qu’on a pas compiler au moins une fois avec un format alternatif au html, Quarto ne compilera pas simultanément en plusieurs formats. Cela n’est d’ailleurs pas spécialement conseillé avec le PDF en raison de la durée de compilation bien plus longue que le format html ou docx (idem odt).

    • Toujours penser à prioriser la compilation html avant de se lancer dans le PDF?

Avec le bouton RENDER

Après avoir enregistré le fichier, on peut accéder directement à un sous menu permettant de choisir le format de sortie. C’était déjà le cas avec Rmarkdown.


  • Dans le menu du bouton Render, on doit compiler au moins une fois le document pour les autres formats individuellement.

Dans le terminal

On exécute la ou les lignes de commandes suivantes:

Compilation simultanée de tous les formats indiqués dans le yaml:

quarto render <nom_fichier.qmd>

Compilation d’un format spécifique:

quarto render <nom_fichier.qmd> --to pdf
quarto render <nom_fichier.qmd> --to docx

Contenu conditionnel

Contenu non adapté à tous les formats

  • Certains éléments, par exemple de mise en page, ne sont pas adaptés à tous les formats

  • On pourrait dans une documentation comme celle-ci et éditée dans plusieurs formats, réserver des éléments explicatifs propre à chaque format au format qui sera affichier: attention si html on devra faire ça , attention si pdf on devra faire cela etc…

  • Quarto donne la possibilité contrôler la compilation du contenu format par format.

  • Attention toutefois, pour un contrôle qui s’applique à une mise en page on va multiplier dans le code source du document un même type d’élement . En raison de cette contrainte, j’ai rapidement compris que je ne pourrais pas diffuser ce support simultanément en html et en pdf.

On prendra comme exemple une mise en page des images sous forme de vignettes à l’option lightbox.

Très pratique pour le format dynamique html, le rendu pour des formats statiques (pdf,docx) ne sera en revanche pas satisfaisant.

  • En html, on génère et positionne 4 graphiques sur une même ligne. L’option lightbox permet d’agrandir les graphiques et de naviguer entre eux
```{r}
#| layout-ncol: 4
#| lightbox:
#|   group: cars

data("mtcars")
df = mtcars

plot(df$mpg, df$cyl)
plot(df$mpg, df$wt)
plot(df$mpg, df$qsec)
plot(df$mpg, df$disp)
```


  • En compilant simultanément en pdf, le rendu est le suivant:

Contrôler le contenu affiché

  • Quarto a implémenté des classes css qui permettent de contrôler le contenu qui sera affiché par type de format:
    • {.content-visible <sélection format>}
    • {.content-hidden <sélection format>}
  • Les options de sélection:
    • when-format="type_format"
    • unless-format="type_format"
  • [Documentation site officiel]

Dans notre exemple: * L’affichage des graphiques sous forme de vignettes sera réservé au format html * Pour les formats statiques, les graphiques seront affichés à leur taille réelle, les uns après les autres. * On devra renseigner le programme deux fois en modifiant les options:


Format html [Aggrandir les images et naviguer entre elles]:

  • {.content-visible when-format="html"}

::: {.content-visible when-format="html"}

```{r}
#| layout-ncol: 4
#| lightbox:
#|   group: cars

data("mtcars")
df = mtcars

plot(df$mpg, df$cyl)
plot(df$mpg, df$wt)
plot(df$mpg, df$qsec)
plot(df$mpg, df$disp)
```
:::

Format pdf,docx [Ouvrir les documents]

  • {.content-hidden when-format="html"}

::: {.content-hidden when-format="html" }

```{r}
data("mtcars")
df = mtcars

plot(df$mpg, df$cyl)
plot(df$mpg, df$wt)
plot(df$mpg, df$qsec)
plot(df$mpg, df$disp)
```
:::