如何以编程方式在 Officedown 文档中从 0 开始页码?

问题描述 投票:0回答:1

渲染下面的 R Markdown 返回一个包含两页且页码为 1 和 2 的 docx。我希望页码为 0 和 1。有没有办法以编程方式实现此目的?这没有触及渲染使用的reference_docx。

---
output: officedown::rdocx_document
---

```{r setup, include=FALSE}
library(officedown) # 0.3.0
```

# A simple header on page 1

\newpage

# A simple header on page 2
r r-markdown officedown
1个回答
0
投票

一种选择是首先渲染 R Markdown 文档,然后针对输出运行 VBScript。此方法改编自 officerWinTools 包中的代码。

将此代码块复制到 R Markdown 文档并运行它以呈现文档,然后根据需要重置页码。

```{r, eval=FALSE, include=FALSE}
set_pagenumbers_startingnumber <- function(x) {
  
  if(Sys.info()['sysname'] != "Windows"){
    stop('The this function requires Windows operating system.')
  }
  
  vbs_file <- tempfile(fileext = ".vbs")
  
  writeLines(
    c(
      'Set objWord = CreateObject("Word.Application")',
      'objWord.Visible = False',
      'objWord.DisplayAlerts = False',
      sprintf('Set doc = objWord.Documents.Open("%s")', normalizePath(x)),
      'doc.Sections(1).Footers(2).PageNumbers.RestartNumberingAtSection = True',
      'doc.Sections(1).Footers(2).PageNumbers.StartingNumber = 0',
      'doc.Saved = False',
      'doc.Save',
      'doc.Close (TRUE)',
      'objWord.Quit'
    ),
    con = vbs_file,
    sep = "\n",
    useBytes = FALSE
  )
  
  shell(shQuote(vbs_file), "cscript", flag = "//nologo")
  
  invisible(x)
}

rstudioapi::getSourceEditorContext()$path |>
  rmarkdown::render() |>
  set_pagenumbers_startingnumber()
```
© www.soinside.com 2019 - 2024. All rights reserved.