]> git.donarmstrong.com Git - org-ref.git/blobdiff - jmax-bibtex.el
added new journal abbreviations, and a helm function to set journal strings
[org-ref.git] / jmax-bibtex.el
index 13f6553449ec53cd0a287aef91bfda5a5498ee94..c313a2ebb70ca665be3f4b1f956c101e140568b9 100644 (file)
@@ -1,14 +1,44 @@
 ;;; jmax-bibtex.el --- jmax-bibtex utilities
 
+;; Copyright(C) 2014 John Kitchin
+
+;; Author: John Kitchin <jkitchin@andrew.cmu.edu>
+;; URL: https://github.com/jkitchin/org-ref
+;; Version: 0.1
+;; Keywords: org-mode, bibtex
+;; Package-Requires: ((org-ref) (s) (dash) (doi-utils) (key-chord))
+
+;; This file is not currently part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program ; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
 ;;; Commentary:
-;; Requires: s.el, dash.el, org-ref.el, doi-utils.el, key-chord.el
-;;
+
 ;; jmax-bibtex-generate-longtitles
 ;; jmax-bibtex-generate-shorttitles
-;; jmax-stringify-journal-name :: replace a journal name with a string in `jmax-bibtex-journal-abbreviations'
-;; jmax-set-journal-string :: in a bibtex entry run this to replace the journal with a string
+;; jmax-stringify-journal-name :: replace a journal name with a string in
+;; `jmax-bibtex-journal-abbreviations'
+;; jmax-set-journal-string :: in a bibtex entry run this to replace the
+;; journal with a string
 ;;
