Я пишу несколько руководств, используя blogdown. По педагогическим соображениям я хочу, чтобы мои ученики думали, прежде чем увидеть решение. Вот мой текущий код.
Исходный
---
title: "Toggle Chuck Output Using details Tag"
output: html_document
---
```{r calc, prompt=TRUE, eval=FALSE}
90 + 30
```
<details>
<summary>Toggle output</summary>
```{r, ref.label='calc', echo=FALSE, prompt=TRUE}
```
</details>
Вот моя попытка:
Чтобы избежать повторного написания тегов HTML, я думаю, мне нужно определить функцию, аналогичную...
togglable <- function(label, summary = "Toggle output"){
cat('<details>')
cat(' <summary>', summary, '</summary>', sep = '')
# Code to print output using 'ref.label' should go here.
# The following doesn't work.
knitr::knit_print(knitr:::knit_code$get(label))
cat('</details>')
}
.... затем замените блок <detals>...</details>
фрагментом кода R, подобным следующему:
Сценарий 1 (лучше)
```{r usecase1, echo=FALSE, results='asis'}
togglable(label = "calc")
```
Я пытался заставить его работать, но тщетно.
Еще кое-что. Если возможно, я бы хотел, чтобы эта функция togglable()
переопределяла параметры фрагмента, чтобы мне даже не нужно было писать echo=FALSE
, results='asis'
, потому что следующий фрагмент выглядел бы лучше.
Сценарий 2 (наилучший)
```{r usecase2}
togglable(label = "calc")
```
Подводя итог, хочу задать следующие вопросы.
- Как мне определить эту функцию
togglable()
, чтобы она вела себя так же, как исходный блок<detals>...</details>
? - Возможно ли, что эта функция переопределяет параметры (в частности,
echo
иresults
) для чанка, где эта функция вызывается? Если да, то как? - В качестве альтернативы, есть ли другая идея, как получить результат исходного кода без повторного написания тегов HTML?
Большое спасибо!