70 votes

Knitr/Rmd : saut de page après n lignes/distance n

Permettez-moi de préciser en disant que cela pourrait être mieux adapté en tant que question html / css mais (a) je ne suis pas très familier avec ces techniques et (b) je voulais tout garder dans la famille (famille R) si possible.

Je voudrais utiliser knitr pour écrire des rapports de style académique (directives de type APA 6) en utilisant Rmarkdown. J'ai presque tout résolu, mais pas les sauts de page. Je peux définir manuellement des sauts de page avec quelque chose comme :

# report

```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=TRUE)
```
------
## Page 1

```{r plot1}
plot(1:10, 1:10)
```
------
## Page 2

Dans le fichier .Rmd suivant, j'aimerais définir de manière programmatique ces sauts après n lignes/n distance. Disons après 8 pouces ou 140 lignes.

# report

```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=TRUE)
```
Texte initial. Hourra !

```{r plot1}
plot(1:10, 1:10)
```

Plus de texte. Exceptionnel. Pourquoi Hadley ne l'appelle-t-il pas plyr2 ?

```{r plot2, fig.width=4, fig.height=4}
plot(1:10, 1:10)
```

`r paste(rep("Tant de texte si peu de temps !", 10000))`

Comment puis-je définir de manière programmatique des sauts de page après une certaine distance. C'est similaire à la façon dont LaTeX diviserait un fichier en pages, de sorte que si une figure prend trop de place, elle serait forcée sur la page suivante.

MODIFICATION Trouvé cela grâce à un ami : http://www.w3.org/TR/css3-page/ peut être utile.

1voto

Travis Points 250

De manière programmatique. Créez une div HTML. Définissez la largeur et la hauteur de cette div à une valeur fixe et définissez le débordement à faire défiler.

    ...

Transformez votre markdown en éléments HTML. J'ai 5 balises h1 qui font chacune 300px de haut.

First
Second
Third
Fourth
Fifth

Ces 5 balises h1 ne rentreront pas toutes sur la même page. La page ne fait que 1 000 pixels de hauteur. Seulement 3 balises h1 rentreront sur cette page. Nous devrons insérer un saut de page après le troisième élément.

Ajoutez progressivement chaque nouvel élément dans le DOM. Après avoir inséré chaque élément, vérifiez si la barre de défilement du navigateur est présente. Si c'est le cas, alors nous savons que l'élément que nous venons d'insérer était trop grand pour cette page ; supprimez l'élément et insérez un saut de page.

Avant :

### First
### Second
### Third
### Fourth
### Fifth

Après :

### First
### Second
### Third
------
### Fourth
### Fifth

Cela fonctionnerait pour n'importe quel élément et vous n'auriez pas à vous soucier de la hauteur d'un élément. Parce que, si l'élément que vous venez d'insérer fait défiler la div HTML alors nous avons besoin d'un saut de page. Images, vidéos, h1, h2, p, css personnalisé/dynamique, n'importe quoi.

METTRE À JOUR

Vous pourriez également calculer la hauteur de chaque élément div. http://api.jquery.com/height/ De cette manière, recalculer un document de 54 pages serait bien plus facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X