This place is a map of research papers that I, at some point, found useful and/or interesting...

Your browser does not support SVG, the portal therefore shows no signs of life...

DblClick to zoom in, Shift+DblClick to zoom out


How it is built

The other day I had an idea of an utility that, given a set of .bibtex files, would produce me a diagram showing who cites what within that set.

A couple of not very sober evenings later a papergraph prototype was ready, starring multi-threaded metadata requests from CrossRef's API and a remix of a simple .bib file parser found on gists. I even dockerized the app to preserve this piece of a drunken Common-Lisp-Fu. The parser is still somewhat brittle and will fail on a weakly formatted .bib files, but here I sort of do have a convention for an extra strict formatting.

See, for keeping my library of research publications in a relative order I use the congenial emacs package called org-ref. It proved to be the most handy organizer, beating others in my opinion, and also integrating organically into org-brain that I started to use for taking notes. Any notes.

Almost all the .bib-entries in my collection are fetched (by DOI, or even from .pdf files' metadata) and formatted by org-ref itself. Result looks like:

 @article {soler-2002-siest-method,
  author =       {Jos{\'e} M Soler and Emilio Artacho and Julian D Gale and Alberto Garc{\'i}a and Javier Junquera and Pablo Ordej{\'o}n and Daniel S{\'a}nchez-Portal},
  title =        {The Siesta Method For ab-initio order-N Materials Simulation},
  journal =      {Journal of Physics: Condensed Matter},
  volume =       14,
  number =       11,
  pages =        {2745-2779},
  year =         2002,
  doi =          {10.1088/0953-8984/14/11/302},
  url =          {https://doi.org/10.1088/0953-8984/14/11/302},
  DATE_ADDED =   {Sun Apr 12 00:36:22 2020},
  keywords =     {siesta, dft},
} 

...where I only edit an optional keywords property contents. Those serve as extra tags when searching for entries through org-ref within emacs, but I also use them as a clustering description in a rc-file of the papergraph.

I mean yes, I do have a config file for the app - a chunk of lisp loaded upon execution, of course! Let the default sample speak for itself:

  (in-package :papergraph)

;; When set to `t` the layout is hierarchical `dot`. Default is `fdp` spring layout.
(setf layered-view nil)

;; Example cluster specification from tags in bibtex `keywords=` entries.
;; For each entry, the first one met takes effect.
(setf clusters '(("md" . (:color ".3 .3 1.0" :label "Molecular Dynamics"))
                 ("cs" . (:color ".5 .3 1.0" :label "Computer Science"))))

;; Draw only entries that belong to any of the clusters specified above:
(setf clusters-only nil)

;; If the previous option is `nil`, draw "unclustered" entries with this color:
(setf unclustered-color ".7 .3 1.0")

;; Edge color for unclustered entries:
(setf edge-color "magenta")

;; Number of parallel threads used to query metadata from CrossRef:
(setf num-api-threads 8)

;; List of paths to input bibtex entry-files:
(setf ref-files '("/app/refs.bib"))  ; /app is the working dir inside the container

;; Output directory:
(setf out-dir #P"/app")  ; /app is the working dir inside the container

;; Intermediate Graphviz .dot-file name (.svg file will have the same):
(setf out-file "papergraph.dot")

;; automatically show graph in specified browser when set:
;; (setf system-img-browser "eom")  ; off by default inside the container
 

Each entry will belong to the first of the clusters met in it's keywords, or will become "unclustered" if none is met. Yep, that simple. Changing the clusters and their order is supposed to produce some insights... or at least a better-looking graph.

Forgot to mention that the final image is built by Graphviz. But that is obvious, isn't it?

Unless otherwise credited all material Creative Commons License by Vladimir Dikan.
Powered by Co╬╗eslaw. Design elements' artwork created with MagicaVoxel.