我将在几周内教一些R编码研讨会。学生喜欢提前接收材料,我希望为他们提供RMarkdown
HTML文件,这些文件可以作为讲义。
在课堂上,我更喜欢学生而不是“ copy and paste
”代码。取而代之的是,我以较慢的速度进行授课,以便学生可以练习编写代码,我认为这确实有助于促进学习。
当我输出copyable
文件时,是否可以在YAML部分中指定文本不是“ .html
”?
我知道我可以将输出另存为.pdf
并通过应用程序运行,但我希望输出不是“ paged
”,并且如果可能的话,应具有交互式目录
答案 0 :(得分:2)
根据此处建议的起点,我发现了一个快速破解方法:https://css-tricks.com/almanac/properties/u/user-select/
library(shiny)
css <- ".nocopy {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}"
func <- "func <- function(x, y, ...) {
x + y
}"
ui <- fluidPage(
tags$style(HTML(css)),
"Copyable:",
tags$pre(func),
tags$hr(),
tags$p("Not copyable:", class = "nocopy"),
tags$pre(func, class = "nocopy")
)
server <- function(input, output, session) {}
shinyApp(ui, server)
这暗示了它可以应用于各种HTML元素,包括<p>
和<pre>
。我尚未对其他元素进行测试。
但是,几乎所有网络开发人员都会告诉您,这是微不足道的。使用FF(大多数浏览器具有类似的功能):
Ctrl-I
(工具> Web开发人员和;切换工具的快捷方式)Ctrl-Shift-C
(“页面中的元素和元素” )class="nocopy"
更改为class=""
(或其他任何内容)在"Not copyable:"
文本上执行此操作的结果可以在此处看到:
(我展示了这些步骤,以明确表明我相信这是阻止懒惰的浅表尝试。那些选择更主动的懒惰(??)的人这样做没有问题。实际上,他们只是直接删除.nocopy
的定义以对整个页面产生影响。但是,再次,您不能强迫学生学习您的打算:-)
修改:
这在Rmd文件中同样容易工作:
文件:Nova.css
.nocopy {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
文件:Nova.Rmd
---
output: html_document
css: Nova.css
---
Copyable:
```{r chunk1}
func1 <- function(x, y, ...) {
x + y
}
```
<p class="nocopy">Not copyable:</p>
```{r chunk2, class.source = "nocopy"}
func2 <- function(x, y, ...) {
x + y
}
```
您可以在此处使用两个knitr
options:class.source=
和class.output=
。我假设您希望对源进行“保护”,但是您可能也希望输出。