Читайте в символах из txt и вяжите с разрывом страницы - PullRequest
1 голос
/ 03 апреля 2019

Я создаю список объектов в Rmarkdown и помещаю их в текстовый файл, а затем считываю содержимое из файла, чтобы связать PDF. Однако в настоящее время я могу вставить только \n, но не разрыв страницы. Я хочу создать PDF с 5 страницами, если есть 5 таблиц (1 таблица / страница), я пробовал \pagebreak, но не работает. Есть предложения?

Ниже приведен мой код. Предположим, вы можете использовать и редактировать его прямо в файле уценки.

---
title: "My_RMarkdown_Document"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, comment = NA)
```

```{r txt file, include=FALSE}
if(file.exists('./output.txt'))
  file.remove('./output.txt')
obj_filepath <- file.path('./output.txt')
```

```{r, include=FALSE}
for(f in 1:5){
  context <- "I am generating a list of tables in Rmarkdown \nand put them into a txt file, \nand then read content from the file to knit a PDF. \nHowever, \ncurrently I can only insert \\\\n but not page break. \nI want to generate a PDF with 5 pages if there are 5 tables (1 table/page), \nI tried \\\\pagebreak but doesn't work. \nAny suggestions? \nMany thanks."

  cat(toString(context), file = obj_filepath, append = TRUE)
  cat(toString('\n'), file = obj_filepath, append = TRUE)
  cat(toString('\n'), file = obj_filepath, append = TRUE)
}
cat(toString('\n'), file = obj_filepath, append = TRUE)
tools::md5sum(normalizePath(obj_filepath))
```

```{r output, include=TRUE}
str_tbl <- readLines(obj_filepath)
cat(str_tbl, sep = '\n')
```

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я думаю, что нужно сделать две вещи. Во-первых, чтобы включить дословный код LaTeX, который будет правильно интерпретироваться RMarkdown, вам нужно установить опцию knitr chunk results='asis'.

```{r output, include=TRUE, results='asis'}
str_tbl <- readLines(obj_filepath)
cat(str_tbl, sep = '\n')
```

Как только вы это сделаете, строка "\\pagebreak" будет правильно интерпретироваться как команда LaTeX. Так что следующий код успешно создаст разрыв страницы.

  cat('\n', file = obj_filepath, append = TRUE)
  cat('\n', file = obj_filepath, append = TRUE)
  cat("\\pagebreak", file = obj_filepath, append = TRUE)
  cat('\n', file = obj_filepath, append = TRUE)

Вот полный документ:

---
title: "My_RMarkdown_Document"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, comment = NA)
```

```{r txt file, include=FALSE}
if(file.exists('./output.txt'))
  file.remove('./output.txt')
obj_filepath <- file.path('./output.txt')
```

```{r, include=FALSE}
for(f in 1:5){
  context <- "I am generating a list of tables in Rmarkdown \nand put them into a txt file, \nand then read content from the file to knit a PDF. \nHowever, \ncurrently I can only insert \\\\n but not page break. \nI want to generate a PDF with 5 pages if there are 5 tables (1 table/page), \nI tried \\\\pagebreak but doesn't work. \nAny suggestions? \nMany thanks."

  cat(context, file = obj_filepath, append = TRUE)
  cat("\n", file = obj_filepath, append = TRUE)
  cat("\n", file = obj_filepath, append = TRUE)
  cat("\\pagebreak", file = obj_filepath, append = TRUE)
  cat("\n", file = obj_filepath, append = TRUE)
}
cat('\n', file = obj_filepath, append = TRUE)
tools::md5sum(normalizePath(obj_filepath))
```

```{r output, include=TRUE, results='asis'}
str_tbl <- readLines(obj_filepath)
cat(str_tbl, sep = '\n')
```
0 голосов
/ 03 апреля 2019

Работает ли изменение \f вместо одного из ваших \n для создания разрыва страницы?Похоже, работает на моей системе

...