将自定义字体部署到shinyapps.io,用于生成R Markdown报告的应用程序

将自定义字体部署到shinyapps.io,用于生成R Markdown报告的应用程序

我有一个闪亮的应用程序,可以生成 R Markdown 报告pdf 格式,所以我还使用 LaTeX 对其进行了自定义。在我的 YAML 中,我使用该fontspec包为整个文档指定自定义字体(時間),代码如下:

---
output:
  pdf_document:
    latex_engine: xelatex
header-includes:
  - \usepackage{fontspec}
  - \setmainfont{Times}
---

但是如果我有字体的 .otf 文件,我也可以使用此处指定的命令设置主字体问题,即通过指定绝对路径。

我的问题是,一旦将 Shiny 应用程序部署到 Shinyapps.io 上,在两种情况下,都找不到字体,并且未下载 R Markdown 报告。

您对如何在线指定字体有什么建议吗?谢谢!

答案1

我无法判断为什么你必须使用 XeLaTeX 或 LuaLaTeX,除非你查看了更多代码和实际错误消息。不过,使用这些引擎仍然是可能的。我的建议是使用

---
output:
  pdf_document:
    latex_engine: xelatex
mainfont: TeX Gyre Termes
---

作为 YAML 标头。这带来了两个变化。首先,使用特殊的 YAML 标头来设置字体名称,而不是使用原始 LaTeX 代码。其次,使用 Times-clone 代替 Times 字体。此字体应包含在 shinyapps.io 上的 TeX 安装中。如果没有,这将是联系其支持人员的一个很好的理由。

我已经在 Linux 上测试过它,它也应该可以在 Windows 上运行。但是,Mac OS 不允许使用 XeLaTeX 按名称从 TEXMF 树加载字体。在那里,您必须切换到 LuaLaTeX 或按文件名加载字体:

---
output:
  pdf_document:
    latex_engine: xelatex
header-includes:
- |
  ```{=latex}  
  \usepackage{fontspec}
  \setmainfont{texgyretermes-regular.otf}[
        BoldFont = texgyretermes-bold.otf,
        ItalicFont = texgyretermes-italic.otf,
        BoldItalicFont = texgyretermes-bolditalic.otf]
  ```
---

这也适用于 Linux(可能还有 Windows),但是所有必要的引用都相当丑陋。

现在对于如何在没有可用克隆的字体的情况下使用更普遍的问题,我会尝试以下方法:

  • 将字体作为 TTF 或 OTF 文件与 Rmd 文件一起包含在 Shiny 应用程序中。
  • 在处理之前将 Rmd 文件复制到临时目录时也复制字体文件。
  • 在 Rmd 中通过文件名引用字体。由于字体位于同一目录中,因此不需要路径。

相关内容