Як додати зміст у Rmarkdown?


88

Я використовую RStudio для написання документів із наценкою і хочу додати Зміст (TOC) у верхню частину документів, щоб користувач міг натиснути відповідний розділ для читання. Були деякі відповідні приклади на rpubs, але зараз я, здається, не можу їх знайти. Зверніть увагу, що я не використовую pandocі я зовсім новачок у Rmd& knitr. Чи є спосіб додати TOC без використання pandoc? Якщо використання pandocобов’язково, то які функції є важливими?

РЕДАГУВАТИ

Ось невеличка зразкова сторінка:

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
---

Header 1
---------------
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
    
## Header 2
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
    
```{r}
summary(cars)
```

You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
```
### Header 3
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Я спробував запустити це в RStudio v 0.98.864, і це спрацювало! але, на жаль, це не спрацювало на 0.98.501 та 0.98.507. Я працюю над дисертацією в 0.98.501, і після оновлення RStudio деякі мої аналізи не спрацювали. Отже, я повернувся до 0.98.501. Що мені робити зараз? Я дуже хочу TOC, але без шкоди результатам інших аналізів.


2
Я вважаю, що пакет rmarkdown, який використовується Rstudio, є обгорткою навколо pandoc, тому ви повинні мати можливість передавати відповідний параметр. Насправді, toc: trueу фронті YAML це слід робити.
баптист

1
спробуйте відступи, слідуючи приклади в rmarkdown.rstudio.com і оновлення Rstudio , якщо все інше зазнає невдачі
Батист

1
@umairdurrani Добре. зразок не має заголовків. Яким ви хочете бути у змісті?
MrFlick

1
спасибі @baptiste, у мене теж була проблема з цим, але відступи правильно виправили.
Алекс

1
правильний відступ у заголовку є ключовим
N Brouwer

Відповіді:


76

Синтаксис є

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
---

в документації . Переконайтеся, що це на початку вашого документа. Також переконайтесь, що ваш документ насправді має заголовки, інакше R не може сказати, що ви хочете в змісті.


2
Це саме те саме, що я поклав поверх Rmd-файлу (перед заголовком) і натиснув в'язаний HTML. Отриманий документ не має змісту і був створений без помилок. Чи є якийсь інший варіант змінити десь?
umair durrani

2
Зараз я пробував версії RStudio 0.98.501, .507 та .897 (попередній випуск), але ця метадана не спрацювала.
umair durrani

1
@umairdurrani чи можете ви відредагувати своє запитання, включивши невеликий зразок документа, який вам не підходить. Таким чином ми можемо спробувати точно те саме, щоб побачити, що відбувається.
MrFlick

63

Синтаксис з іншими параметрами:

---
title: "Planets"
author: "Manoj Kumar"
date: "`r format(Sys.time(), '%B %d, %Y')`"
output: 
  html_document:
    toc: true # table of content true
    toc_depth: 3  # upto three depths of headings (specified by #, ## and ###)
    number_sections: true  ## if you want number sections at each table header
    theme: united  # many options for theme, this one is my favorite.
    highlight: tango  # specifies the syntax highlighting style
    css: my.css   # you can add your custom css, should be in same folder
---

4
Я думаю, що це toc_depthзамістьdepth
F. Privé

1
@ F.Privé Я написав цю відповідь 1 рік тому. Не впевнений, що пакет вніс ці зміни. Дякуємо за оновлення.
Manoj Kumar

Як додати клік у кожному розділі, щоб повернутися до TOC? подяка
Даніель

1
@Daniel - Спробуйте використати HTML-посилання на прив'язку, наприклад: <a href="#top"> Back To Top </a>у місці (рядки коду), де ви хочете, щоб воно з'явилося. Сподіваюся, це працює.
Manoj Kumar

22

Якщо ви використовуєте pdf_document, можливо, ви захочете додати зміст на новій сторінці, що toc: trueне дозволяє. Зміст розміщується відразу після заголовка документа, автора та дати - тому що він розміщений на yaml.

Якщо ви хочете, щоб це було на новій сторінці, вам слід використовувати латексну мову. Ось що я зробив.

---
title: \vspace{3.5in}"Title"
author: "Name"
date: "`r Sys.Date()`"
output:
   pdf_document:
      fig_caption: true
      number_sections: true
---

\newpage # adds new page after title
\tableofcontents # adds table of contents
\listoffigures
\listoftables
\newpage

Отже, після yaml (шматок між ---), я додав нову сторінку за допомогою \newpage, потім зміст за допомогою \tableofcontents, список рисунків за допомогою \listoffigures, список таблиць \listoftablesі нову сторінку перед усім іншим.

Зверніть увагу, що \vspace{3in}в заголовку додається вертикальний простір у 3 дюйма зверху перед друком yaml (заголовок тощо).

Детальніше читайте тут: https://www.sharelatex.com/learn/Table_of_contents

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.