;;; Commentary:
-;;
;; 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.")
: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.")
+ ("AAMI" "ACS Applied Materials \\& Interfaces"
+ "ACS Appl. Mater. Interfaces")
+ ("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.")
+ ("CC" "Catalysis Communications" "Catal. Commun.")
+ ("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.")
+ ("CSE" "Computing in Science \\& Engineering" "Comput. Sci. Eng.")
+ ("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.")
+ ("JASIST" "Journal of the American Society for Information Science and Technology"
+ "J. Am. Soc. Inf. Sci. Technol.")
+ ("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.
(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'."
(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
'()
("—" . "-")
("‘" . "'")
("’" . "'")
+ ("’" . "'")
("“" . "\"")
("’" . "'")
("”" . "\"")))
(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")
(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
;; 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)
(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)
("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)
("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
(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:"
("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")
("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
(defalias 'jb 'jmax-bibtex)
+;; * The end
(provide 'jmax-bibtex)
;;; jmax-bibtex.el ends here