Создание форматированных ссылок с разными стилями цитирования на научные статьи без DOI

Я хотел бы оформить ссылки на научные статьи в разных стилях цитирования с Р.

С помощью пакета rcrossref я могу легко создавать ссылки на определенные статьи на основе их DOI в указанном вами стиле. Однако не все документы имеют DOI, поэтому я ищу простой способ получить цитаты в тексте с разными стилями на основе информации о статье из записи BibTeX или какого-либо другого типа ввода.

Использование rcrossref: Пакет содержит length(rcrossref::get_styles()) 2209 различных стилей.

Например, вы можете получить в тексте ссылки на некоторые наиболее цитируемые статьи (DOI из этого источника: https://doi.org/10.1038/514550a) с разными стилями текста в элементе списка следующим образом:

library(rcrossref)
# some DOIs of interest
dois <- c("10.1038/514550a", "10.1038/227680a0", "10.1016/0003-2697(76)90527-3",  "10.1073/Pnas.74.12.5463", "10.1016/0003-2697(87)90021-2", "10.1107/S0108767307043930")


# APA cv style
cr_cn(dois = dois, format = "text", style="apa-cv")
# same with Chicago style
cr_cn(dois = dois, format = "text", style="chicago-note-bibliography")
# same with Vancouver style
cr_cn(dois = dois, format = "text", style="vancouver")

Теперь предположим, что у меня есть запись без DOI f.ex. в формате BibTex, например:

@article {PMID:14907713,    Title = {Protein measurement with the Folin phenol reagent},    Author = {LOWRY, OH and ROSEBROUGH, NJ and FARR, AL and RANDALL, RJ},   Number = {1},   Volume = {193},     Month = {November},     Year = {1951},  Journal = {The Journal of biological chemistry},    ISSN = {0021-9258},     Pages = {265—275},  URL = {http://www.jbc.org/content/193/1/265.long} }  

и я хотел бы также отформатировать эту запись f.ex в стилях APA cv, Chicago и Vancouver и получить результат в виде текста, как я могу это сделать? Я не нашел для этого функции. Есть ли в настоящее время какой-либо способ для этой задачи?

Спасибо!


person kmm    schedule 28.07.2020    source источник


Ответы (1)


Так что не похоже, что rcrossref поддерживает это, потому что все происходит на их сервере API, и, похоже, нет способа указать необработанную запись bibtex, у которой нет DOI.

Однако похоже, что pandoc, который обычно устанавливается вместе с RStudio и используется rmarkdown, имеет поддержку форматирования цитирования. Я попытался провести реверс-инжиниринг, чтобы увидеть, можно ли просто создать цитату для данной записи. Вот созданная мной функция.

citation <- function(bib, csl="chicago-author-date.csl", toformat="plain", cslrepo="https://raw.githubusercontent.com/citation-style-language/styles/master") {
  if (!file.exists(bib)) {
    message("Assuming input is literal bibtex entry")
    tmpbib <- tempfile(fileext = ".bib")
    on.exit(unlink(tmpbib), add=TRUE)
    if(!validUTF8(bib)) {
      bib <- iconv(bib, to="UTF-8")
    }
    writeLines(bib, tmpbib)
    bib <- tmpbib
  }
  if (tools::file_ext(csl)!="csl") {
    warning("CSL file name should end in '.csl'")
  }
  if (!file.exists(csl)) {
    cslurl <- file.path(cslrepo, csl)
    message(paste("Downling CSL from", cslurl))
    cslresp <- httr::GET(cslurl, httr::write_disk(csl))
    if(httr::http_error(cslresp)) {
      stop(paste("Could not download CSL.", "Code:", httr::status_code(cslresp)))
    }
  }
  tmpcit <- tempfile(fileext = ".md")
  on.exit(unlink(tmpcit), add=TRUE)
  
  writeLines(c("---","nocite: '@*'","---"), tmpcit)
  rmarkdown::find_pandoc()
  command <- paste(shQuote(rmarkdown:::pandoc()), 
                   "--filter", "pandoc-citeproc",
                   "--to", shQuote(toformat),
                   "--csl", shQuote(csl),
                   "--bibliography", shQuote(bib), 
                  shQuote(tmpcit))
  rmarkdown:::with_pandoc_safe_environment({
    result <- system(command, intern = TRUE)
    Encoding(result) <- "UTF-8"
  })
  result
}

Вы можете передать свою ссылку, и она преобразует ее в стандартный файл CSL. Эти файлы CSL и контролируют форматирование. здесь есть гигантское репо с разными CSL для разных форматов. Вы можете указать файл CSL, и если файл не существует, эта функция автоматически загрузит его из репозитория.

Вы можете передать необработанную цитату

test <- "@article {PMID:14907713,    Title = {Protein measurement with the Folin phenol reagent},    Author = {LOWRY, OH and ROSEBROUGH, NJ and FARR, AL and RANDALL, RJ},   Number = {1},   Volume = {193},     Month = {November},     Year = {1951},  Journal = {The Journal of biological chemistry},    ISSN = {0021-9258},     Pages = {265-275},  URL = {http://www.jbc.org/content/193/1/265.long} } "
citation(test)

Или, если данные были в файле, вы можете использовать имя файла

writeLines(test, "test.bib") 
citation("test.bib")

И если вы хотите использовать другой CSL, вы можете просто указать имя файла CSL в параметре CSL=

citation("test.bib", csl="apa-cv.csl")
citation("test.bib", csl="chicago-note-bibliography.csl")
citation("test.bib", csl="vancouver.csl")
person MrFlick    schedule 29.07.2020