crsh / citr

RStudio Addin to Insert Markdown Citations
Other
407 stars 46 forks source link

citr addin not working with absolute paths #69

Open rreareyes opened 4 years ago

rreareyes commented 4 years ago

When calling the addin to insert citations, while having an absolute path to a .bib file in the bibliography field from the YAML header, this error is returned in the console:

Error in FUN(X[[i]], ...) : 
  file 'C:/Documents/C:/Documents/References/r-references.bib' does not exist

Example:

---
title             : "The title"
shorttitle        : "Title"

author: 
  - name          : "First Author"
    affiliation   : "1"
    corresponding : yes    # Define only one corresponding author
    address       : "Postal address"
    email         : "my@email.com"

affiliation:
  - id            : "1"
    institution   : "Wilhelm-Wundt-University"

authornote: |

abstract: |

keywords          : "keywords"
wordcount         : "X"

bibliography      : ["C:/Documents/References/r-references.bib"]

floatsintext      : no
figurelist        : no
tablelist         : no
footnotelist      : no
linenumbers       : yes
mask              : no
draft             : no

documentclass     : "apa6"
classoption       : "man"
output            : papaja::apa6_pdf
---

I already tried installing the latest version directly from github, I'm running version 0.3.2

Thanks for your help!

kbvernon commented 4 years ago

Controlling relative paths with here::here() as in

  bibliography: "`r here::here('folder/bibliography.bib')`"

also fails for the same reason. (Excellent package, btw.)

kbvernon commented 4 years ago

Not sure when @crsh will be around to answer this, but it looks like a simple workaround (haven't tested this yet!) may be to change the global citr options:

bib <- <<path to your bib>>

options(citr.bibliography_path = bib,
        citr.update_bib = bib)

And make sure you have the same path set in your YAML.

Assuming that works, it may be that the fix for this is to access the bibliography through rmarkdown::metadata$bibliography in citr::.onLoad().

I was wrong about the fix. It looks like the problem occurs in citr::get_bib_from_yaml(), which is defined in the script for citr::insert_citation(), way down on lines 784-802. Specifically, this bit of code:

absolute_bib_file <- sapply(
  file.path(rmd_path, yaml::yaml.load(yaml_front_matter)$bibliography)
  , tools::file_path_as_absolute
)

The file.path adds the rmd_path, which is the path to the directory where the rmarkdown is saved. This is being added to the file path in the YAML, hence C:/Documents/C:/Documents/... in the above example.

tools::file_path_as_absolute should add rmd_path by default if the bibliography is in the same folder as the rmarkdown document, so including file.path(rmd_path, yaml...) seems unnecessary. Just

absolute_bib_file <- sapply(
  yaml::yaml.load(yaml_front_matter)$bibliography,
  tools::file_path_as_absolute
) 

should work. That said, tools::file_path_as_absolute is also applied to the result of citr::get_bib_from_yaml() on line 120, so I'm not sure it's really doing anything useful in the get_bib function. I'm still pretty new to Github, but when I learn how to do pull requests, I might suggest removing that line from the function.