ropensci / bibtex

bibtex parser for R
https://docs.ropensci.org/bibtex/
35 stars 12 forks source link

write.bib chooses the wrong citation, and doesn't warn that there was an option #39

Open SamBuckman opened 3 years ago

SamBuckman commented 3 years ago

Some of the packages in R have multiple citations associated with them. For example knitr::write_bib("testthat") returns

@Manual{R-testthat, title = {testthat: Unit Testing for R}, author = {Hadley Wickham}, year = {2021}, note = {R package version 3.0.2}, url = {https://CRAN.R-project.org/package=testthat}, }

@Article{testthat2011, author = {Hadley Wickham}, title = {testthat: Get Started with Testing}, journal = {The R Journal}, year = {2011}, volume = {3}, pages = {5--10}, url = {https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf}, }

The first one is the citation for the package, so it's the one I want. But bibtex::write.bib("testthat") gives the second one, and doesn't warn that it's doing it.

sckott commented 3 years ago

knitr::write_bib appears to get a citation for the package derived from the DESCRIPTION file + use any citations from an optional CITATION file

whereas write.bib here does not generate the @Manual citation since if there's a CITATION file in the package, then utils::citation only gets the citation in that file

sckott commented 3 years ago

Wonder if bibtex should change to follow what knitr::write_bib does or not

zeileis commented 2 years ago

One option would be to give bibtex::write.bib() an additional argument ... and pass that to

bibs <- sapply(pkgs, function(x) try(citation(x, ...)), simplify = FALSE)

Then you can do

bibtex::write.bib("testthat", auto = TRUE)

which generates the "auto" citation from the DESCRIPTION file

@Manual{testthat,
  title = {testthat: Unit Testing for R},
  author = {Hadley Wickham},
  year = {2021},
  note = {R package version 3.0.4},
  url = {https://CRAN.R-project.org/package=testthat},
}