Я пишу некоторые уроки, используя 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?
Большое спасибо!