gpt4 book ai didi

r - 如何将 here() 用于 css、before_body 和 after_body 的路径?

转载 作者:行者123 更新时间:2023-12-02 00:52:19 26 4
gpt4 key购买 nike

我有一组分布在文件夹层次结构中的 RMarkdown 文档。所有文档都引用相同的 CSS 和页眉/页脚文件。我目前有硬编码这些文件的路径,但这很难维护。我更喜欢动态生成路径。

这有效(日期在代码中动态生成):

---
title: "Untitled"
date: "`r Sys.Date()`"
output: html_document
---

但这不起作用:
---
title: "Untitled"
date: "`r Sys.Date()`"
output:
html_document:
css: '`r here::here("styles/styles.css")`'
includes:
before_body: '`r here::here("styles/header.html")`'
after_body: '`r here::here("styles/footer.html")`'
---

文件 styles.css , header.htmlfooter.html都位于 styles/项目根目录下的文件夹。当我使用 here::here() 引用这些文件时从控制台它完美地工作。

但是,当我编译 RMarkdown 时,会出现如下错误:
File `r here::here( not found in resource path
Error: pandoc document conversion failed with error 99

上述错误与 CSS 文件有关。然后对于页眉和页脚:
pandoc: `r here::here("styles/header.html")`: openBinaryFile: does not exist
(No such file or directory)

这段代码达到 Pandoc 的程度这一事实向我表明,代码块没有被评估。

我在做傻事吗?这是预期的行为吗?在我看来,能够动态生成路径会非常有帮助。

最佳答案

使用 yaml::yaml.load() 解析 YAML header 功能。
该函数的手册页解释说

There is a built-in handler that will evaluate expressions that are tagged with the !expr tag. Currently this handler is enabled by default, but the handler is being disabled by default in an upcoming version for safety and security reasons. If you do not explicity set the eval.expr argument to TRUE, you will get a warning if an expression is evaluated. Alternately, you can set the option named yaml.eval.expr via the options function to turn off the warning.



因此,您可以使用此 YAML header 实现您的目标:
---
title: "Untitled"
date: "`r Sys.Date()`"
output:
html_document:
css: !expr here::here("styles/styles.css")
includes:
before_body: !expr here::here("styles/header.html")
after_body: !expr here::here("styles/footer.html")
---

关于r - 如何将 here() 用于 css、before_body 和 after_body 的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com