1

R コード出力を生成されたドキュメントにサラウンド形式タグ<pre><code class="r">または<pre><code>. .Rhmtl ではなく .Rmd を使用したいが、同時に余分な HTML 行を挿入したいので、これを尋ねます。出力が で囲まれているため、 egcat("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>
4

2 に答える 2

2

これは、 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で動作させることができるかもしれません。

フックを使ってたくさんのクールなことをすることができます。

于 2012-12-17T22:37:44.177 に答える
1

私が今やったことは、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>
于 2012-06-13T14:56:10.903 に答える