我有一个闪亮的应用程序,可以生成 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 中通过文件名引用字体。由于字体位于同一目录中,因此不需要路径。