-;; jmax-replace-nonascii :: replace nonascii characters in a bibtex entry
+;; jmax-title-case-article :: title case the title in an article
+;; jmax-sentence-case-article :: sentence case the title in an article.
+
+;; jmax-replace-nonascii :: replace nonascii characters in a bibtex
+;; entry. Replacements are in `jmax-nonascii-latex-replacements'.
 ;;
 ;; jmax-title-case-article
 ;; jmax-sentence-case-article
 ;; jmax-bibtex-next-entry :: bound to M-n
 ;; jmax-bibtex-previous-entry :: bound to M-p
 ;;
-;; Functions to act on an entry
+;; Functions to act on a bibtex entry or file
 ;; jmax-bibtex-hydra/body gives a hydra menu to a lot of useful functions.
 ;; jmax-bibtex-new-entry/body gives a hydra menu to add new bibtex entries.
+;; jmax-bibtex-file/body gives a hydra menu of actions for the bibtex file
+;;
+;; jmax-bibtex :: a deprecated menu of actions
 
 (require 'hydra)
 (require 'key-chord)
 
 ;;; Code:
+;; * Custom variables
 (defgroup jmax-bibtex nil
   "Customization group for jmax-bibtex.")
 
@@ -43,89 +77,101 @@ I like \C-cj."
   :type 'string
   :group 'jmax-bibtex)
 
-
+;; * Journal abbreviations
 (defvar jmax-bibtex-journal-abbreviations
-  '(("ACAT" "ACS Catalysis" "ACS Catal.")
-    ("AM" "Acta Materialia" "Acta Mater.")
-    ("AMM" "Acta Metallurgica et Materialia" "Acta Metall. Mater.")
-    ("AMiner" "American Mineralogist" "Am. Mineral.")
-    ("AngC" "Angewandte Chemie-International Edition" "Angew. Chem. Int. Edit.")
-    ("APLM" "APL Materials" "APL Mat.")
-    ("ACBE" "Applied Catalysis B: Environmental" "Appl. Catal. B-Environ.")
-    ("APL" "Applied Physics Letters" "Appl. Phys. Lett.")
-    ("ASS" "Applied Surface Science" "Appl. Surf. Sci.")
-    ("CL" "Catalysis Letters" "Catal. Lett.")
-    ("CST" "Catalysis Science & Technology" "Catal. Sci. Technol.")
-    ("CT" "Catalysis Today" "Catal. Today")
-    ("CPL" "Chemical Physics Letters" "Chem. Phys. Lett")
-    ("CR" "Chemical Reviews" "Chem. Rev.")
-    ("CSR" "Chemical Society Reviews" "Chem. Soc. Rev.")
-    ("CSR" "Chemical Society Reviews" "Chem. Soc. Rev.")
-    ("CM" "Chemistry of Materials" "Chem. Mater.")
-    ("CSA" "Colloids and Surfaces, A: Physicochemical and Engineering Aspects" "Colloids Surf., A")
-    ("CPMS" "Computational Materials Science" "Comp. Mater. Sci.")
-    ("CPC" "Computer Physics Communications" "Comput. Phys. Commun.")
-    ("CGD" "Crystal Growth \\& Design" "Cryst. Growth Des.")
-    ("CEC" "CrystEngComm" "CrystEngComm")
-    ("ECST" "ECS Transactions" "ECS Trans.")
-    ("EES" "Energy \\& Environmental Science" "Energy Environ. Sci.")
-    ("HPR" "High Pressure Research" "High Pressure Res.")
-    ("IC" "Inorganic Chemistry" "Inorg. Chem.")
-    ("IECR" "Industrial \\& Engineering Chemistry Research" "Ind. Eng. Chem. Res.")
-    ("JJAP" "Japanese Journal of Applied Physics" "Jpn. J. Appl. Phys.")
-    ("JMatR" "Journal of  Materials Research" "J. Mater. Res.")
-    ("JALC" "Journal of Alloys and Compounds" "J. Alloy Compd.")
-    ("JAC" "Journal of Applied Crystallography" "J. Appl. Crystallogr.")
-    ("JAP" "Journal of Applied Physics" "J. Appl. Phys.")
-    ("JC" "Journal of Catalysis" "J. Catal.")
-    ("JCP" "Journal of Chemical Physics" "J. Chem. Phys.")
-    ("JCC" "Journal of Computational Chemistry" "J. Comput. Chem.")
-    ("JCG" "Journal of Crystal Growth" "J. Crys. Growth")
-    ("JMC" "Journal of Materials Chemistry" "J. Mater. Chem.")
-    ("JMC" "Journal of Materials Chemistry" "J. Mater. Chem.")
-    ("JMSL" "Journal of Materials Science Letters" "J. Mater. Sci. Lett.")
-    ("JMS" "Journal of Membrane Science" "J. Memb. Sci.")
-    ("JPE" "Journal of Phase Equilibria" "J. Phase Equilib.")
-    ("JPCS" "Journal of Physics and Chemistry of Solids" "J. Phys. Chem. Solids")
-    ("JPCM" "Journal of Physics: Condensed Matter" "J. Phys.: Condens. Matter")
-    ("JSSC" "Journal of Solid State Chemistry" "J. Solid State Chem.")
-    ("JACerS" "Journal of the American Ceramic Society" "J. Am. Ceram. Soc.")
-    ("JACS" "Journal of the American Chemical Society" "J. Am. Chem. Soc.")
-    ("JES" "Journal of The Electrochemical Society" "J. Electrochem. Soc.")
-    ("JEaC" "Journal of Electroanalytical Chemistry" "J. Electroanal. Chem.")
-    ("JMS" "Journal of Membrane Science" "J. Memb. Sci.")
-    ("JVST" "Journal of Vacuum Science \\& Technology A" "J. Vac. Sci. Technol. A")
-    ("ML" "Materials Letters" "Mater. Lett.")
-    ("MSE-BS" "Materials Science and Engineering B" "Mat. Sci. Eng. B-Solid")
-    ("MOLSIM" "Molecular Simulation" "Mol. Sim.")
-    ("Nature" "Nature" "Nature")
-    ("NM" "Nature Materials" "Nat. Mater.")
-    ("PML" "Philosophical Magazine Letters" "Phil. Mag. Lett.")
-    ("PMA" "Philosophical Magazine A" "Phil. Mag. A")
-    ("PA" "Physica A: Statistical Mechanics and its Applications" "Physica A")
-    ("PB" "Physica B-Condensed Matter" "Physica B")
-    ("PCCP" "Physical Chemistry Chemical Physics" "Phys. Chem. Chem. Phys.")
-    ("PSSB" "physica status solidi (b)" "Phys. Status Solidi B")
-    ("PRA" "Physical Review A" "Phys. Rev. A")
-    ("PRB" "Physical Review B" "Phys. Rev. B")
-    ("PRL" "Physical Review Letters" "Phys. Rev. Lett.")
-    ("PCM" "Physics and Chemistry of Minerals" "Phys. Chem. Miner.")
-    ("PSurfSci" "Progress in Surface Science" "Prog. Surf. Sci.")
-    ("Science" "Science" "Science")
-    ("SABC" "Sensors and Actuators B: Chemical" "Sensor. Actuat. B-Chem.")
-    ("SS" "Surface Science" "Surf. Sci.")
-    ("EPJB" "The European Physical Journal B" "Eur. Phys. J. B")
-    ("JPC" "The Journal of Physical Chemistry" "J. Phys. Chem.")
-    ("JPCB" "The Journal of Physical Chemistry B" "J. Phys. Chem. B")
-    ("JPCC" "The Journal of Physical Chemistry C" "J. Phys. Chem. C")
-    ("JPCL" "The Journal of Physical Chemistry Letters" "J. Phys. Chem. Lett.")
-    ("JCP" "The Journal of Chemical Physics" "J. Chem. Phys.")
-    ("MSMSE" "Modelling and Simulation in Materials Science and Engineering" "Modell. Simul. Mater. Sci. Eng.")
-    ("TSF" "Thin Solid Films" "Thin Solid Films")
-    ("TC" "Topics in Catalysis" "Top. Catal.")
-    ("WR" "Water Research" "Water Res."))
+  '()
   "List of (string journal-full-name journal-abbreviation).  Find abbreviations at http://cassi.cas.org/search.jsp.")
 
+(setq jmax-bibtex-journal-abbreviations
+      '(("ACR" "Accounts of Chemical Research" "Acc. Chem. Res.")
+       ("ACAT" "ACS Catalysis" "ACS Catal.")
+       ("AM" "Acta Materialia" "Acta Mater.")
+       ("AMM" "Acta Metallurgica et Materialia" "Acta Metall. Mater.")
+       ("AEM" "Advanced Energy Materials" "Adv. Energy Mater.")
+       ("AMiner" "American Mineralogist" "Am. Mineral.")
+       ("AngC" "Angewandte Chemie-International Edition" "Angew. Chem. Int. Edit.")
+       ("APLM" "APL Materials" "APL Mat.")
+       ("ACBE" "Applied Catalysis B: Environmental" "Appl. Catal. B-Environ.")
+       ("APL" "Applied Physics Letters" "Appl. Phys. Lett.")
+       ("ASS" "Applied Surface Science" "Appl. Surf. Sci.")
+       ("CL" "Catalysis Letters" "Catal. Lett.")
+       ("CST" "Catalysis Science & Technology" "Catal. Sci. Technol.")
+       ("CT" "Catalysis Today" "Catal. Today")
+       ("CPL" "Chemical Physics Letters" "Chem. Phys. Lett")
+       ("CR" "Chemical Reviews" "Chem. Rev.")
+       ("CSR" "Chemical Society Reviews" "Chem. Soc. Rev.")
+       ("CSR" "Chemical Society Reviews" "Chem. Soc. Rev.")
+       ("CM" "Chemistry of Materials" "Chem. Mater.")
+       ("CSA" "Colloids and Surfaces, A: Physicochemical and Engineering Aspects" "Colloids Surf., A")
+       ("CPMS" "Computational Materials Science" "Comp. Mater. Sci.")
+       ("CPC" "Computer Physics Communications" "Comput. Phys. Commun.")
+       ("CGD" "Crystal Growth \\& Design" "Cryst. Growth Des.")
+       ("CEC" "CrystEngComm" "CrystEngComm")
+       ("EA" "Electrochimica Acta" "Electrochim. Acta")
+       ("ECST" "ECS Transactions" "ECS Trans.")
+       ("EES" "Energy \\& Environmental Science" "Energy Environ. Sci.")
+       ("HPR" "High Pressure Research" "High Pressure Res.")
+       ("IC" "Inorganic Chemistry" "Inorg. Chem.")
+       ("IECR" "Industrial \\& Engineering Chemistry Research" "Ind. Eng. Chem. Res.")
+       ("JJAP" "Japanese Journal of Applied Physics" "Jpn. J. Appl. Phys.")
+       ("JMatR" "Journal of  Materials Research" "J. Mater. Res.")
+       ("JALC" "Journal of Alloys and Compounds" "J. Alloy Compd.")
+       ("JAC" "Journal of Applied Crystallography" "J. Appl. Crystallogr.")
+       ("JAE" "Journal of Applied Electrochemistry" "J. Appl. Electrochem.")
+       ("JAP" "Journal of Applied Physics" "J. Appl. Phys.")
+       ("JC" "Journal of Catalysis" "J. Catal.")
+       ("JCP" "Journal of Chemical Physics" "J. Chem. Phys.")
+       ("JCC" "Journal of Computational Chemistry" "J. Comput. Chem.")
+       ("JCG" "Journal of Crystal Growth" "J. Crys. Growth")
+       ("JMC" "Journal of Materials Chemistry" "J. Mater. Chem.")
+       ("JMC" "Journal of Materials Chemistry" "J. Mater. Chem.")
+       ("JMSL" "Journal of Materials Science Letters" "J. Mater. Sci. Lett.")
+       ("JMS" "Journal of Membrane Science" "J. Memb. Sci.")
+       ("JPE" "Journal of Phase Equilibria" "J. Phase Equilib.")
+       ("JPCS" "Journal of Physics and Chemistry of Solids" "J. Phys. Chem. Solids")
+       ("JPCM" "Journal of Physics: Condensed Matter" "J. Phys.: Condens. Matter")
+       ("JPS" "Journal of Power Sources" "J. Power Sources")
+       ("JSSC" "Journal of Solid State Chemistry" "J. Solid State Chem.")
+       ("JACerS" "Journal of the American Ceramic Society" "J. Am. Ceram. Soc.")
+       ("JACS" "Journal of the American Chemical Society" "J. Am. Chem. Soc.")
+       ("JES" "Journal of The Electrochemical Society" "J. Electrochem. Soc.")
+       ("JEaC" "Journal of Electroanalytical Chemistry" "J. Electroanal. Chem.")
+       ("JMS" "Journal of Membrane Science" "J. Memb. Sci.")
+       ("JRS" "Journal of Raman Spectroscopy" "J. Raman Spectrosc.")
+       ("JVST" "Journal of Vacuum Science \\& Technology A" "J. Vac. Sci. Technol. A")
+       ("ML" "Materials Letters" "Mater. Lett.")
+       ("MSE-BS" "Materials Science and Engineering B" "Mat. Sci. Eng. B-Solid")
+       ("MOLSIM" "Molecular Simulation" "Mol. Sim.")
+       ("Nature" "Nature" "Nature")
+       ("NM" "Nature Materials" "Nat. Mater.")
+       ("NC" "Nature Chemistry" "Nat. Chem.")
+       ("PML" "Philosophical Magazine Letters" "Phil. Mag. Lett.")
+       ("PMA" "Philosophical Magazine A" "Phil. Mag. A")
+       ("PA" "Physica A: Statistical Mechanics and its Applications" "Physica A")
+       ("PB" "Physica B-Condensed Matter" "Physica B")
+       ("PCCP" "Physical Chemistry Chemical Physics" "Phys. Chem. Chem. Phys.")
+       ("PSSB" "physica status solidi (b)" "Phys. Status Solidi B")
+       ("PRA" "Physical Review A" "Phys. Rev. A")
+       ("PRB" "Physical Review B" "Phys. Rev. B")
+       ("PRL" "Physical Review Letters" "Phys. Rev. Lett.")
+       ("PCM" "Physics and Chemistry of Minerals" "Phys. Chem. Miner.")
+       ("PNAS" "Proceedings of the National Academy of Sciences of the United States of America" "Proc. Natl. Acad. Sci. U. S. A.")
+       ("PSurfSci" "Progress in Surface Science" "Prog. Surf. Sci.")
+       ("Science" "Science" "Science")
+       ("SM" "Scripta Materialia" "Scr. Mater.")
+       ("SABC" "Sensors and Actuators B: Chemical" "Sensor. Actuat. B-Chem.")
+       ("SS" "Surface Science" "Surf. Sci.")
+       ("EPJB" "The European Physical Journal B" "Eur. Phys. J. B")
+       ("JPC" "The Journal of Physical Chemistry" "J. Phys. Chem.")
+       ("JPCB" "The Journal of Physical Chemistry B" "J. Phys. Chem. B")
+       ("JPCC" "The Journal of Physical Chemistry C" "J. Phys. Chem. C")
+       ("JPCL" "The Journal of Physical Chemistry Letters" "J. Phys. Chem. Lett.")
+       ("JCP" "The Journal of Chemical Physics" "J. Chem. Phys.")
+       ("MSMSE" "Modelling and Simulation in Materials Science and Engineering" "Modell. Simul. Mater. Sci. Eng.")
+       ("TSF" "Thin Solid Films" "Thin Solid Films")
+       ("TC" "Topics in Catalysis" "Top. Catal.")
+       ("WR" "Water Research" "Water Res.")))
+
 
 (defun jmax-bibtex-generate-longtitles ()
   "Generate longtitles.bib which are @string definitions.
@@ -176,6 +222,24 @@ START and END allow you to use this with `bibtex-map-entries'"
        (bibtex-set-field "journal" bstring t)
         (bibtex-fill-entry)))))
 
