在R markdown html文档的右上角插入徽标

szqfcxe2  于 2023-10-13  发布在  其他
关注(0)|答案(8)|浏览(151)

我正试图把我的公司标志放在我的html文档的右上角
下面是我的代码:

<script>
  $(document).ready(function() {
    $head = $('#header');
    $head.prepend('<div class="knitr source"><img src="logo.png" width="220px" align="right"   ></div>')
  });
</script>

---
title: "Title"
author: "Author"
date: "Date"
theme: bootstrap
output: html_document
keep_md: true
---

```{r echo=FALSE,  include=FALSE}
knitr::include_graphics('./logo.png')

1) Header

但是,由于logo.png是一个本地文件,当共享html文档时,人们无法看到它。
此外,我还尝试了以下方法

---
title: "Title"
author: "Author"
date: "Date"

output: 
  html_document:
    css: markdown.css
    includes:
      in_header: extLogo.html
---

其中extLogo.html

<div class="logos"><img src="logo.png" width="220px" align="right"></div>

但是它在Title为(<div class="container-fluid main-container">)的div外部创建了一个div。有人能帮忙吗?

nom7f22z

nom7f22z1#

您可以使用htmltools::img和一点内联CSS进行定位。src可以直接采用路径,但当图像不像绘图那样处理时,有时knitting无法将图像正确转换为URI,这反过来又导致它们无法呈现。在YAML中使用self_contained: false是一个快速的解决方案,但使用knitr::image_uri手动转换图像并不难:

---
title: "Title"
author: "Author"
output: html_document
---

```{r, echo=FALSE}
htmltools::img(src = knitr::image_uri(file.path(R.home("doc"), "html", "logo.jpg")), 
               alt = 'logo', 
               style = 'position:absolute; top:0; right:0; padding:10px;')

1. Header

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.


![](https://i.stack.imgur.com/eP7OF.png)
2mbi3lxu

2mbi3lxu2#

如果你使用的是经典的html输出,那么这个被接受的答案是有效的。如果像我一样,你也使用bookdown,标志需要出现在每一页上。所以,如果有人找到这个答案,但想添加一个标志与bookdown,我给给予我的主张:

  • 我们需要创建一个外部文件,并在头文件中调用脚本,幸运的是,我们可以直接在rmarkdown脚本中创建它。
  • 我们还使用htmltools::img来允许在没有外部图像文件的情况下包含图像。

以下是我的rmarkdown脚本作为示例:

---
title: "Logo with Bookdown"
author: "Author"
date: '`r format(Sys.time(), "%d %B, %Y")`'
output:
  bookdown::gitbook:
    includes:
      in_header: header.html
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
# Create the external file
img <- htmltools::img(src = knitr::image_uri(file.path(R.home("doc"), "html", "logo.jpg")), 
               alt = 'logo', 
               style = 'position:absolute; top:50px; right:1%; padding:10px;z-index:200;')

htmlhead <- paste0('
<script>
document.write(\'<div class="logos">',img,'</div>\')
</script>
')

readr::write_lines(htmlhead, path = "header.html")

Page 1

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)

Page 2

You can also embed plots, for example:

plot(pressure)

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

zd287kbt

zd287kbt3#

我采取了一种完全不同的方法来回答上面的问题,只使用CSS,而不使用绝对定位。我将以下CSS代码块添加到我的文档中,但您也可以创建一个独立的CSS文件并将其包含在Rmd YAML头中。

```{css, echo=FALSE}
#header {
  background-image: url("data: BASE64 encoded string for image");
  background-repeat: no-repeat;
  background-position: 95%;
  padding: 5px;
}
#header > * {
  max-width: calc(100% - 225px);
}
@media only screen and (max-width:600px){
#header > .title { 
  margin-top: 105px;
}
#header > *
  max-width: 100%;
}
#header {
  background-position: 10px 10px;
}
}

这里发生了一些事情。要解决关于图像的原始问题,您需要自己对图像进行base64编码,并将字符串放入背景图像URL中。
它还以一种被动的方式处理徽标和标题内容重叠的问题,在所有标题元素上设置`max-width`,并将徽标放置在窄窗口(小于600 px)的标题上方。
如果你根本不关心重叠,那么你只需要第一个`#header`选择器代码。如果你不关心狭窄的设备React式布局,那么你可以保留前两个选择器,删除@media块。
两个像素值`225px`和`105px`是基于我的标志,将需要改变,以适应您的图像加上一些填充。
iezvtpos

iezvtpos4#

@alistaire接受的回答真的很有用。然而,在我的情况下,标题和徽标重叠,因为我的markdown中的标题真的很长。
环顾四周,我想出了以下解决方案,我把它张贴在案件是有用的任何人。

```{js logo-js, echo=FALSE}
$(document).ready(function() {
  $('#header').parent().prepend('<div id=\"logo\"><img src=\"www/xxxxx.png\" style=\"position:absolute; top:0; right:0; padding:20px; height:120px\"></div>');
  $('#header').css('margin-right', '120px')
});

这应该添加在markdown的任何地方,当然它只适用于HTML输出。我们的想法是为徽标添加一个新的`div`,然后为标题添加一个`margin-right`,这样它就不会重叠。
请注意,我不认为这是真正的最佳;我对`css`的使用是笨拙的,如果有人想出了更好的方法,我很高兴听到。无论如何,它似乎工作得很好。
gjmwrych

gjmwrych5#

作为对阿利斯泰尔回答的补充,并回答了马可的问题。可以使用宽度和高度来选择图形的大小。比如说,

---
title: "Title"
author: "Author"
output: html_document
---

```{r, echo=FALSE}
htmltools::img(src = knitr::image_uri(file.path(R.home("doc"), "html", "logo.jpg")), 
               alt = 'logo', 
               style = 'position:absolute; top:0; right:0; padding:10px;',
               width = "300px",
               heigth = "300px")

1. Header

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor

bq3bfh9z

bq3bfh9z6#

要使徽标在标题div* 内右上对齐,请执行以下操作:
1.创建名为 header-logo.html 的文件,其中包含:

<script>
  $(document).ready(function() {
    $('#header').prepend('<img src="https://via.placeholder.com/350x350" style="float:right" width="30%"/>');
  });
</script>

1.使用以下内容更新您的.Rmd:

output:
   html_document:
     includes:
       in_header: header-logo.html
  1. base64手动编码徽标,如果您希望.HTML自包含,请替换src中的URL。
uurity8g

uurity8g7#

如果你做了一个rmarkdown网站,你想在导航栏的右边添加一个标志:
在_site.yml中包含一个before_body:

include:
  before_body: logo.html

在html模板中:

<script type="text/javascript">
$(function() {
$('.navbar-right').before($('.logo'));
})
</script>

<div class="logo pull-right">
<img src="logo.png" alt="logo" width="150" style="margin-top: 15px;">
</div>

关键是在插入的div中包含pull-right类。

nx7onnlm

nx7onnlm8#

我需要在html_notebook中这样做,它允许用户下载.Rmd源代码。使用htmltools的公认答案在这种情况下不起作用。
相反,我使用了类似的CSS风格,直接在markdown中的一些HTML中接受答案:

---
title: "cbec HSI processing workflow"
author: "Beau Thetford"
date: "October 10, 2023"
output: 
  html_notebook:
    highlight: tango
---
<img src="assets/drop.png" style='width: 100px; position:absolute; top:0; right:0; padding:10px;'/>

---

这种方法也适用于html_document

相关问题