bookdown định dạng html với gitbook và split_by

Oct 10 2020

Tôi đang tạo báo cáo gitbook với gói bookdown của Rstudio.

Nó khá đơn giản về mã R cơ bản, chỉ là một vài chỉnh sửa gần đây cho:

  1. giảm văn bản xuống 80% chiều rộng trang
  2. sử dụng cột đôi và
  3. thêm số dòng trong mã R được hiển thị.

Mọi thứ hoạt động tốt, ngoại trừ khi tôi thêm " split_by: rmd" vào _output.yml. Khi làm như vậy, kết quả đầu ra không tôn trọng lề xung quanh văn bản nữa.

Tôi chưa biết nhiều về html, nhưng nhìn vào trình kiểm tra html cho thấy rằng các phần nằm bên ngoài định dạng trang bên trong khi sử dụng " split_by: rmd"

Mặc định (không có đối số split_by):

Với split_by: rmd

Đây là cảnh quay trong bóng tối vì tôi không thể chia sẻ mã và tôi không thể tạo lại lỗi với ví dụ bookdown tối thiểu từ Yihui: https://github.com/rstudio/bookdown-demo.

Bất kỳ đầu mối nào để xác định nguồn gốc của lỗi hoặc thậm chí đề xuất một giải pháp tốt hơn sẽ rất được hoan nghênh!

Xây dựng cuốn sách từ tập lệnh R:

bookdown::render_book(
  input = "index.Rmd",
  output_format = "bookdown::gitbook",
  output_dir = paste0("gitbook-", format(Sys.time(), format = "%Y-%m-%d-%H%M%S"))
)

Tiêu đề index.rmd YAML:

---
title: "blahblah"
subtitle: "blahblahblah"
author: "DRAFT"
date: "August 2020"
documentclass: article
fontsize: 12pt
geometry: margin=2cm
link-citations: yes
#mainfont: Arial
bibliography: packages.bib
site: bookdown::bookdown_site
biblio-style: apalike
urlcolor: blue
---

```{r setup, include=FALSE}

knitr::opts_chunk$set(echo = TRUE, eval = FALSE, attr.source='.numberLines') table_format <- knitr::opts_knit$get('rmarkdown.pandoc.to')

if (table_format %in% c("html", "latex")) {
  library(kableExtra)
  knitr::opts_chunk$set(fig.pos='H', fig.align='center', out.width='80%')
}

## Automatically create a bib database for R packages
knitr::write_bib(c(.packages(), 'bookdown', 'knitr', 'rmarkdown', 'Hmisc'), 'packages.bib')
```

_output.yml:

bookdown::gitbook:
      css: style.css
      config:
        toc:
          before: |
            <li><a href="./">My book title</a></li>
          #after: |
          #  <li><a href="https://github.com/rstudio/bookdown" target="blank">Published with bookdown</a></li>
        edit: null
        download: null
        sharing: null
        info: null
      split_bib: FALSE
      split_by: rmd

style.css:

p.caption {
  color: #777;
  margin-top: 10px;
}
p code {
  white-space: inherit;
}
pre {
  word-break: normal;
  word-wrap: normal;
}
pre code {
  white-space: inherit;
}

/* watermark for draft report
.watermark {
  opacity: 0.2;
  position: fixed;
  top: 45%;
  left: 45%;
  font-size: 500%;
  color: #606099;
  z-index: 1000000;
}
*/

.book .book-body .page-wrapper .page-inner {
  max-width: 80% !important;
}

/* Increase space to display line number in R chunks correctly */
pre.numberSource code > span > a:first-child::before {
  left: -0.3em;
}

/* for multi cols */
/*.cols {display: flex; } /* uncomment for flex column size */
.cols {display: grid; grid-template-columns: 30% 50% 20%;} /* for fixed column size */

Trả lời

1 GaelS Oct 12 2020 at 22:23

Tôi thấy rằng nguồn gốc của vấn đề là do \newpagetôi đã thêm vào đầu mỗi tệp rmd để xây dựng báo cáo ở định dạng pdf.

Giải pháp 1: là thay đổi split_by: rmdthành split_by: sectionvì các tệp rmd của tôi hầu hết tương ứng với các phần cấp 2.

Giải pháp 2: là đặt một trình bao bọc xung quanh \newpageđể chúng không được đánh giá khi đầu ra là html:

`r if (knitr::opts_knit$get('rmarkdown.pandoc.to') != "html") '
\\newpage
'`

Các cách tiếp cận khác cho giải pháp 2 đã được mô tả ở đây: Làm thế nào để thêm \ newpage trong Rmarkdown một cách thông minh?