2012-06-13 8 views
1

생성 된 문서에 외부 형식 태그 <pre><code class="r"> 또는 <pre><code>없이 R 코드 출력을 삽입하는 방법이 있습니까? 저는 .Rhmtl이 아닌 .Rhmtl을 사용하고 싶지만 동시에 몇 가지 추가 HTML 행을 주입하기 때문에 이것을 묻습니다. 예 : 출력이 <pre><code> 인 경우 cat("HTML code")이 실패합니다.knitr 마크 다운을 사용하여 HTML 행을 삽입

내가 권리를 작동하지 어느 파일 (추가 HTML 라인)을 follwing을 .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'; 
} 
//--> 
</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> 
+0

마침내 원하는 것을 보여줄 수 있습니까? – kohske

+0

JS 스크립트가 그렇게 할 수도 있습니다. – daroczig

+0

@ kohske 내가 원하는 것은 두 번째 부분의 일반적인 R 출력과 동일한 형식입니다. 출력의 두 번째 부분을 표시하고 숨길 수 있기를 원합니다. 현재 출력의 두 번째 부분이 파괴됩니다. –

답변

1

지금 darozcig의 조언에 따라 한 않았고 내가 JS를 사용 무엇. 이 솔루션은 지루해 보입니다. 뭔가 깔끔하게 맞는 knitr 좋네요! 내 완전한 .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> 
+0

아마도이 사람에게 물어볼 수 있습니다. http://carlboettiger.info/2012/06/13/Sethi-policy-functions.html –

2

knitr's hooks으로 가능해야합니다.

> 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이 무엇을 잘 모르겠지만, 그것을 확인 : 당신은 아마) 기본 고리가 render_markdown (위해 무엇인지 확인하기 위해 소스 코드를 체크 아웃 할 수 있습니다.

또한 asis 옵션을 사용해 보셨습니까? 형식화 방법에 대해서는 완전히 명확하지 않지만 asis로 작업하게 만들 수는 있습니다.

후크로 멋진 것들을 많이 할 수 있습니다.

+0

https://github.com/yihui/knitr/blob/master를 참조하십시오. /R/hooks-md.R'knitr'의 기본 출력 훅에 관심이 있다면; 나는이 질문이 후크에 의해 더 잘 대답 될 수 있다는 것에 동의하지만, "청크 후크"는 더 좋을 수도있다. –

+0

동의. 특히 옵션을 추가하기 위해 Rmd를 변경하는 데 신경 쓰지 않으면 특히 그렇습니다. 나는 니트 - 타임 (knit-time)에서 소스 문서를 변경하지 않고 knitr 후크를 보강하는 것이 편리하다는 것을 알았다. 그러나, 내가 한 일은 하나 또는 심지어 소수의 문서에만 국한된 것이 아니기 때문에, 청크 옵션을 추가하고 싶지 않았습니다. 한두 개의 문서에 대해이 작업을 수행하려는 경우 청크 후크가 더 좋을 수 있습니다. –

관련 문제