[英]injecting HTML lines using knitr markdown
有沒有辦法將R代碼輸出注入到生成的文檔中,而沒有使用大量格式標記<pre><code class="r">
或<pre><code>
? 我問這個是因為我想使用.Rmd而不是.Rhmtl但同時注入一些額外的HTML行。 使用例如cat("HTML code")
這樣做會失敗,因為輸出被<pre><code>
包圍。
我嘗試運行下面的.Rmd文件(帶有其他HTML行)的示例,該文件無法正常工作:
<script type="text/javascript">
<!--
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';
}
//-->
</script>
```{r}
1:10
```
<a onclick="toggle_visibility('answer_1');"><b><u>Antwort anzeigen</b></u></a>
<div id="answer_1" style=display:none>
```{r}
1:10
```
</div>
你應該能夠用knitr的鈎子做到這一點。 您可能想要查看源代碼以查看render_markdown()的默認掛鈎:
> library(knitr)
> render_markdown()
> knit_hooks$get('echo')
NULL
> knit_hooks$get('message')
function (x, options)
{
if (strict) {
str_c("\n\n", indent_block(x), "\n")
}
else str_c("\n\n```\n", x, "```\n\n")
}
<environment: 0x2a3f590>
> knit_hooks$get('output')
function (x, options)
if (output_asis(x, options)) x else hook.t(x, options)
<environment: 0x2a3f590>
> knitr:::output_asis
function (x, options)
{
is_blank(x) || options$results == "asis"
}
<environment: namespace:knitr>
我不確定hook.t到底是什么,但檢查一下。
另外,你試過asis選項嗎? 我並不完全清楚你想要的格式化方式,但你可能能夠使用asis。
你可以用掛鈎做很多很酷的東西。
我現在做的是遵循darozcig的建議,我使用JS。 這個解決方案似乎很乏味。 整齊編織的東西更容易裝得更好! 在我的完整.Rmd腳本下面。
<script type="text/javascript">
<!--
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';
}
function answer_top(name){
var injection1 = '<a onclick=toggle_visibility("' + name + '")><b><u>Show answer</b></u></a>\n'
document.write(injection1 + "\n")
var injection2 = '<div id="' + name + '"style=display:none>'
document.write(injection2 + "\n")
}
function answer_bottom() {
document.write("</div>" + "\n")
}
//-->
</script>
```{r}
1:10
```
<script type="text/javascript">answer_top("answer1")</script>
```{r}
1:10
```
<script type="text/javascript">answer_bottom()</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.