Остановить преамбулу knitr в зацикленных дочерних документах.

Я зацикливаю ребенка .Rnw файл, чтобы я мог повторить сюжеты с различными видами. К сожалению, преамбула для knitr (я думаю) повторяется в начале каждого цикла, поэтому .pdf не будет компилироваться. Если я вручную удалю повторную преамбулу в .tex файл все нормально. У меня такое чувство, что мне не хватает какой-то связи между родителем и ребенком, но я не могу найти где именно. Я использую R-studio и файлы, описанные ниже.

main.Rnw:

\documentclass{article}
\begin{document}

<<>>=
some R stuff
@

<<runall, include =FALSE>>=
out<-c()
for(species in c('RH', "GU", "RA", "KI")){
out<- c(out, knit_child('spsummary.Rnw')
}
@

\Sexpr{paste(out, collapse='n')}
\end{document}

Дочерний документ (spsummary.Rnw) зацикливается на каждом виде:

<<>>=
set_parent("main.Rnw")
@

<<>>=
more R stuff
@

\begin{table}
...
\end{table}

\clearpage
\newpage

2 ответа

Решение

Я наконец-то ответил на свой вопрос.

Это простой случай отсутствия обратной косой черты.

последняя, ​​но одна строка родительского документа (основного) должна выглядеть так:

\Sexpr{paste(out, collapse='\n')}

с обратной косой чертой перед 'n'

Вы можете удалить set_parent из документа вашего ребенка, потому что вы не хотите компилировать ребенка самостоятельно. Смотрите эту цитату из справки:

Дочерние документы часто являются неполными - отсутствующей частью является преамбула LaTeX, а также \begin{document} а также \end{document}, Иногда мы можем захотеть скомпилировать такие дочерние документы, как если бы они были полными документами LaTeX. Единственное, что нам нужно сделать, - это извлечь соответствующую преамбулу из родительского документа и добавить ее в этот дочерний документ. Функция set_parent() включает эту функцию; [...] Тогда дочерний документ будет вести себя так, как если бы он имел преамбулу

Другие вопросы по тегам