web-dev-qa-db-fra.com

Comment ajouter un saut de page dans un document Word généré par RStudio & markdown

J'écris un document Word avec R markdown dans R Studio. Je peux avoir beaucoup de choses, mais pour le moment je ne vois pas comment je pourrais avoir un saut de page. J'ai trouvé des solutions, mais uniquement pour les documents latex/pdf rendus, ce n'est pas mon cas. 

29
Giorgio Spedicato

Il existe un moyen plus simple d’utiliser un bloc d’en-tête de cinquième niveau (#####) et un modèle docx défini dans YAML. 

Après avoir créé headingfive.docx dans Microsoft Word, vous sélectionnez Modify Style du Heading 5, puis sélectionnez Page break before dans l'onglet Line and Page Breaks et enregistrez le fichier headingfive.docx.

 Page break before

---
title: 'Making page break using fifth-level header block'
output: 
  Word_document:
    reference_docx: headingfive.docx
---

Dans votre document Rmd, vous définissez reference_docx dans l'en-tête YAML et vous pouvez maintenant utiliser le ##### de saut de page.

S'il vous plaît voir ci-dessous.

https://www.r-bloggers.com/r-markdown-how-to-insert-page-breaks-in-a-ms-Word-document/

21
Sungpil Han

Avec l’aide de John MacFarlane et d’autres personnes du groupe Google Pandoc, j’ai mis en place un filtre qui permet de le faire. Veuillez consulter: https://groups.google.com/forum/#!topic/pandoc-discuss/FzLrhk0vVbU En bref, le filtre doit rechercher quelque chose à remplacer par openxml pour saut de page. Dans ce cas, __.\newpage est remplacé par <w:p><w:r><w:br w:type=\"page\"/></w:r></w:p> Cela permet à un seul balisage en latex d'être interprété pour les sorties pdf et Word . Joel

13
JAllen

Ce que vous essayez de faire est de forcer un "saut de page" ou une "nouvelle page" dans un document Word généré avec Pandoc. J'ai trouvé un moyen de faire cela dans mon environnement mais je ne suis pas sûr que cela fonctionnera dans tous les environnements.

Mon environnement: * R-studio/Pandoc/MS-Word commençant par un fichier "* .Rmd" et générant un fichier DOCX.

Dans mon fichier RMD, l’idée principale est que j’ai créé ce qui se comporte comme un document TEMPLATE (MyFormattingDocument.docx) et dans ce document Word, je modifie les styles pour des éléments tels que "Titre 1" et/ou "Titre 2" et ou " note de bas de page "ou tout autre style prédéfini que je veux modifier.

(VOIR: http://rmarkdown.rstudio.com/Word_document_format.html#style-reference ) pour une explication de la référence de style et la définition des informations d'en-tête dans votre fichier RMD pour spécifier un document de référence.

SOOOO dans mon cas ... J'ai modifié le style "Titre 1" dans Word pour inclure un "saut de page avant" forcé dans la mise en forme du paragraphe pour "Titre 1". La façon exacte dont vous forcez chaque "Titre 1" à toujours "Saut de page" diffère selon les versions de Microsoft Word, mais si vous suivez la documentation de Word et modifiez le style "Titre 1" ALORS que chaque "Titre 1" aura toujours un saut de page avant il.

ALORS ... vous enregistrez ce fichier de modèle dans le répertoire dans lequel vous travaillez avec le fichier RMD ... et il est UTILISÉ comme modèle. LES CONTENUS du fichier sont ignorés .... alors ne vous inquiétez pas ... vous pouvez mettre un exemple de texte dans ce fichier et vérifier que le formatage fonctionne. Le contenu est ignoré, mais les styles sont utilisés dans le nouveau Document Word qui sera construit par le fichier RMD donc .... alors chaque "En-tête 1" aura une pause avant.

NOTE: Vous pouvez évidemment faire de même avec N'IMPORTE QUEL style ayant un mappage un à un de PANDOC MARKUP afin de pouvoir simplement créer tous les "titres 3" ou ce que vous voulez .... regardez juste voir dans votre MDX créé DOCX ce que "STYLE" est appliqué, puis modifiez ce style même si vous devez insérer des "fausses" lignes avec un contenu essentiellement vierge uniquement dans le but de forcer l'apparition d'un style dans le fichier DOCX.

12
Marc Epstein

Voici un script R qui peut être utilisé comme filtre pandoc pour remplacer les sauts LaTeX (\pagebreak) par des sauts Word, selon la réponse de @ JAllen ci-dessus. Avec cela, vous n'avez pas besoin de compiler un script pandoc. Puisque vous travaillez dans R Markdown, je suppose qu’un des R disponibles dans le système.

#!/usr/bin/env Rscript

json_in <- file('stdin', 'r')
lat_newp <- '{"t":"RawBlock","c":["latex","\\\\newpage"]}'
doc_newp <- '{"t":"RawBlock","c":["openxml","<w:p><w:r><w:br w:type=\\"page\\"/></w:r></w:p>"]}'
ast <- paste(readLines(json_in, warn=FALSE), collapse="\n")
ast <- gsub(lat_newp, doc_newp, ast, fixed=TRUE)
write(ast, "")

Enregistrez ceci sous page-break-filter.R ou quelque chose du genre et rendez-le exécutable en exécutant chmod +x page-break-filter.R dans le terminal.

Ensuite, incluez ce filtre dans le R Markdown YAML comme ceci:

---
title: "Title
author: "Author"
output:  
  Word_document:
    pandoc_args: [
      "--filter", "/path/to/pandoc-newpage-filter.R"
    ]
---
5
Noam Ross

Vous pouvez utiliser le package R worded. Cela évite la nécessité d'un fichier de modèle Word. Voir https://github.com/davidgohel/worded .

Le paramètre output doit être défini sur worded::rdocx_document et vous devez appeler library(worded).

---
date: "2018-03-27"
author: "David Gohel"
title: "Document title"
output: 
  worded::rdocx_document
---

```{r setup, include=FALSE}
library(worded)
```

Vous pouvez ensuite ajouter <!---CHUNK_PAGEBREAK---> à votre document chaque fois que vous souhaitez un saut de page.

Le package permet diverses options de formatage Word en utilisant un mécanisme similaire.

2
anotherfred

L'article de Sungpil était proche, mais ne fonctionnait pas vraiment. C’était la meilleure solution que j’ai trouvée pour cela: https://scriptsandstatistics.wordpress.com/2015/12/18/rmarkdown-how-to-inserts-page-breaks-in-a-ms-Word -document/

Mieux encore, l'auteur a inclus le modèle Word pour que cela fonctionne. Le lien de R-blogger vers son modèle est cassé et l'en-tête est mal formaté. Quelques notes que j'ai prises:

1) Vous devrez peut-être inclure le chemin d'accès complet au modèle Word dans votre en-tête Rmd, comme suit:

output: 
    Word_document:
      reference_docx: C:/workspace/myproject/mystyles.docx

2) Le modèle sur le lien ci-dessus a modifié certains paramètres de style par défaut, vous devez donc les rétablir.

1
Odysseus Ithaca

Ce n'est pas une solution automatisée. Mais j’ai ajouté le texte '##### saut de page' à mon document de démarques. Dans MS Word, utilisez ensuite find-replace pour remplacer le texte "saut de page" par "^ m" (saut de page manuel).

0
m_abra

Ma solution n'est pas très robuste mais peut fonctionner pour certains d'entre nous . En supposant que vous ayez besoin d'un saut de page avant chaque titre de niveau 1 de votre document Word, je l'ai défini dans le modèle de format utilisé dans le champ yaml reference_docx: ..____. Dans ce document, vous modifiez le format En-tête 1 (ou son équivalent) pour insérer un saut de page avant le titre. N'oubliez pas de commencer votre modèle avec le premier docx rendu avec knitr (pandoc) dans RStudio.

0
FabianCid