当前位置: 首页 > 知识库问答 >
问题:

如何在rmarkdown的样式标签中包含@font-face?

仉英朗
2023-03-14

是否可以使用CSS@font-face向rmarkdown提供字体文件?

<style>
@font-face {
    font-family: "Custom";
    src: url(https://github.com/stevecondylios/fonts/raw/master/CircularStd-Book.ttf) format("truetype");
}
body {
    font-family: "Custom", Verdana, Tahoma;
}
</style>

请注意,上面完全相同的css代码(少了样式标记)在本地存储在外部。css文件中并在RMD的yaml中引用

---
title: "My Rmarkdown doc"
date: "28 April 2020"
output: 
  html_document:
    css: mystyles.css
---

如果这是a/B问题,我的简单目标是应用自定义字体,同时避免使用Rmd文件本身以外的任何本地文件(即没有本地外部样式表,尽管从web上读取文件也很好)。

我认为唯一的两个选项要么是从web中读取字体文件,要么是在Rmd本身的标记中对字体信息进行base64编码。我一直在尝试这两种方法,但收效甚微。

  html_document:
    code_folding: hide
    css: get_file(www.mysite.com/mystyles.css)

为了更好的衡量,我也试过

```{r}
css_url <- "https://github.com/stevecondylios/fonts/raw/master/CircularStd-Book.ttf"
```

<style>
@font-face {
    font-family: "Custom";
    src: url(`r css_url`) format("truetype");
}
body {
    font-family: "Custom", Verdana, Tahoma;
}
</style>
```

我了解到不能在HTML正文中声明@font-face,而必须在标题中声明@font-face。我们确实可以将HTML标记添加到RMarkdown头中,但这是在外部文件中读取的,这正是我试图避免的,所以回到正方形。

共有1个答案

鲜于允晨
2023-03-14

对于其他想这样做的人来说,这个答案是有帮助的。

基本上:

  1. 从任何字体网站下载.tff(字体)文件
  2. 将其转换为base64(在mac上,只需base64myfont.ttf>myfont_base64.txt
  3. myfont_base64.txt的内容复制到下面的占位符中,并将全部内容放在您的RMarkdown中的某个地方(它不必像我以前怀疑的那样在HTML中,而是在任何地方,例如都可以)
<style>
@font-face {
    font-family: 'myfont';
    src: url(data:font/truetype;charset=utf-8;base64,<<copied base64 string>>) format('truetype');
    font-weight: normal;
    font-style: normal;
}
body { 
    font-family: "myfont", Verdana, Tahoma;
}
</style>
 类似资料:
  • 我有问题为Outlook创建HTML签名电子邮件。 我有一个样式标签前签名和增加媒体宽度的回应电子邮件。

  • 问题内容: 每当我尝试在React的中使用Font Awesome图标时,尽管它可以在普通HTML中运行,但它不会显示在结果网页上。 这是一个实时示例:http : //jsfiddle.net/pLWS3/ 哪里错了? 问题答案: React使用属性,例如DOM。 如果您使用开发版本,并查看控制台,则会出现警告。您可以在jsfiddle上看到它。 警告:未知的DOM属性类。您是说classNam

  • 问题内容: 我想知道如何设置新标签的样式。 我只想更改背景颜色和值颜色,但找不到正确的CSS属性。对于基于Webkit的浏览器,我发现了以下这些: 在哪里可以找到基于壁虎的浏览器(Firefox),Opera和IE的正确CSS属性? 问题答案: 我在Webkit浏览器中使用以下代码对仪表进行了精细的渐变设计: 但是,CSS-Tricks的Chris Coyier 建议使用以下HTML代码: …而不

  • 问题内容: 我正在使用D3生成条形图。我在 _x_轴上使用的标签每个都是几个字长,由于这会使所有标签重叠,因此我需要将这些标签跨行打断。(如果我可以用换行符替换每个标签中的所有空格,那将是很好的。) 我最初是通过用文字换行符()替换空格并在标签的元素上进行设置来尝试此操作的。不幸的是,事实证明SVG不尊重此属性。接下来,我尝试将每个单词都包装成以后可以样式化的格式。我通过此功能传递了每个标签: 但

  • 问题内容: 对我的应用程序使用的各种视图使用单独的样式表的正确/可接受的方法是什么? 目前,我在视图/部分的html顶部放置了一个link元素,但有人告诉我这是一种不好的做法,即使所有现代浏览器都支持它,但我可以理解为什么对此不满意。 另一种可能性是将单独的样式表放在我的index.html中,但是我希望它仅在以性能名义加载其视图时才加载样式表。 这是不好的做法吗,因为样式只有在将css从服务器加

  • 这困扰我太久了,我很感激你的帮助。我一直在为kable投入时间,但它并没有像我希望的那样对我产生效果。我希望创建多组行,如图所示 执行此操作的代码如下: 这显然不够好。如果我织成pdf,我可以得到正确的输出(第一张图片),但仅此而已。如果我尝试执行save_kable(),结果显示为HTML格式,如第二幅图像所示。每次都编织成pdf格式是如此不切实际,如果我不能解决这个问题,我就不能再使用kabl