使用 RStudio 和 xaringan 的垂直滚动代码
Vertically scrollable code with RStudio and xaringan
我目前正在为 R 建模研讨会准备 html 幻灯片,为此我使用了很棒的 xaringan 软件包R。它基于 remark.js。与 ioslides 和 slidy 相比,它确实更符合我的期望。我非常兴奋!我错过的一个功能是可滚动的“长幻灯片”。在这里,我当然离开了幻灯片和普通网页之间混合的“幻灯片”范例,但我发现这在解释复杂内容和代码方面具有教学吸引力。这种风格与 slidy 配合得很好,我还在 xaringan.
中找到了一些如何启用可滚动代码的提示
这里我使用了下面的CSS(在related post at SO中找到):
.scrollable {
height: 80%;
overflow-y: auto;
}
然后在 RMarkdown 代码块中类似于:
.scrollable[
```{r}
foo <- function() {
cat("nothing\n")
}
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
## some comments ...
# ...
foo()
```
]
长幻灯片
这里我指的是可以向下滚动但仍嵌入幻灯片中的网页。
代码示例
幻灯片中包含可滚动代码的示例可在此处找到:
- 代码:https://github.com/dynamic-R/hacking-limnology/blob/main/docs/test.Rmd
- 演示:https://dynamic-r.github.io/hacking-limnology/test.html#3
部分有效,但我还不完全满意:
- 我更喜欢真正的“长幻灯片”而不是可滚动的文本。
- 与其用
.scrollable[]
封装部分,我更喜欢 class 完整的幻灯片
- 它仅适用于 Chrome、Edge(以及 RStudio 的 Infinite Moon Reader),但不适用于 Firefox。 编辑: absolute
heigt
适用于 Firefox(感谢@Waldi 的评论)
CSS 方法取自 a related post at SO,其中还包含指向更多方法的链接(部分带有额外的 JavaScript),但我无法获得它们 运行.
问题
任何想法,如何:
- 定义具有可滚动内容的 xaringan 幻灯片 class 或
- 将幻灯片定义为真正的“长幻灯片”,即长 html 页
其中“包含可滚动内容的幻灯片 class”或“长幻灯片”class 可以定义为:
---
class: scrollable-slide
类似于:
---
layout: false
class: inverse, middle, center
remark.js
并不是在考虑可滚动幻灯片的情况下制作的,这意味着如果不在 remark.js
上添加主要功能或破坏某些 remark.js
功能,则无法实现滚动。
如果您愿意破坏某些功能,我能想到的破解可滚动幻灯片的最简单方法是更改 .remark-slide-scaler
class 的 y-overflow
。我们所要做的就是添加以下 CSS:
.remark-slide-scaler {
overflow-y: auto;
}
要包含此 CSS,您可以将其写入文件,比如 scrollable.css
,并将其包含在 xaringan
配置块中,如下所示:
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
此 CSS 将为所有内容比幻灯片本身长的幻灯片添加滚动条。
易碎的东西
滚动浏览幻灯片
默认情况下 remark.js
允许您从一张幻灯片滚动到下一张或上一张幻灯片。但是,当我们在幻灯片上有滚动条时,我们希望禁用此行为。
解决这个问题的正确方法是在 remark.js
中编写实现一些功能,在适当的时候禁用和启用默认滚动行为。
一种简单的方法是简单地禁用滚动幻灯片。我们可以通过将 scroll: false
添加到我们 xaringan
配置的 nature
块中的 navigation
块来实现:
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
nature:
navigation:
# Disable scrolling through slides to
# allow scrolling in slides
scroll: false
页码
页码位于幻灯片框架的底部,但贴在幻灯片内容的底部。这意味着当您向下滚动可滚动幻灯片时,页码也会向上滚动。
要正确解决此问题,我们必须更改 remark.js
呈现内容的方式。一个常见的解决方案类似于 this,它涉及将主要内容与页脚放在单独的容器中。此页脚将包含页码。
一个简单的解决方案是隐藏页码。我们可以通过将以下内容添加到 scrollable.css
:
.remark-slide-number {
display: none;
}
克隆
remark.js
有一个称为“克隆”的功能,它可以让您打开多个幻灯片实例,但都同步到同一页面。因此,当一个实例转到下一张幻灯片时,所有其他幻灯片也会这样做。不幸的是,对于我们的滚动幻灯片,这并没有像预期的那样工作。 remark.js
无法记录页面向下滚动的距离,因此无法将其传达给其克隆。这意味着在一个实例中您可能一直向下滚动,但其他实例仍将停留在内容的顶部。一个简单的解决方案就是不使用此功能。
正在打印(未测试)
我没有对此进行测试,但我可以想象滚动幻灯片会干扰打印。内容将被截断,或者长页面将被完整打印,可能会与页面上的其他内容重叠。一个简单的解决方案就是不打印幻灯片。
可能还有更多功能,例如打印,可能会或可能不会被滚动幻灯片中的黑客破坏。
结论
总而言之,如果您能够忍受有限的功能,您可以通过首先创建一个文件 scrollable.css
来破解滚动幻灯片,其中包含:
.remark-slide-scaler {
overflow-y: auto;
}
.remark-slide-number {
display: none;
}
其次,在您的 xaringan
配置中包括 scrollable.css
和 scroll: false
。我在下面包含了一个示例幻灯片来说明。
---
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
nature:
navigation:
# Disable scrolling through slides to
# allow scrolling in slides
scroll: false
---
class: center
# First a normal short slide
Some content here
---
class: scrollable-slide
# A
# long
# slide
# that
# requires
# scrolling
# on
# my
# system
---
# End slide
其他选项
如果您没有那么多需要很长的幻灯片,您可以选择制作讲义。如果你用 rmarkdown
做这个,它会使讲义的源文件与幻灯片的源文件非常相似,将允许导出为不同的格式(如 html),并且会让你使用 remark.js
的所有功能。
另一种选择,如果您确实需要这个并且可以很好地说明为什么这对其他人也有用,那么可以在 remark.js
GitHub page 对于可滚动的幻灯片。
我目前正在为 R 建模研讨会准备 html 幻灯片,为此我使用了很棒的 xaringan 软件包R。它基于 remark.js。与 ioslides 和 slidy 相比,它确实更符合我的期望。我非常兴奋!我错过的一个功能是可滚动的“长幻灯片”。在这里,我当然离开了幻灯片和普通网页之间混合的“幻灯片”范例,但我发现这在解释复杂内容和代码方面具有教学吸引力。这种风格与 slidy 配合得很好,我还在 xaringan.
中找到了一些如何启用可滚动代码的提示这里我使用了下面的CSS(在related post at SO中找到):
.scrollable {
height: 80%;
overflow-y: auto;
}
然后在 RMarkdown 代码块中类似于:
.scrollable[
```{r}
foo <- function() {
cat("nothing\n")
}
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
foo()
## some comments ...
# ...
foo()
```
]
长幻灯片
这里我指的是可以向下滚动但仍嵌入幻灯片中的网页。
代码示例
幻灯片中包含可滚动代码的示例可在此处找到:
- 代码:https://github.com/dynamic-R/hacking-limnology/blob/main/docs/test.Rmd
- 演示:https://dynamic-r.github.io/hacking-limnology/test.html#3
部分有效,但我还不完全满意:
- 我更喜欢真正的“长幻灯片”而不是可滚动的文本。
- 与其用
.scrollable[]
封装部分,我更喜欢 class 完整的幻灯片 - 它仅适用于 Chrome、Edge(以及 RStudio 的 Infinite Moon Reader),但不适用于 Firefox。 编辑: absolute
heigt
适用于 Firefox(感谢@Waldi 的评论)
CSS 方法取自 a related post at SO,其中还包含指向更多方法的链接(部分带有额外的 JavaScript),但我无法获得它们 运行.
问题
任何想法,如何:
- 定义具有可滚动内容的 xaringan 幻灯片 class 或
- 将幻灯片定义为真正的“长幻灯片”,即长 html 页
其中“包含可滚动内容的幻灯片 class”或“长幻灯片”class 可以定义为:
---
class: scrollable-slide
类似于:
---
layout: false
class: inverse, middle, center
remark.js
并不是在考虑可滚动幻灯片的情况下制作的,这意味着如果不在 remark.js
上添加主要功能或破坏某些 remark.js
功能,则无法实现滚动。
如果您愿意破坏某些功能,我能想到的破解可滚动幻灯片的最简单方法是更改 .remark-slide-scaler
class 的 y-overflow
。我们所要做的就是添加以下 CSS:
.remark-slide-scaler {
overflow-y: auto;
}
要包含此 CSS,您可以将其写入文件,比如 scrollable.css
,并将其包含在 xaringan
配置块中,如下所示:
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
此 CSS 将为所有内容比幻灯片本身长的幻灯片添加滚动条。
易碎的东西
滚动浏览幻灯片
默认情况下 remark.js
允许您从一张幻灯片滚动到下一张或上一张幻灯片。但是,当我们在幻灯片上有滚动条时,我们希望禁用此行为。
解决这个问题的正确方法是在 remark.js
中编写实现一些功能,在适当的时候禁用和启用默认滚动行为。
一种简单的方法是简单地禁用滚动幻灯片。我们可以通过将 scroll: false
添加到我们 xaringan
配置的 nature
块中的 navigation
块来实现:
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
nature:
navigation:
# Disable scrolling through slides to
# allow scrolling in slides
scroll: false
页码
页码位于幻灯片框架的底部,但贴在幻灯片内容的底部。这意味着当您向下滚动可滚动幻灯片时,页码也会向上滚动。
要正确解决此问题,我们必须更改 remark.js
呈现内容的方式。一个常见的解决方案类似于 this,它涉及将主要内容与页脚放在单独的容器中。此页脚将包含页码。
一个简单的解决方案是隐藏页码。我们可以通过将以下内容添加到 scrollable.css
:
.remark-slide-number {
display: none;
}
克隆
remark.js
有一个称为“克隆”的功能,它可以让您打开多个幻灯片实例,但都同步到同一页面。因此,当一个实例转到下一张幻灯片时,所有其他幻灯片也会这样做。不幸的是,对于我们的滚动幻灯片,这并没有像预期的那样工作。 remark.js
无法记录页面向下滚动的距离,因此无法将其传达给其克隆。这意味着在一个实例中您可能一直向下滚动,但其他实例仍将停留在内容的顶部。一个简单的解决方案就是不使用此功能。
正在打印(未测试)
我没有对此进行测试,但我可以想象滚动幻灯片会干扰打印。内容将被截断,或者长页面将被完整打印,可能会与页面上的其他内容重叠。一个简单的解决方案就是不打印幻灯片。
可能还有更多功能,例如打印,可能会或可能不会被滚动幻灯片中的黑客破坏。
结论
总而言之,如果您能够忍受有限的功能,您可以通过首先创建一个文件 scrollable.css
来破解滚动幻灯片,其中包含:
.remark-slide-scaler {
overflow-y: auto;
}
.remark-slide-number {
display: none;
}
其次,在您的 xaringan
配置中包括 scrollable.css
和 scroll: false
。我在下面包含了一个示例幻灯片来说明。
---
title: "Scrollable slides"
output:
xaringan::moon_reader:
css: ["default", "scrollable.css"]
nature:
navigation:
# Disable scrolling through slides to
# allow scrolling in slides
scroll: false
---
class: center
# First a normal short slide
Some content here
---
class: scrollable-slide
# A
# long
# slide
# that
# requires
# scrolling
# on
# my
# system
---
# End slide
其他选项
如果您没有那么多需要很长的幻灯片,您可以选择制作讲义。如果你用 rmarkdown
做这个,它会使讲义的源文件与幻灯片的源文件非常相似,将允许导出为不同的格式(如 html),并且会让你使用 remark.js
的所有功能。
另一种选择,如果您确实需要这个并且可以很好地说明为什么这对其他人也有用,那么可以在 remark.js
GitHub page 对于可滚动的幻灯片。