จะเพิ่มสารบัญใน Rmarkdown ได้อย่างไร?


89

ฉันใช้ RStudio ในการเขียนเอกสาร markdown และต้องการเพิ่มสารบัญ (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 หากทุกอย่างล้มเหลว
baptiste

1
@umairdurrani ตกลง. ตัวอย่างไม่มีส่วนหัวใด ๆ คุณต้องการเป็นอะไรในสารบัญ?
MrFlick

1
ขอบคุณ @baptiste ฉันมีปัญหากับสิ่งนี้เช่นกัน แต่การเยื้องแก้ไขอย่างถูกต้อง
Alex

1
การเยื้องที่เหมาะสมในส่วนหัวเป็นสิ่งสำคัญ
N Brouwer

คำตอบ:


77

ไวยากรณ์คือ

---
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

66

ไวยากรณ์ที่มีตัวเลือกเพิ่มเติม:

---
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 ได้อย่างไร? ขอบคุณ
Daniel

1
@Daniel - ลองใช้ anchor link 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.