+(defun jmax-helm-set-journal-string ()
+  "Helm interface to set a journal string."
+  (interactive)
+  (bibtex-set-field
+   "journal"
+   (helm :sources `((name . "journal")
+                   (candidates . ,(mapcar
+                                   (lambda (x)
+                                     (cons (nth 1 x)
+                                           (car x)))
+                                   jmax-bibtex-journal-abbreviations))
+                   (action . (lambda (x) (identity x))))
+        :input (s-trim (bibtex-autokey-get-field "journal")))
+   t)
+  (bibtex-fill-entry)
+  (bibtex-clean-entry))
+
+
 (defun jmax-set-journal-string (full-journal-name)
   "Set a bibtex journal name to the string that represents FULL-JOURNAL-NAME.
 This is defined in `jmax-bibtex-journal-abbreviations'."
@@ -195,6 +259,7 @@ This is defined in `jmax-bibtex-journal-abbreviations'."
     (bibtex-fill-entry)
     (bibtex-clean-entry)))
 
+;; * Non-ascii character replacement
 ;; see https://github.com/fxcoudert/tools/blob/master/doi2bib for more replacements
 (defvar jmax-nonascii-latex-replacements
   '()
@@ -249,6 +314,7 @@ This is defined in `jmax-bibtex-journal-abbreviations'."
        ("—" . "-")
        ("‘" . "'")
        ("’" . "'")
+       ("’" . "'")
        ("“" . "\"")
        ("’" . "'")
        ("”" . "\"")))
@@ -268,7 +334,7 @@ This is defined in `jmax-bibtex-journal-abbreviations'."
 
 (add-hook 'org-ref-clean-bibtex-entry-hook 'jmax-replace-nonascii)
 
-
+;; * Title case transformations
 (defvar jmax-lower-case-words
   '("a" "an" "on" "and" "for"
     "the" "of" "in")
@@ -370,9 +436,7 @@ all the title entries in articles."
       (bibtex-clean-entry)
       (bibtex-fill-entry))))
 
-
-
-
+;; * Navigation in bibtex file
 (defun jmax-bibtex-next-entry (&optional n)
   "Jump to the beginning of the next bibtex entry.
 N is a prefix argument.  If it is numeric, jump that many entries
@@ -410,7 +474,7 @@ N is a prefix argument.  If it is numeric, jump that many entries back."
 ;; add to bibtex-mode-hook
 (add-hook 'bibtex-mode-hook 'jmax-bibtex-mode-keys)
 
-
+;; * Functions to act on an entry with a doi
 (defun jmax-bibtex-entry-doi ()
   "Get doi from entry at point."
   (interactive)
@@ -469,22 +533,26 @@ functions with a DOI argument."
   (org-ref-open-bibtex-pdf))
 
 
+;; * Hydra menus
+;; ** Hydra menu for bibtex entries
 ;; hydra menu for actions on bibtex entries
 (defhydra jmax-bibtex-hydra (:color blue)
    "
 _p_: Open pdf     _y_: Copy key               _n_: New entry     _w_: WOS
 _b_: Open url     _f_: Copy formatted entry   _o_: Copy entry    _c_: WOS citing
-_r_: Refile entry _k_: Add keywords           _d_: delete entry  _r_: WOS related
+_r_: Refile entry _k_: Add keywords           _d_: delete entry  _a_: WOS related
 _e_: Email entry  _K_: Edit keywords          _L_: clean entry   _P_: Pubmed
 _U_: Update entry _N_: Open notes             _R_: Crossref      _g_: Google Scholar
 _s_: Sort entry   _a_: Remove nonascii        _h_: helm-bibtex   _q_: quit
-_u_: Update field _f_: file funcs
+_u_: Update field _F_: file funcs
+_T_: Title case
+_S_: Sentence case
 "
    ("p" org-ref-open-bibtex-pdf)
    ("P" jmax-bibtex-pubmed)
    ("w" jmax-bibtex-wos)
    ("c" jmax-bibtex-wos-citing)
-   ("r" jmax-bibtex-wos-related)
+   ("a" jmax-bibtex-wos-related)
    ("R" jmax-bibtex-crossref)
    ("g" jmax-bibtex-google-scholar)
    ("n" jmax-bibtex-new-entry/body)
@@ -498,8 +566,8 @@ _u_: Update field _f_: file funcs
    ("K" (lambda ()
          (interactive)
          (org-ref-set-bibtex-keywords
-          (read-input "Keywords: "
-                      (bibtex-autokey-get-field "keywords"))
+          (read-string "Keywords: "
+                       (bibtex-autokey-get-field "keywords"))
           t)))
    ("b" org-ref-open-in-browser)
    ("r" (lambda () (interactive)
@@ -515,10 +583,12 @@ _u_: Update field _f_: file funcs
    ("e" email-bibtex-entry)
    ("U" (doi-utils-update-bibtex-entry-from-doi (jmax-bibtex-entry-doi)))
    ("u" doi-utils-update-field)
-   ("f" jmax-bibtex-file/body)
+   ("F" jmax-bibtex-file/body)
    ("h" helm-bibtex)
    ("a" jmax-replace-nonascii)
    ("s" org-ref-sort-bibtex-entry)
+   ("T" jmax-title-case-article)
+   ("S" jmax-sentence-case-article)
    ("q" nil))
 
 ;; create key-chord and key binding for hydra
@@ -531,7 +601,7 @@ _u_: Update field _f_: file funcs
 (when jmax-bibtex-hydra-key-binding
   (global-set-key jmax-bibtex-hydra-key-binding 'jmax-bibtex-hydra/body))
 
-
+;; ** Hydra menu for new bibtex entries
 ;; A hydra for adding new bibtex entries.
 (defhydra jmax-bibtex-new-entry (:color blue)
   "New Bibtex entry:"
@@ -550,7 +620,8 @@ _u_: Update field _f_: file funcs
   ("c" bibtex-InCollection "Article in collection")
   ("q" nil "quit"))
 
-;; a hydra menu of functions to act on a bibtex file.
+
+;; ** Hydra menu of functions to act on a bibtex file.
 (defhydra jmax-bibtex-file (:color blue)
   "Bibtex file functions: "
   ("v" bibtex-validate "Validate entries")
@@ -560,6 +631,7 @@ _u_: Update field _f_: file funcs
   ("p" org-ref-build-full-bibliography "PDF bibliography"))
 
 
+;; * DEPRECATED bibtex menu
 (defvar jmax-bibtex-menu-funcs '()
  "Functions to run in doi menu.
 Each entry is a list of (key menu-name function).  The function
@@ -605,6 +677,7 @@ entry having a doi."
 
 (defalias 'jb 'jmax-bibtex)
 
+;; * The end
 (provide 'jmax-bibtex)
 
 ;;; jmax-bibtex.el ends here