X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=jmax-bibtex.el;h=c313a2ebb70ca665be3f4b1f956c101e140568b9;hp=9927fefe8e187676583ecc8c10469fd5b589510e;hb=d00ef12e4990669ff7c925e9385d586cedae5bad;hpb=a646c41c18b7dd968d596dc64df3a0cb8ab98225 diff --git a/jmax-bibtex.el b/jmax-bibtex.el index 9927fef..c313a2e 100644 --- a/jmax-bibtex.el +++ b/jmax-bibtex.el @@ -1,14 +1,44 @@ ;;; jmax-bibtex.el --- jmax-bibtex utilities +;; Copyright(C) 2014 John Kitchin + +;; Author: John Kitchin +;; 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 @@ -16,14 +46,18 @@ ;; 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,21 +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 -_u_: Open url _f_: Copy formatted entry _o_: Copy entry _c_: WOS citing -_r_: Refile entry _k_: Add keywords _d_: delete entry _r_: WOS related +_b_: Open url _f_: Copy formatted entry _o_: Copy entry _c_: WOS citing +_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 -_q_: quit +_s_: Sort entry _a_: Remove nonascii _h_: helm-bibtex _q_: quit +_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) @@ -497,10 +566,10 @@ _q_: quit ("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))) - ("u" org-ref-open-in-browser) + ("b" org-ref-open-in-browser) ("r" (lambda () (interactive) (bibtex-beginning-of-entry) (bibtex-kill-entry) @@ -513,9 +582,14 @@ _q_: quit (kill-buffer))) ("e" email-bibtex-entry) ("U" (doi-utils-update-bibtex-entry-from-doi (jmax-bibtex-entry-doi))) - ("q" nil "quit") - ("f" jmax-bibtex-file/body "File functions") - ("a" jmax-replace-nonascii "Replace non-ascii")) + ("u" doi-utils-update-field) + ("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 (when jmax-bibtex-hydra-key-chord @@ -527,7 +601,7 @@ _q_: quit (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:" @@ -546,7 +620,8 @@ _q_: quit ("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") @@ -556,6 +631,7 @@ _q_: quit ("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 @@ -601,6 +677,7 @@ entry having a doi." (defalias 'jb 'jmax-bibtex) +;; * The end (provide 'jmax-bibtex) ;;; jmax-bibtex.el ends here