Dries
Dries

Reputation: 524

knit_child in a loop - variable as title

Following this and this stackoverflow-questions, I tried to use knit-child inside a loop, containing a variable-defined title.

Instead of the variables (e.g. A, B, C) as title, I get them with # still attached (# A, # B, # C)

Parent:

---
title: "Untitled"
output: html_document
---

```{r,include=FALSE}
library(knitr)
```


```{r,echo=FALSE}

titles<-LETTERS[1:3]

```

```{r,include=FALSE,echo=FALSE}
out = NULL
for (i in titles){
  out = c(out, knit_child('Child.Rmd'))
}
```


`r paste(out, collapse='\n')`

Child:

---
title: "Untitled"

output: html_document
---


```{r,echo=FALSE,results='asis'}

cat("\n\n # ", i,"\n")

```

```{r,echo=FALSE,results='asis'}

cat("\n\n This text is about ", i,"\n")

```

Output:

enter image description here

While I would prefer:

enter image description here

Upvotes: 3

Views: 2098

Answers (3)

Marek
Marek

Reputation: 50783

I recommend using the knit_expand function.

You create your Child.Rmd as

# {{current_title}}

This text is about {{current_title}}

Remember that `current_title` is a literal string, so
if you want use it in code then must be quoted:

<!-- Use `current_title` in chunk name to avoid duplicated labels -->

```{r {{current_title}}} 
data.frame({{current_title}} = "{{current_title}}")
```

Then your main document shoud looks like this:

---
title: "Untitled"
output: html_document
---

```{r,include=FALSE}
library(knitr)
```


```{r,echo=FALSE}

titles<-LETTERS[1:3]

```

```{r,include=FALSE,echo=FALSE}
expanded_child <- lapply(
    titles
    ,function(xx) knit_expand("Child.Rmd", current_title = xx)
    )

parsed_child <- knit_child(text = unlist(expanded_child))

```

`r parsed_child`

Results:

How it looks

Upvotes: 2

mehrdadorm
mehrdadorm

Reputation: 87

Consider using pandoc.headerinstead of Cat.

i = 1
pander::pandoc.header(i, level = 1)
> # 1

pander::pandoc.header(paste0("Subheading ", i), level = 3)
> ### Subheading 1

Upvotes: 1

CL.
CL.

Reputation: 14997

The # character only indicates a heading in markdown if it is the first character of the line.

cat("\n\n # ", i,"\n") produces two new lines, then one space and then the #. Remove the whitespace to fix the issue:

cat("\n\n# ", i,"\n")

Upvotes: 4

Related Questions