【问题标题】:insert html code before and after a chunk in rmarkdown/knitr在 rmarkdown/knitr 中的块之前和之后插入 html 代码
【发布时间】:2016-01-18 14:24:38
【问题描述】:

我正在 rmarkdown 文档中创建一些 R 练习,但我不希望显示答案,除非用户单击按钮。

我设法使用以下代码做到了这一点:

---
title: "Aula 01 - Exercícios"
date : 2016-01-18
layout: post
comments: true
tags: exercicio
category: exercicio
---

<script>
  var toggle = function(i) {
  var mydiv = document.getElementById('q' + i);
  if (mydiv.style.display === 'block' || mydiv.style.display === '')
    mydiv.style.display = 'none';
  else
    mydiv.style.display = 'block'
  }
</script>



1) Calcule o número de ouro no R.

$$ \frac{1 + \sqrt{5}}{2} $$

<div id="q1"  style="display:none;" >
```{r}
(1 + sqrt(5))/2
```
</div>

<button type = "button" onclick="toggle(1);" class = "btn btn-success">+</button>

这很好用,但我想我重复了很多代码。当我有 100 个问题并决定更改按钮名称时,我会非常难过。

有没有我可以做的事情:

---
title: "Aula 01 - Exercícios"
date : 2016-01-18
layout: post
comments: true
tags: exercicio
category: exercicio
---

<script>
  var toggle = function(i) {
  var mydiv = document.getElementById('q' + i);
  if (mydiv.style.display === 'block' || mydiv.style.display === '')
    mydiv.style.display = 'none';
  else
    mydiv.style.display = 'block'
  }
</script>



1) Calcule o número de ouro no R.

$$ \frac{1 + \sqrt{5}}{2} $$

```{r, option_to_include_code}
(1 + sqrt(5))/2
```

所以knitr 在转换为markdown 之前包含必要的divinput

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    这是一种方法。这个:

    • 创建一个全局问题 # 计数器,然后
    • 具有以下功能:

      • 将 R 表达式作为输入
      • 用表达式&答案&按钮吐出&lt;div&gt;(格式由你决定)
      • 使用一些 R markdown 代码块选项来使其正常工作

    您无法通过这种方式获得 R 代码格式,但如果您想使用它,这实际上是可行的。

    RPubs example output

    ---
    title: "Aula 01 - Exercícios"
    date : 2016-01-18
    layout: post
    comments: true
    tags: exercicio
    category: exercicio
    ---
    ```{r echo=FALSE}
    library(htmltools)
    
    q_num <- 1
    q_inc <- function(q_exp) {
      q_num <<- q_num + 1
      return(div(div(id=sprintf("q%d", q_num-1), 
                     style="display:none;", 
                     pre(deparse(substitute(q_exp)), q_exp)),
                  HTML(sprintf('<button type="button" onclick="toggle(%d);" class="btn btn-success">+</button>', 
                               q_num-1))))
    }
    ```
    <script>
      var toggle = function(i) {
      var mydiv = document.getElementById('q' + i);
      if (mydiv.style.display === 'block' || mydiv.style.display === '')
        mydiv.style.display = 'none';
      else
        mydiv.style.display = 'block'
      }
    </script>
    
    
    
    1) Calcule o número de ouro no R.
    
    $$ \frac{1 + \sqrt{5}}{2} $$
    
    ```{r, echo=FALSE, results="markup"}
    q_inc((1 + sqrt(5))/2)
    ```
    
    2) Calcule o número de ouro no R again.
    
    $$ \frac{2 + \sqrt{5}}{2} $$
    
    ```{r, echo=FALSE, results="markup"}
    q_inc((2 + sqrt(5))/2)
    ```
    

    【讨论】:

    • 是否也可以隐藏输出结果?
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多