problème de formatage html bookdown avec gitbook et split_by

Oct 10 2020

Je génère un rapport gitbook avec Rstudio le package bookdown.

C'est assez simple en termes de code R sous-jacent, juste quelques modifications récentes pour:

  1. réduire le texte à 80% de la largeur de la page
  2. en utilisant des colonnes doubles et
  3. ajouter le numéro de ligne dans le code R affiché.

Tout fonctionne bien, sauf lorsque j'ai ajouté " split_by: rmd" dans le _output.yml. Ce faisant, le résultat obtenu ne respecte plus la marge autour du texte.

Je ne sais pas encore grand-chose sur le html, mais l'examen de l'inspecteur html a révélé que les sections sont situées en dehors du formatage de la page interne lors de l'utilisation de " split_by: rmd"

Par défaut (pas d'argument split_by):

Avec split_by: rmd

C'est une photo dans le noir car je ne peux pas partager le code et je ne suis pas en mesure de reproduire l'erreur avec l'exemple de bookdown minimal de Yihui: https://github.com/rstudio/bookdown-demo.

Toute piste permettant d'identifier l'origine de l'erreur ou encore mieux de proposer une solution serait la bienvenue!

Construire le livre à partir d'un script R:

bookdown::render_book(
  input = "index.Rmd",
  output_format = "bookdown::gitbook",
  output_dir = paste0("gitbook-", format(Sys.time(), format = "%Y-%m-%d-%H%M%S"))
)

index.rmd En-tête YAML:

---
title: "blahblah"
subtitle: "blahblahblah"
author: "DRAFT"
date: "August 2020"
documentclass: article
fontsize: 12pt
geometry: margin=2cm
link-citations: yes
#mainfont: Arial
bibliography: packages.bib
site: bookdown::bookdown_site
biblio-style: apalike
urlcolor: blue
---

```{r setup, include=FALSE}

knitr::opts_chunk$set(echo = TRUE, eval = FALSE, attr.source='.numberLines') table_format <- knitr::opts_knit$get('rmarkdown.pandoc.to')

if (table_format %in% c("html", "latex")) {
  library(kableExtra)
  knitr::opts_chunk$set(fig.pos='H', fig.align='center', out.width='80%')
}

## Automatically create a bib database for R packages
knitr::write_bib(c(.packages(), 'bookdown', 'knitr', 'rmarkdown', 'Hmisc'), 'packages.bib')
```

_output.yml:

bookdown::gitbook:
      css: style.css
      config:
        toc:
          before: |
            <li><a href="./">My book title</a></li>
          #after: |
          #  <li><a href="https://github.com/rstudio/bookdown" target="blank">Published with bookdown</a></li>
        edit: null
        download: null
        sharing: null
        info: null
      split_bib: FALSE
      split_by: rmd

style.css:

p.caption {
  color: #777;
  margin-top: 10px;
}
p code {
  white-space: inherit;
}
pre {
  word-break: normal;
  word-wrap: normal;
}
pre code {
  white-space: inherit;
}

/* watermark for draft report
.watermark {
  opacity: 0.2;
  position: fixed;
  top: 45%;
  left: 45%;
  font-size: 500%;
  color: #606099;
  z-index: 1000000;
}
*/

.book .book-body .page-wrapper .page-inner {
  max-width: 80% !important;
}

/* Increase space to display line number in R chunks correctly */
pre.numberSource code > span > a:first-child::before {
  left: -0.3em;
}

/* for multi cols */
/*.cols {display: flex; } /* uncomment for flex column size */
.cols {display: grid; grid-template-columns: 30% 50% 20%;} /* for fixed column size */

Réponses

1 GaelS Oct 12 2020 at 22:23

J'ai trouvé que l'origine du problème était le que \newpagej'ai ajouté au début de chaque fichier rmd pour construire le rapport au format pdf.

Solution 1: était de changer split_by: rmden split_by: sectiontant que mes fichiers rmd correspondent principalement aux sections de niveau 2.

Solution 2: était de mettre un wrapper autour de \newpagesorte qu'ils ne soient pas évalués lorsque la sortie est html:

`r if (knitr::opts_knit$get('rmarkdown.pandoc.to') != "html") '
\\newpage
'`

D'autres approches de la solution 2 ont été décrites ici: Comment ajouter \ newpage dans Rmarkdown de manière intelligente?