Как отображать изображения в Markdown на GitHub, сгенерированные из knitr без использования внешнего хостинга изображений?

мне нравится загружать репозитории в github, которые включают несколько файлов Markdown и Markdown.

здесь пример такого файла уценки на github. А вот снимок экрана.


enter image description here


Проблема в том, что изображения не отображаются. Вы можете нажать на изображение, и вы перейдете туда, где хранится файл. Файл ссылка:
 https://github.com/... /blob/.../myfigure.png

тогда как я предполагаю, что это необходимо ссылка

 https://github.com/... /raw/.../myfigure.png

мне:

imgur: я мог бы использовать внешний хостинг изображений (например,посмотреть этот пример), добавив следующий код:

```{r setup}
opts_knit$set(upload.fun = imgur_upload) # upload all images to imgur.com
````
по разным причинам я не хочу этого делать (у меня проблема с загрузкой, когда за брандмауэром, это медленно, это создает ненужную зависимость)

Rpubs: там же RPubs что довольно круто. Однако, на время публикации кажется более подходящим для одиночных документов уценки, а не для нескольких документов уценки R. И это не обеспечивает такой тесной связи между исходным R Markdown и документом Markdown.

вопрос

  • существует ли рабочий процесс для использования R Markdown и knitr для создания файлов Markdown, которые при загрузке в github позволяют файлу Markdown отображать изображения, хранящиеся в репозитории github?

2 ответов


Это было частью минимального примера, используйте

opts_knit$set(base.url='https://github.com/.../raw/.../')

посмотреть изменения здесь и здесь.

Также см. http://yihui.name/knitr/options.

редактировать [С обновлением для восстановления базы.url-адрес прежнего значения

Что касается переключения, вы можете определить функцию как

create_gitpath <- function(user, repo, branch = 'master'){
   paste0(paste('https://github.com', user, repo, 'raw', branch, sep = '/'),'/')
}

my_repo <- create_gitpath(user, repo)

knit.github <- function(..., git_url  ){
 old_url <- opts_knit$get('base.url')
 on.exit(opts_knit$set(base.url = old_url))
 opts_knit$set(base.url  = git_url)
 knit(..., envir = parent.frame())
}

запустить с knit пока вы не захотите нажать на выполнить knit.github(..., git_url = my_repo)


как насчет следующего кода в начале вашего файла markdown?

``` {r setup,echo=FALSE,message=FALSE}
gitsubdir <- paste(tail(strsplit(getwd(),"/")[[1]],1),"/",sep="")
gitrep <- "https://github.com/mpiktas/myliuduomenis.lt"
gitbranch <- "master"
opts_knit$set(base.url=paste(gitrep,"raw",gitbranch,gitsubdir,sep="/"))
```

можно настроить его так, чтобы gitrep и gitbranch будет сообщено git. Здесь я предположил, что я на один уровень каталога ниже основного каталога репозитория git. Опять же, это может быть изменено, чтобы приспособить более сложные сценарии.

Я тестировал на github, вот Rmd и тегом md.