自定义R Quarto PDF输出文件名

4
当我渲染r quarto pdf文档时,如何自定义文件名?以前在使用Rmarkdown时,我在YAML中使用以下代码:
---
title: "Some title"
author: "First Last"
date: "`r format(Sys.Date(), '%d %B, %Y')`"
output: pdf_document
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), paste0(Sys.Date(),"_Report","_FirstLast",".pdf"))) })
---

当我点击“Knit”按钮时,pdf文档的文件名将为2022-08-08_Report_FirstLast.pdf。
使用quarto pdf有方法实现这一点吗?我认为需要使用quarto_render函数,但不知道如何操作。
3个回答

8

使用quarto_render函数的output_file参数。

file_name = paste0(Sys.Date(),"_Report","_FirstLast", ".pdf")

quarto_render("your_qmd_file.qmd", output_file = file_name, output_format = "pdf")

关于您正在尝试的方法,

  • 首先,据我所知,quarto中没有knit yaml键。

  • 其次,虽然可以在使用!expr 前缀的代码块选项中使用R代码,但目前在文档yaml部分中无法使用内联R代码来回答这个问题(2022年9月3日)。请参见Github上的此讨论

尽管在这个Github讨论中有一些建议的解决方法可用于在yaml中使用r代码,但在您的情况下,使用quarto_render来控制输出文件名似乎是最简单的选项。


此外,如果您的输出文件名很简单(即不包含任何R代码语法),则可以使用output-file yaml选项。

---
title: "Testing Output file name"
format:
   pdf: 
    output-file: "output_file_name"
    output-ext:  "pdf"
---


## Quarto

Quarto enables you to weave together content 
and executable code into a finished document.
To learn more about Quarto 
see <https://quarto.org>.

## Running Code

When you click the **Render** button 
a document will be generated that 
includes both content and the output of 
embedded code. 

这将在源文件所在的目录中创建名为output_file_name.pdf的输出文件。

谢谢。这个起作用了。是否有一种方法将 Sys.Date() 添加到 'output-file' 参数中? - Shubham
现在无法在输出文件中使用 Sys.Date - shafee

4

如果您习惯在bash shell中使用Quarto CLI(这可能更方便进行自动报告生成),您可以像这样对输出进行时间戳。

now=`date +"%Y-%m-%d"`
quarto render my_doc.qmd --output "./out_$now.pdf" --to pdf

0
CLI的方法对于自动化很有用,但与在使用RMarkdown时点击knit按钮不太方便。
我采用了一种不同的方法,使用quarto项目来实现相同的输出文件日期戳效果。
Quarto具有使用R/Python/Lua/Typescript编写的脚本来后处理输出文件的能力。我只会R语言,所以编写了一个简单的脚本来将输出的pdf文件重命名为包含当前日期的文件名。
它需要一个_quarto.yml文件来调用项目,并包含以下YAML内容,用于指定后渲染脚本并将pdf文件指向特定目录(请注意,latex-output-dir参数特意不缩进):
project:
  post-render: ./scripts/datestamp_output_file.R
latex-output-dir: ./output

datestamp_output_file.R脚本包含以下内容:

output_file <- Sys.getenv("QUARTO_PROJECT_OUTPUT_FILES")

file.rename(
  output_file,
  paste0(
    tools::file_path_sans_ext(output_file),
    format(Sys.time(), '-%Y-%m-%d'),
    '.',
    tools::file_ext(output_file))
)

当你在RStudio中点击渲染时,这个渲染脚本会获取由quarto生成的文件名,并在文件名后附加当前日期进行重命名。如果有多个输出文件,这个脚本会给所有输出文件都附加日期。
我知道这个方法有点取巧,但如果你正在修改一个文档,比如更新数据,并且想要保留PDF输出,但又不需要频繁自动化生成,这个方法还是可以的。
有一个缺点是,你会在控制台上看到一个错误提示,说quarto渲染没有创建任何输出,并且在RStudio的查看器选项卡中也无法显示PDF文件,因为它期望的是原始未更改的输出文件名。我不确定这个问题是否可以修复,但如果有人知道如何修复,那就太好了。
请参考https://quarto.org/docs/projects/scripts.html获取更多关于脚本的信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接