Используйте определенный номер слайда для slideNumberFormat в xaringan

В презентации xaringan аргумент slideNumberFormat часто устанавливается равным %current% / %total%. Можно ли использовать в этом аргументе конкретный номер слайда?

Например, если у меня есть последний слайд вроде этого:

---
name: mylastslide
# Thanks

со слайдами приложения позади, я хочу отображать номера слайдов, например %current% / %mylastslide%, с %mylastslide% номером моего слайда с именем mylastslide.

Спасибо.

[Изменить после предложения @ user2554330]

Для этого кода с инкрементным слайдом

---
title: "Presentation Ninja"
subtitle: "⚔<br/>with xaringan"
author: "Yihui Xie"
institute: "RStudio, PBC"
date: "2016/12/12 (updated: `r Sys.Date()`)"
output:
  xaringan::moon_reader:
    lib_dir: libs
---

background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/be/Sharingan_triple.svg)

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
```

<script>
var slideshow = remark.create({slideNumberFormat : function (current, total) {
  return 'Slide ' + current + ' of ' + (this.getSlideByName("mylastslide").getSlideIndex() + 1); },
  highlightStyle: "github",
  highlightLines: true,
  countIncrementalSlides: false});
</script>

Image credit: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Sharingan_triple.svg)

---
class: center, middle

# xaringan

---

hello 

--

world

--

thanks

--

really

--

byebye

---
name: mylastslide

# Final slide

Install the **xaringan** package from [Github](https://github.com/yihui/xaringan):

```{r eval=FALSE, tidy=FALSE}
devtools::install_github("yihui/xaringan")
```

---

# Appendix

Последний слайд (т.е. приложение) имеет номер Slide 6 of 9 (а не Slide 6 of 5), а 9 - это индекс URL для mylastslide. (Я использовал + 1 в функции slideNumberFormat, потому что индексы начинаются с 0.)

Спасибо.


person abichat    schedule 04.12.2020    source источник


Ответы (1)


Вы, конечно, можете установить для формата фиксированное значение для последнего слайда, например %current% / 34. Но вы также можете установить его на функцию Javascript. (Отредактировано для добавления :) Сложность заключается в том, что вам нужно включить все параметры, которые обычно появляются в аргументе nature. Итак, вы хотите что-то вроде

<script>
var slideshow = remark.create({slideNumberFormat : function (current, total) {
  return 'Slide ' + current + ' of ' + this.getSlideByName("mylastslide").getSlideIndex(); },
  highlightStyle: "github",
  highlightLines: true,
  countIncrementalSlides: false});
</script>

Вы называете слайд, помещая текст

name: mylastslide

внизу слайда после знаков ---. Итак, вот полный пример, основанный на первых нескольких слайдах шаблона xaringan:

---
title: "Presentation Ninja"
subtitle: "⚔<br/>with xaringan"
author: "Yihui Xie"
institute: "RStudio, PBC"
date: "2016/12/12 (updated: `r Sys.Date()`)"
output:
  xaringan::moon_reader:
    lib_dir: libs
---

background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/be/Sharingan_triple.svg)

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
```

<script>
var slideshow = remark.create({slideNumberFormat : function (current, total) {
  return 'Slide ' + current + ' of ' + this.getSlideByName("mylastslide").getSlideIndex(); },
  highlightStyle: "github",
  highlightLines: true,
  countIncrementalSlides: false});
</script>

???

Image credit: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Sharingan_triple.svg)

---
class: center, middle

# xaringan

### /ʃaː.'riŋ.ɡan/

---
class: inverse, center, middle

# Get Started

---
name: mylastslide

# Hello World

Install the **xaringan** package from [Github](https://github.com/yihui/xaringan):

```{r eval=FALSE, tidy=FALSE}
devtools::install_github("yihui/xaringan")
```

В нем 5 слайдов, пронумерованных с 1 по 4 по 5 из 4.

Отредактировано для добавления: Как обсуждалось в комментариях, это не обрабатывает инкрементные слайды должным образом: getSlideIndex() подсчитывает инкрементные слайды отдельно. Мы хотим использовать getSlideNumber(), который остается неизменным для всех, когда мы используем параметр countIncrementalSlides: false. Однако в онлайн-версии remark-latest.min.js нет getSlideNumber(), вам нужно запросить remark-0.15.0.min.js.

Вы делаете это с помощью следующего YAML:

      xaringan::moon_reader:
        lib_dir: libs
        chakra: https://remarkjs.com/downloads/remark-0.15.0.min.js

После этого код ниже работал нормально:

<script>
var slideshow = remark.create({slideNumberFormat : function (current, total) {
  return 'Slide ' + current + ' of ' + this.getSlideByName("mylastslide").getSlideNumber(); },
  highlightStyle: "github",
  highlightLines: true,
  countIncrementalSlides: false});
</script>
person user2554330    schedule 04.12.2020
comment
Спасибо, это именно то, что мне нужно. Однако он не принимает во внимание инкрементные слайды (с --) [возможно, это другая функция, чем getSlideIndex], и другие аргументы в nature: не принимаются во внимание (например, ratio или scroll) [Я пытался указать сценарий js, например slideNumberFormat: "slidenumber.js" в ямл, но он не работает] - person abichat; 04.12.2020
comment
Я думаю, что первая проблема является следствием второй с аргументом countIncrementalSlides. - person abichat; 04.12.2020
comment
Да, извините за это. Я не могу найти способ обновить параметры слайда, поэтому вам нужно поместить в вызов remark.create все, что могло появиться в природе. Я обновлю свой ответ. - person user2554330; 04.12.2020
comment
Да, это работает. Но (извините) getSlideIndex дает индекс слайда (используется в URL-адресе), но не ожидаемый отображаемый номер (который может отличаться от инкрементных слайдов). Я попробовал .getSlideNumber() в конце, но из-за этого презентация заблокировалась на первом слайде ... - person abichat; 04.12.2020
comment
Я очень ценю вашу помощь, извините за то, что не продемонстрировал это ... Я обновил свой вопрос примером. Спасибо. - person abichat; 05.12.2020
comment
Хорошо спасибо. Определение настраиваемой функции JS позволяет мне по-разному нумеровать основные слайды (текущий / последний) и приложения (текущие), и это уже действительно здорово. Плохо для жесткого кодирования! - person abichat; 05.12.2020
comment
Я добавил более простое исправление. - person user2554330; 05.12.2020