t002-scholarref.txt - adamsgaard.dk - my academic webpage
 (HTM) git clone git://src.adamsgaard.dk/adamsgaard.dk
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       t002-scholarref.txt (8684B)
       ---
            1 
            2 ## Rationale
            3 During the writing phase of an academic paper, common tasks include
            4 downloading PDFs of publications and getting their references into
            5 your bibliography.  However, I am not a fan of navigating the slow,
            6 bloated, tracker-filled, and distracting webpages of academic
            7 journals and publication aggregators.  For some reason, many
            8 publishers decided that clicking the "Download PDF" link should
            9 redirect the user to an unusable in-browser PDF viewer instead of
           10 providing the PDF file directly.  While the majority of journal
           11 webpages provide formatted citations for their publications, these
           12 are inconsistent in style and content.
           13 
           14 For these reasons, I constructed a set of shell tools called
           15 "scholarref" that allow me to perform most of the tasks without
           16 having to open a web browser.  As the title of this post indicates,
           17 the goal of the toolset is to provide as much functionality a person
           18 might need during scientific writing without leaving the command
           19 line.  The tools are under continuous development[0].  At present
           20 I avoid roughly 90% of visits to journal webpages.  I hope to get
           21 to 100% someday.
           22 
           23 The "scholarref" design goals are the following:
           24 
           25     - Written as POSIX shell scripts with minimal external
           26       dependencies: Ensures maximum flexibility and portability.
           27 
           28     - Aim for simplicity:
           29       Fewer lines of code make the programs easier to understand,
           30       maintain, and debug.
           31 
           32     - Each tool should do one thing, and do it well:
           33       Let the users piece the components together to fit their
           34       workflow.
           35 
           36     - Return references in BibTeX format.
           37 
           38 DISCLAIMER:  The functionality provided by these programs depends
           39 on communication with third party webpages, which may or may not
           40 be permitted by law and the terms of service upheld by the third
           41 parties.  What is demonstrated here are examples only.  Use of the
           42 tools is entirely your own responsibility.
           43 
           44 
           45 ## Installation
           46 
           47     $ git clone git://src.adamsgaard.dk/scholarref
           48     $ cd scholarref
           49     # make install
           50 
           51 The `make install` command may require superuser priviledges to
           52 install the tools to /usr/local.  Prefix with doas(1) or sudo(1),
           53 whatever is appropriate for the target system.
           54 
           55 
           56 ## The scholarref toolset
           57 
           58 The core functionality is provided by the scripts getdoi, getref,
           59 and shdl.  All programs accept input as command-line arguments or
           60 from standard input (stdin).  The programs come with several OPTIONS,
           61 and it is encouraged to explore the help text (invoke with option
           62 -h).  The -t option may be of particular interest, since it tunnels
           63 all communication through Tor via torsocks(1) (if available on the
           64 system).
           65 
           66 ### getdoi
           67 This tool accepts either names of PDF files or arbitrary search
           68 queries.  If a PDF file name is supplied, getdoi scans the PDF text
           69 in order to find the first occurring DOI entry, which typically is
           70 the DOI of the publication itself.  If an arbitrary query is supplied,
           71 the CrossRef API[1] is used to find the DOI of the closest publication
           72 match.  You can supply author names, parts of the title, ORCID,
           73 journal name, etc.  Examples:
           74 
           75     $ getdoi damsgaard2018.pdf
           76     10.1029/2018ms001299
           77     $ getdoi 'damsgaard sergienko adcroft advances modeling earth systems'
           78     10.1029/2018ms001299
           79 
           80 The -o option will open the resultant DOI in the system web browser.
           81 
           82 ### getref
           83 The getref tool fetches the BibTeX citation for a given DOI from
           84 doi.org.  By default, the journal names and author first names are
           85 abbreviated, which is what most journals want.  I have taken
           86 abbreviations from the Caltech Library list of Journal Title
           87 Abbreviations[2].  The getref ruleset of journal-title abbreviations
           88 is incomplete, and is expanded on a per-need basis.  If desired,
           89 the abbreviation functionality can be disabled.  See `getref -h`
           90 for details.
           91 
           92     $ getref 10.1029/2018ms001299
           93     @article{Damsgaard2018,
           94             doi = {10.1029/2018ms001299},
           95             year = 2018,
           96             publisher = {American Geophysical Union ({AGU})},
           97             volume = {10},
           98             number = {9},
           99             pages = {2228--2244},
          100             author = {A. Damsgaard and A. Adcroft and O. Sergienko},
          101             title = {Application of Discrete Element Methods to Approximate Sea Ice Dynamics},
          102             journal = {J. Adv. Mod. Earth Sys.}
          103     }
          104 
          105 Do not abbreviate journal title with -j option:
          106 
          107     $ getref -j 10.1029/2018ms001299
          108     @article{Damsgaard2018,
          109             doi = {10.1029/2018ms001299},
          110             year = 2018,
          111             publisher = {American Geophysical Union ({AGU})},
          112             volume = {10},
          113             number = {9},
          114             pages = {2228--2244},
          115             author = {A. Damsgaard and A. Adcroft and O. Sergienko},
          116             title = {Application of Discrete Element Methods to Approximate Sea Ice Dynamics},
          117             journal = {Journal of Advances in Modeling Earth Systems}
          118     }
          119 
          120 
          121 ### shdl
          122 This tool takes a DOI as input and attempts to download the
          123 corresponding publication as a PDF through sci-hub[3].  Unfortunately,
          124 the sci-hub web interface often puts up captias to restrict automated
          125 downloads.  If that's the case, shdl opens the tor browser (if
          126 installed) or the system web browser in order to manually complete
          127 the download.  Output PDF files are saved in the present working
          128 directory.
          129 
          130 
          131 ## Usage examples
          132 
          133 The scholarref tools are meant to be chained together.  For example,
          134 if you want a BibTeX reference a search query, simply use UNIX pipes
          135 to send the getdoi output as input to getref:
          136 
          137     $ getdoi 'damsgaard egholm ice flow dynamics' | getref
          138     @article{Damsgaard2016,
          139             doi = {10.1002/2016gl071579},
          140             year = 2016,
          141             publisher = {American Geophysical Union ({AGU})},
          142             volume = {43},
          143             number = {23},
          144             pages = {12,165--12,173},
          145             author = {A. Damsgaard and D. L. Egholm and L. H. Beem and S. Tulaczyk and N. K. Larsen and J. A. Piotrowski and M. R. Siegfried},
          146             title = {Ice flow dynamics forced by water pressure variations in subglacial granular beds},
          147             journal = {Geophys. Res. Lett.}
          148     }
          149 
          150 The scholarref program itself is an aggregation of the getdoi and
          151 getref commands.  If called with the -a option, the reference is
          152 directly inserted into the system bibliography.  The full path to
          153 the bibliography file (.bib) is assumed to be set in the $BIB
          154 environment variable, for instance defined in the user ~/.profile.
          155 
          156     $ echo $BIB
          157     /home/ad/articles/own/BIBnew.bib
          158     $ scholarref -a 'damsgaard egholm ice flow dynamics'
          159     Citation Damsgaard2016 added to /home/ad/articles/own/BIBnew.bib
          160 
          161 
          162 ## Integrating into your favorite $EDITOR
          163 
          164 The scholarref tool is particularly useful if called from within a
          165 text editor.  Below I demonstrate how keyboard bindings can be bound
          166 in various editors to provide scholarref functionality.
          167 
          168 ### vi
          169 My editor of choice is the plain, old, and simple (n)vi(1).  I have
          170 the following binding in my ~/.exrc, including a trailing space:
          171 
          172     map qr :r !scholarref 
          173 
          174 The rest of my editor configuration can be found under my dotfiles
          175 source code repository[4].
          176 
          177 ### vim
          178 You can add the following bindings to ~/.vimrc or ~/.vim/vimrc in
          179 order to get scholarref functionality within vim(1):
          180 
          181     " insert reference into current buffer
          182     nnoremap <leader>r :r !scholarref<space>
          183     " append reference into $BIB file
          184     nnoremap <leader>R :r !scholarref --add<space>
          185 
          186 ### vis -
          187 The vis(1) editor[5] is an interesting combination of modal editing
          188 and structural regular expressions from the plan9 editor sam(1)[6].
          189 Add the following binding to ~/.config/vis/visrc.lua:
          190 
          191     vis:map(vis.modes.NORMAL, leader..'r', '< scholarref ')
          192 
          193 ### emacs
          194 Don't know, figure it out yourself.
          195 
          196 
          197 ## Integrating into your pdf viewer
          198 
          199 My PDF viewer of choice is zathura(1)[7], which has a minimal
          200 graphical user interface and is keyboard-centric.  The following
          201 configuration calls getdoi on the currently open file if I press
          202 Ctrl-i.  The resultant DOI is copied to the clipboard.  Similarly,
          203 Ctrl-s tries to extract the DOI in the same manner, but fetches the
          204 accompanying reference and adds it directly to the bibliography.
          205 
          206     map <C-i> feedkeys ":exec getdoi --notify --clip '$FILE'<Return>"
          207     map <C-s> feedkeys ":exec scholarref --add '$FILE'<Return>"
          208 
          209 My full zathura configuration is available here: [8]
          210 
          211 
          212 ## Questions/bugs/feedback/improvements
          213 
          214 Please get in touch if you encounter any.  Improvement suggestions
          215 are best sent as patches by e-mail.
          216 
          217 
          218 References:
          219 
          220 [0] https://src.adamsgaard.dk/scholarref/log.html
          221 [1] http://api.crossref.org
          222 [2] https://www.library.caltech.edu/journal-title-abbreviations
          223 [3] https://sci-hub.tw
          224 [4] https://src.adamsgaard.dk/dotfiles/file/.exrc.html
          225 [5] https://github.com/martanne/vis
          226 [6] https://sam.cat-v.org/
          227 [7] https://pwmt.org/projects/zathura
          228 [8] https://src.adamsgaard.dk/dotfiles/file/.config/zathura/zathurarc.html