Подзаголовки или подзаголовки в вязальщике, которые занимают более одной страницы?

Очень похоже на этот пост. Однако у меня больше графиков, чем помещается на одной странице, поэтому оставшиеся графики будут обрезаны после нажатия Knit. Кто-нибудь знает, как решить эту проблему, построив другие графики на следующей странице?

title: 'title'
author: "--"
date: "`r Sys.Date()`"
output: pdf_document
header-includes:
  - \usepackage{subfig}
  - \usepackage{float}

## To make the example more reproducible ##

```{r echo=FALSE, message=FALSE}
knitr::opts_chunk$set(fig.width=6, fig.height=9, fig.show="hold", 
hightligh=TRUE, warnings=TRUE, error=FALSE, cache=FALSE, echo=FALSE, 
dpi=100)

library(ggplot2)

```

```{r test, fig.cap='A collection of figs', fig.subcap= "-", out.width="49%", fig.asp=1, fig.ncol = 2, fig.show = 
"asis", fig.align="center"}

       for (ii in 1:10) {
       qplot(1:3, 1:3, main=ii)
       }

```

## this part is only to resemble the answer by *Michael Harper* in the post mentioned before and should be uncommented to replicate (google maps API needed) ## 

# ```{r}
# locations <- c("Southampton, UK", "London, UK", "Bristol, UK", 
# "Birmingham, UK", "Liverpool, UK", "Southampton, UK", "London, UK", 
# "Bristol, UK", "Birmingham, UK", "Liverpool, UK") 
# ggmap::register_google(key = "....")
# ```

# ```{r fig-sub-2, fig.cap='A collection of maps', fig.subcap= locations, 
# out.width='.49\\linewidth', fig.asp=1, fig.ncol = 2}
# library(ggmap)
# lapply(locations, function(x) 
# ggmap(get_map(x))
# )
# ```

Ответ от Майкла Харпера в том же сообщении получил меня довольно далеко, но не до такой степени, что количество сюжетов превышает количество сюжетов, помещающихся на одной странице.

вывод из приведенного выше кода, показывающий только 6 из 10 графиков


person Kevin    schedule 30.04.2020    source источник
comment
Похоже, я уже ответил на ваш вопрос :) Как вставить разрыв страницы между подфигурками внутри фрагмента кода с помощью knitr   -  person Michael Harper    schedule 14.05.2020
comment
@MichaelHarper Спасибо за ссылку, я пытался использовать вашу функцию, чтобы заставить ее работать на моем примере, но после вязания ничего не отображается. Не могли бы вы показать воспроизводимый пример для моей проблемы?   -  person Kevin    schedule 18.05.2020
comment
К сожалению, у меня нет на это времени. Возможно, стоит обновить свой собственный вопрос, если вы столкнулись с конкретной проблемой. Вы уверены, что правильно настроили параметры фрагментов, т.е. results = asis?   -  person Michael Harper    schedule 18.05.2020
comment
К сожалению, да, я установил result = asis. Я дополню свой вопрос второй частью, в которой я также использую вашу функцию.   -  person Kevin    schedule 18.05.2020
comment
@MichaelHarper Мне удалось заставить его работать для воспроизводимого примера выше. Позже я добавлю его в качестве ответа для полноты. Однако я столкнулся с другой проблемой, которая заключается в моем собственном скрипте. Я использую очень длинный заголовок в созданной вами функции, но затем получаю сообщение об ошибке Error in dirname(name) : path too long, которое кажется странным, поскольку на самом деле это не путь, верно?   -  person Kevin    schedule 19.05.2020


Ответы (1)


Для полноты картины я покажу, как решить проблему с помощью решения от @MichaelHarper, размещенного здесь.

---
title: "tmp"
author: "Kevin Ouwerkerk"
date: "4-5-2020"
output: pdf_document
header-includes:
  - \usepackage{subfig}
  - \usepackage{float}

---

```{r echo=FALSE, message=FALSE}
library(ggplot2)

knitr::opts_chunk$set(warnings=TRUE, error=FALSE, cache=FALSE, echo=FALSE, 
dpi=100)

plots <- list()
```

```{r test}
   for (ii in 1:10) {
   plots[[ii]] <- qplot(1:3, 1:3, main=ii)
   }
```

```{r split-function}
knitr::opts_chunk$set(echo = FALSE)

library(knitr)

# Function to create a separate chunk to generate a plot for each item in list
splitSubFig <- function(plots, caption, maxlength) {

  knitr::opts_knit$set(progress = FALSE, verbose = FALSE)

  n <- length(plots)
  numPages <- ceiling(n / maxlength)
  splitPlots <- split(plots, rep(1:ceiling(n/maxlength), each=maxlength)[1:n])

  for (page in 1:numPages) {

    cat(
      knit(text=knit_expand(
        text=(
          "```{r {{caption}}{{page}}, fig.cap='{{caption}}: {{page}}', 
fig.subcap=LETTERS[1:length(splitPlots[page])],  out.width='8cm', fig.ncol=2, echo = 
 FALSE, message = FALSE}
 for(i in splitPlots[page]){

 for(plots in i){
  print(plots)
}

}
```"),
caption = caption,
page = LETTERS[page])))
  }
}

```


```{r, results="asis"}

splitSubFig(plots, caption = "Your Caption", maxlength = 6)

```

Если у вас очень длинный заголовок и вы получаете сообщение об ошибке Error in dirname(name) : path too long, вы можете удалить {{caption}} в имени фрагмента кода сразу после аргумента text в функции cat.

person Kevin    schedule 19.05.2020