首页 > 解决方案 > 替换包含转义字符的文件头

问题描述

我为具有以下标头的包创建了一个小插图:

---
title: "My package vignette"
output: rmarkdown::html_document
vignette: >
  %\VignetteIndexEntry{MyPackage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

但是,小插图格式不允许 html_document 允许的全部功能

我想自动更改 YAML 标头,以便能够以完整的 html_document 格式编织小插图(使用类似的选项toc_float: true

我正在尝试使用 读取.Rmd文件ReadLines并替换标题gsub,但我正在努力使用转义字符/正则表达式:

content <- readLines('vignettes/MyPackage.Rmd',encoding = 'UTF-8')

vignette_header <- "output: rmarkdown::html_document
vignette: >
  %\\VignetteIndexEntry{MyPackage}
  %\\VignetteEngine{knitr::rmarkdown}
  %\\VignetteEncoding{UTF-8}"

normal_header <- 
'output:
  html_document:
    toc_float: true'  

gsub(vignette_header,normal_header,content )
Error in gsub(vignette_header, normal_header, content) : 
  regular expression 'output: rmarkdown::html_document
vignette: >
  %\VignetteIndexEntry{ALPSYSparams}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}' incorrect, because of 'Invalid contents of {}'

感谢您的建议,欢迎使用转义字符修改文件头的替代方法。

标签: ryamlr-markdownknitrvignette

解决方案


作为一种解决方法,我没有修改标题,而是制作了两个具有不同标题的 Rmarkdown 文件,并使用childchunck 选项插入相同的 Markdown 正文:

  1. 小插图:
---
title: "My package vignette"
output: rmarkdown::html_document
vignette: >
  %\VignetteIndexEntry{MyPackage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r child=here::here('data/MyPackageVignetteBody.Rmd')}

```
  1. 功能齐全的降价:
---
title: "My package fully featured Markdown"
output: 
  html_document:
    toc: true
    toc_float: true
---

```{r child=here::here('data/MyPackageVignetteBody.Rmd')}

```

推荐阅读