diff options
| author | lukeflo | 2025-10-14 16:28:20 +0200 |
|---|---|---|
| committer | lukeflo | 2025-10-14 16:28:20 +0200 |
| commit | 3cd41cb1bc2046f1710175999305ab08508bae69 (patch) | |
| tree | 1377609211732c99b5f2ba44fae0aaed21579e68 | |
| parent | 9b21727bd151a3fda2133b9da12eec588068130e (diff) | |
| download | bibiman-3cd41cb1bc2046f1710175999305ab08508bae69.tar.gz bibiman-3cd41cb1bc2046f1710175999305ab08508bae69.zip | |
option to reformat citekey-based basenames of attachment files
| -rw-r--r-- | CITEKEYS.md | 8 | ||||
| -rw-r--r-- | src/bibiman/bibisetup.rs | 98 | ||||
| -rw-r--r-- | src/bibiman/citekeys.rs | 85 | ||||
| -rw-r--r-- | src/bibiman/citekeys/citekey_utils.rs | 17 | ||||
| -rw-r--r-- | tests/biblatex-test-citekeys.bib | 476 |
5 files changed, 152 insertions, 532 deletions
diff --git a/CITEKEYS.md b/CITEKEYS.md index 19bd497..828e557 100644 --- a/CITEKEYS.md +++ b/CITEKEYS.md @@ -147,11 +147,17 @@ should be built. - Most importantly: *always use the **`--dry-run`** option first*! This will print a list of old and new values for all citekeys in the file without changing anything. For the test file of this repo and using the pattern from - the [section below](#examples) `----dry-run` produces the following output: + the [section below](#examples) `--dry-run` produces the following output: [](https://postimg.cc/bs4pRJmX) - After finding a good overall pattern, *use the `--output=` option* to create a new file and don't overwrite your existing file. Thus, your original file isn't broken if the key formatter produces some unwanted output. +- Its possible to update citekey based PDF and note files directly when + formatting the citekeys using the `-u`/`--update-attachments` option. Thus, + all PDFs and notes are already linked to the correct entries after updating + the citekeys. Since this operation can break things, use it with `--dry-run` + first. As with regular citekeys this will print all changes without processing + anything. - Even very long patterns are possible, they are not encouraged, since it bloats the bibfiles. - The same accounts for *too short* patterns; if the pattern is to unspecific, diff --git a/src/bibiman/bibisetup.rs b/src/bibiman/bibisetup.rs index a83a507..a817236 100644 --- a/src/bibiman/bibisetup.rs +++ b/src/bibiman/bibisetup.rs @@ -22,6 +22,7 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::ffi::{OsStr, OsString}; +use std::path::Path; use std::{fs, path::PathBuf}; use walkdir::WalkDir; @@ -318,23 +319,27 @@ impl BibiSetup { cfg: &BibiConfig, ) -> Vec<BibiData> { let mut pdf_files = if cfg.general.pdf_path.is_some() { - collect_file_paths(cfg.general.pdf_path.as_ref().unwrap(), &Some(vec!["pdf"])) + collect_file_paths( + cfg.general.pdf_path.as_ref().unwrap(), + Some(vec!["pdf".into()].as_slice()), + ) + } else { + None + }; + let ext = if let Some(ext) = &cfg.general.note_extensions + && cfg.general.note_path.is_some() + { + // let mut ext: Vec<&str> = Vec::new(); + // for e in cfg.general.note_extensions.as_ref().unwrap().iter() { + // ext.push(e); + // } + Some(ext.as_slice()) } else { None }; - let ext: Option<Vec<&str>> = - if cfg.general.note_path.is_some() && cfg.general.note_extensions.is_some() { - let mut ext: Vec<&str> = Vec::new(); - for e in cfg.general.note_extensions.as_ref().unwrap().iter() { - ext.push(e); - } - Some(ext) - } else { - None - }; let mut note_files = if cfg.general.note_path.is_some() && cfg.general.note_extensions.is_some() { - collect_file_paths(cfg.general.note_path.as_ref().unwrap(), &ext) + collect_file_paths(cfg.general.note_path.as_ref().unwrap(), ext.clone()) } else { None }; @@ -369,7 +374,7 @@ impl BibiSetup { file_field: filepaths.1, subtitle: Self::get_subtitle(k, bibliography), notes: if note_files.is_some() { - Self::get_notepath(k, &mut note_files, &ext) + Self::get_notepath(k, &mut note_files, ext) } else { None }, @@ -575,18 +580,18 @@ impl BibiSetup { ) -> (Option<Vec<OsString>>, bool) { if biblio.get(citekey).unwrap().file().is_ok() { ( - Some(vec![biblio - .get(citekey) - .unwrap() - .file() - .unwrap() - .trim() - .into()]), + Some(vec![ + biblio.get(citekey).unwrap().file().unwrap().trim().into(), + ]), true, ) } else if pdf_files.is_some() { ( - Self::merge_filepath_or_none_two(&citekey, pdf_files, vec!["pdf"]), + Self::merge_filepath_or_none_two( + &citekey, + pdf_files, + vec!["pdf".into()].as_slice(), + ), false, ) } else { @@ -597,10 +602,10 @@ impl BibiSetup { pub fn get_notepath( citekey: &str, note_files: &mut Option<HashMap<String, Vec<PathBuf>>>, - ext: &Option<Vec<&str>>, + ext: Option<&[String]>, ) -> Option<Vec<OsString>> { if let Some(e) = ext { - Self::merge_filepath_or_none_two(citekey, note_files, e.to_vec()) + Self::merge_filepath_or_none_two(citekey, note_files, e) } else { None } @@ -627,7 +632,7 @@ impl BibiSetup { fn merge_filepath_or_none_two( citekey: &str, files: &mut Option<HashMap<String, Vec<PathBuf>>>, - extensions: Vec<&str>, + extensions: &[String], ) -> Option<Vec<OsString>> { let mut file = Vec::new(); @@ -645,11 +650,7 @@ impl BibiSetup { } } - if file.is_empty() { - None - } else { - Some(file) - } + if file.is_empty() { None } else { Some(file) } } } @@ -663,15 +664,17 @@ impl BibiSetup { /// /// Passing [`None`] as argument for extensions will result in collecting all files /// from the given directory and its subdirectories! -pub fn collect_file_paths( - file_dir: &PathBuf, - extensions: &Option<Vec<&str>>, +pub fn collect_file_paths<P: AsRef<Path>>( + file_dir: P, + extensions: Option<&[String]>, ) -> Option<HashMap<String, Vec<PathBuf>>> { let mut files: HashMap<String, Vec<PathBuf>> = HashMap::new(); + let file_dir = file_dir.as_ref(); + // Expand tilde to /home/user let file_dir = if file_dir.starts_with("~") { - &app::expand_home(&file_dir) + &app::expand_home(&file_dir.to_path_buf()) } else { file_dir }; @@ -682,13 +685,13 @@ pub fn collect_file_paths( let f = file.unwrap().into_path(); if f.is_file() && f.extension().is_some() - && extensions.as_ref().is_some_and(|v| { + && extensions.is_some_and(|v| { v.contains( &f.extension() .unwrap_or_default() .to_ascii_lowercase() - .to_str() - .unwrap_or_default(), + .to_string_lossy() + .to_string(), ) }) { @@ -721,11 +724,7 @@ pub fn collect_file_paths( } } - if files.is_empty() { - None - } else { - Some(files) - } + if files.is_empty() { None } else { Some(files) } } #[cfg(test)] @@ -759,8 +758,11 @@ mod tests { ], ); - let matches = - BibiSetup::merge_filepath_or_none_two("citekey", &mut Some(files), vec!["md", "pdf"]); + let matches = BibiSetup::merge_filepath_or_none_two( + "citekey", + &mut Some(files), + vec!["md".into(), "pdf".into()].as_slice(), + ); assert_eq!( matches.clone().unwrap().iter().next().unwrap().to_owned(), @@ -770,9 +772,11 @@ mod tests { matches.clone().unwrap().last().unwrap().to_owned(), OsString::from("/one/other/citekey.pdf") ); - assert!(!matches - .clone() - .unwrap() - .contains(&OsString::from("/one/other/citekey2.pdf"))); + assert!( + !matches + .clone() + .unwrap() + .contains(&OsString::from("/one/other/citekey2.pdf")) + ); } } diff --git a/src/bibiman/citekeys.rs b/src/bibiman/citekeys.rs index 4516b28..8f70ab0 100644 --- a/src/bibiman/citekeys.rs +++ b/src/bibiman/citekeys.rs @@ -16,6 +16,7 @@ ///// use std::{ + ffi::OsStr, fs::OpenOptions, io::Write, path::{Path, PathBuf}, @@ -28,7 +29,10 @@ use owo_colors::OwoColorize; use serde::{Deserialize, Serialize}; use crate::{ - bibiman::citekeys::citekey_utils::{SKIPPED_ENTRIES, build_citekey, formatting_help}, + bibiman::{ + bibisetup::collect_file_paths, + citekeys::citekey_utils::{SKIPPED_ENTRIES, build_citekey, formatting_help}, + }, config::{BibiConfig, IGNORED_SPECIAL_CHARS, IGNORED_WORDS}, }; @@ -72,6 +76,7 @@ impl<'a> CitekeyFormatting<'a> { let mut formatter = CitekeyFormatting::default(); let mut source_file = PathBuf::new(); let mut target_file: Option<PathBuf> = None; + let mut update_files = false; formatter.fields = cfg.citekey_formatter.fields.clone().ok_or_eyre(format!( "Need to define {} correctly in config file", @@ -101,6 +106,7 @@ impl<'a> CitekeyFormatting<'a> { Short('t') | Short('o') | Long("target") | Long("output") => { target_file = Some(parser.value()?.into()) } + Short('u') | Long("update-attachments") => update_files = true, _ => return Err(arg.unexpected().into()), } } @@ -122,10 +128,13 @@ impl<'a> CitekeyFormatting<'a> { &*IGNORED_WORDS.as_slice() }; - formatter - .do_formatting() - .rev_sort_new_keys_by_len() - .update_file(source_file, target_file)?; + let mut updated_formatter = formatter.do_formatting().rev_sort_new_keys_by_len(); + + updated_formatter.update_file(source_file, target_file)?; + + if update_files { + updated_formatter.update_notes_pdfs(cfg)?; + } Ok(()) } @@ -194,7 +203,13 @@ impl<'a> CitekeyFormatting<'a> { target_file: Option<P>, ) -> color_eyre::Result<()> { if self.dry_run { - println!("Following citekeys would be formatted: old => new\n"); + println!( + "{}\n", + "Following citekeys would be formatted: old => new" + .bold() + .underline() + .white() + ); self.old_new_keys_map.sort_by(|a, b| a.0.cmp(&b.0)); for (old, new) in &self.old_new_keys_map { println!("{} => {}", old.italic(), new.bold()) @@ -235,6 +250,64 @@ impl<'a> CitekeyFormatting<'a> { self } + pub fn update_notes_pdfs(&self, cfg: &BibiConfig) -> color_eyre::Result<()> { + if let Some(pdf_path) = &cfg.general.pdf_path { + self.update_files_by_citekey_basename(pdf_path, vec!["pdf".into()].as_slice())?; + } + if let Some(note_path) = &cfg.general.note_path + && let Some(ext) = &cfg.general.note_extensions + { + self.update_files_by_citekey_basename(note_path, ext.as_slice())?; + } + Ok(()) + } + + fn update_files_by_citekey_basename<P: AsRef<Path>>( + &self, + path: P, + ext: &[String], + ) -> color_eyre::Result<()> { + let files = collect_file_paths(path.as_ref(), Some(ext)); + if self.dry_run { + println!( + "\n{}\n", + "Following paths would be updated:" + .underline() + .bold() + .white() + ) + } + if let Some(mut f) = files { + for (old_key, new_key) in self.old_new_keys_map.iter() { + for e in ext { + let old_basename = old_key.to_owned() + "." + e; + if let Some(item) = f.get_mut(&old_basename) { + for p in item { + let ext = p.extension(); + let basename = new_key.to_owned() + + "." + + ext.unwrap_or(OsStr::new("")).to_str().unwrap_or(""); + let new_name = p + .parent() + .expect("parent expected") + .join(Path::new(&basename)); + if !self.dry_run { + std::fs::rename(p, new_name)?; + } else { + println!( + "{} => {}", + p.display().to_string().italic().dimmed(), + new_name.display().to_string().bold() + ) + } + } + } + } + } + } + Ok(()) + } + /// Update the `Bibliography` of the `CitekeyFormatting` struct and return /// it as `String`. pub fn print_updated_bib_as_string(&mut self) -> String { diff --git a/src/bibiman/citekeys/citekey_utils.rs b/src/bibiman/citekeys/citekey_utils.rs index 58a8274..61a1804 100644 --- a/src/bibiman/citekeys/citekey_utils.rs +++ b/src/bibiman/citekeys/citekey_utils.rs @@ -79,7 +79,7 @@ pub(super) fn formatting_help() { \t{} \tThe bibfile for which the citekey formatting should be processed. \tTakes a path as argument. - ", "-s, -f, --source=, --file=".fg::<White>().bold()}, + ", "-s, -f, --source=<PATH>, --file=<PATH>".fg::<White>().bold()}, formatdoc!( " \t{} @@ -88,9 +88,22 @@ pub(super) fn formatting_help() { \tcreated. \tIf the argument isn't used, the original file will be {}! ", - "-t, -o, --target=, --output=".fg::<White>().bold(), + "-t, -o, --target=<PATH>, --output=<PATH>" + .fg::<White>() + .bold(), "overwritten".italic(), ), + formatdoc!( + " + \t{} + \tWhen formatting citekeys also rename all PDFs and notefiles + \tfollowing the bibiman citekey-basename scheme at the locations + \tset in the config file. This option can break file paths. Try + \twith {} first! + ", + "-u, --update-attachments".fg::<White>().bold(), + "--dry-run".bold() + ), ]; let help = help.join("\n"); println!("{}", help); diff --git a/tests/biblatex-test-citekeys.bib b/tests/biblatex-test-citekeys.bib deleted file mode 100644 index 34c2f33..0000000 --- a/tests/biblatex-test-citekeys.bib +++ /dev/null @@ -1,476 +0,0 @@ -@set{SET, - entryset = {article:herrmann-ofele_carboc=carben=as_2006,article:aksin-turkmen_effect=immobi=on_2006,article:yoon-ryu_pallad=pincer=comple_2006}, - annotation = {A \texttt{set} with three members.}, -} - -@set{stdmodel, - entryset = {article:glashow_partia=symmet=weak_1961,article:weinberg_model=lepton_1967,salam}, - annotation = {A \texttt{set} with three members discussing the standard - model of particle physics.}, -} - -@collection{collection:matuz-miller_contem=litera=critic_1990gale, - title = {Contemporary Literary Criticism}, - year = {1990}, - location = {Detroit}, - publisher = {Gale}, - volume = {61}, - pages = {204--208}, - editor = {Matuz, Roger and Miller, Helen}, - keywords = {narration}, - langid = {english}, - langidopts = {variant=american}, - annotation = {A \texttt{collection} entry providing the excerpt information - for the \texttt{article:doody_heming=style=jakes_1974} entry. Note the format of the \texttt{ - pages} field}, -} - -@article{article:aksin-turkmen_effect=immobi=on_2006, - title = {Effect of immobilization on catalytic characteristics of saturated - {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck} reactions}, - author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok , Levent and - { \c{C}}etinkaya, Bekir and Ni, Chaoying and B{\" u}y{ \"u}kg{\"u} - ng{ \" o}r, Orhan and {\"O}zkal, Erhan}, - volume = {691}, - number = {13}, - pages = {3027--3036}, - journaltitle = jomch, - date = {2006}, - indextitle = {Effect of immobilization on catalytic characteristics}, -} - -@article{article:angenendt_honore=salvat=vom_2002, - title = {In Honore Salvatoris~-- Vom Sinn und Unsinn der Patrozinienkunde}, - shorttitle = {In Honore Salvatoris}, - author = {Angenendt, Arnold}, - volume = {97}, - pages = {431--456, 791--823}, - journaltitle = {Revue d'Histoire Eccl{\'e}siastique}, - date = {2002}, - langid = {german}, - indextitle = {In Honore Salvatoris}, - annotation = {A German article in a French journal. Apart from that, a - typical \texttt{article} entry. Note the \texttt{indextitle} - field}, -} - -@book{book:aristotle_de=anima_1907cambr#unive#press, - title = {De Anima}, - author = {Aristotle}, - location = {Cambridge}, - publisher = cup, - date = {1907}, - editor = {Hicks, Robert Drew}, - keywords = {primary, ancient, philosophy, athens}, - langid = {english}, - langidopts = {variant=british}, - annotation = {A \texttt{book} entry with an \texttt{author} and an \texttt{ - editor}}, -} - -@book{book:aristotle_physic_1929g#p#putna, - title = {Physics}, - shorttitle = {Physics}, - author = {Aristotle}, - location = {New York}, - publisher = {G. P. Putnam}, - url = {https://www.infobooks.org/authors/classic/aristotle-books/#Physic}, - date = {1929}, - translator = {Wicksteed, P. H. and Cornford, F. M.}, - keywords = {primary, ancient, philosophy}, - langid = {english}, - langidopts = {variant=american}, - file = {~/Documents/coding/projects/bibiman/tests/book:aristotle_physic_1929g#p#putna.pdf}, - annotation = {A \texttt{book} entry with a \texttt{translator} field}, - abstract = {The Physics is a work by Aristotle dedicated to the study of - nature. Regarded by Heidegger as "the fundamental work of Western - philosophy", it presents the renowned distinction between the - four types of cause, as well as reflections on chance, motion, - infinity, and other fundamental concepts. It is here that - Aristotle sets out his celebrated paradox of time.}, -} - -@book{book:aristotle_poetic_1968clare#press, - title = {Poetics}, - shorttitle = {Poetics}, - author = {Aristotle}, - location = {Oxford}, - publisher = {Clarendon Press}, - series = {Clarendon {Aristotle}}, - date = {1968}, - editor = {Lucas, D. W.}, - keywords = {primary}, - langid = {english}, - langidopts = {variant=british}, - annotation = {A \texttt{book} entry with an \texttt{author} and an \texttt{ - editor} as well as a \texttt{series} field}, -} - -@mvbook{mvbook:aristotle_rhetor=aristo=with_1877cambr#unive#press, - title = {The \textbf{Rhetoric} of {Aristotle} with a commentary by the late {Edward - Meredith Cope}}, - shorttitle = {Rhetoric}, - author = {Aristotle}, - publisher = cup, - date = {1877}, - editor = {Cope, Edward Meredith}, - commentator = {Cope, Edward Meredith}, - volumes = {3}, - keywords = {primary}, - langid = {english}, - langidopts = {variant=british}, - sorttitle = {Rhetoric of Aristotle}, - indextitle = {Rhetoric of {Aristotle}, The}, - annotation = {A commented edition. Note the concatenation of the \texttt{ - editor} and \texttt{commentator} fields as well as the \texttt{ - volumes}, \texttt{sorttitle}, and \texttt{indextitle} fields}, -} - -@book{book:augustine_hetero=cataly=synthe_1995marce#dekke, - title = {Heterogeneous catalysis for the synthetic \textit{chemist}}, - shorttitle = {Heterogeneous catalysis}, - author = {Augustine, Robert L.}, - location = {New York}, - publisher = {Marcel Dekker}, - date = {1995}, - langid = {english}, - langidopts = {variant=american}, - annotation = {A plain \texttt{book} entry}, - keywords = {chemistry}, -} - -@book{book:averroes_epistl=on=possib_1982jewis#theol#semin#ameri, - title = {The Epistle on the Possibility of Conjunction with the Active - Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}}, - shorttitle = {Possibility of Conjunction}, - author = {Averroes}, - location = {New York}, - publisher = {Jewish Theological Seminary of America}, - series = {Moreshet: Studies in {Jewish} History, Literature and Thought}, - number = {7}, - date = {1982}, - editor = {Bland, Kalman P.}, - translator = {Bland, Kalman P.}, - keywords = {primary}, - langid = {english}, - langidopts = {variant=american}, - indextitle = {Epistle on the Possibility of Conjunction, The}, - annotation = {A \texttt{book} entry with a \texttt{series} and a \texttt{ - number}. Note the concatenation of the \texttt{editor} and - \texttt{translator} fields as well as the \texttt{indextitle} - field}, -} - -@article{article:baez-lauda_higher=algebr=v_2004, - title = {Higher-Dimensional Algebra {V}: 2-Groups}, - author = {Baez, John C. and Lauda, Aaron D.}, - volume = {12}, - pages = {423--491}, - journaltitle = {Theory and Applications of Categories}, - date = {2004}, - version = {3}, - eprint = {math/0307200v3}, - eprinttype = {arxiv}, - langid = {english}, - keywords = {math}, - langidopts = {variant=american}, - annotation = {An \texttt{article} with \texttt{eprint} and \texttt{ - eprinttype} fields. Note that the arXiv reference is - transformed into a clickable link if \texttt{hyperref} support - has been enabled. Compare \texttt{baez\slash online}, which is - the same item given as an \texttt{online} entry}, -} - -@article{article:bertram-wentworth_gromov=invari=holomo_1996, - title = {Gromov invariants for holomorphic maps on {Riemann} surfaces}, - shorttitle = {Gromov invariants}, - author = {Bertram, Aaron and Wentworth, Richard}, - volume = {9}, - number = {2}, - pages = {529--571}, - journaltitle = jams, - date = {1996}, - langid = {english}, - langidopts = {variant=american}, - annotation = {An \texttt{article} entry with a \texttt{volume} and a \texttt - {number} field}, -} - -@article{article:doody_heming=style=jakes_1974, - title = {Hemingway's Style and {Jake's} Narration}, - author = {Doody, Terrence}, - year = {1974}, - journal = {The Journal of Narrative Technique}, - volume = {4}, - number = {3}, - pages = {212--225}, - langid = {english}, - langidopts = {variant=american}, - related = {matuz:article:doody_heming=style=jakes_1974}, - relatedstring = {\autocap{e}xcerpt in}, - annotation = {An \texttt{article} entry cited as an excerpt from a \texttt{ - collection} entry. Note the format of the \texttt{related} and - \texttt{relatedstring} fields}, -} - -@article{article:gillies_herder=prepar=goethe_1933, - title = {Herder and the Preparation of {Goethe's} Idea of World Literature}, - author = {Gillies, Alexander}, - series = {newseries}, - volume = {9}, - pages = {46--67}, - journaltitle = {Publications of the English Goethe Society}, - date = {1933}, - langid = {english}, - langidopts = {variant=british}, - annotation = {An \texttt{article} entry with a \texttt{series} and a \texttt - {volume} field. Note that format of the \texttt{series} field - in the database file}, -} - -@article{article:glashow_partia=symmet=weak_1961, - title = {Partial Symmetries of Weak Interactions}, - author = {Glashow, Sheldon}, - volume = {22}, - pages = {579--588}, - journaltitle = {Nucl.~Phys.}, - date = {1961}, -} - -@article{article:herrmann-ofele_carboc=carben=as_2006, - title = {A carbocyclic carbene as an efficient catalyst ligand for {C--C} - coupling reactions}, - author = {Herrmann, Wolfgang A. and {\"O}fele, Karl and Schneider, Sabine K. - and Herdtweck, Eberhardt and Hoffmann, Stephan D.}, - volume = {45}, - number = {23}, - pages = {3859--3862}, - journaltitle = anch-ie, - date = {2006}, - indextitle = {Carbocyclic carbene as an efficient catalyst, A}, -} - -@article{article:hostetler-wingate_alkane=gold=cluste_1998, - title = {Alkanethiolate gold cluster molecules with core diameters from 1.5 - to 5.2~{nm}}, - shorttitle = {Alkanethiolate gold cluster molecules}, - author = {Hostetler, Michael J. and Wingate, Julia E. and Zhong, Chuan-Jian - and Harris, Jay E. and Vachet, Richard W. and Clark, Michael R. and - Londono, J. David and Green, Stephen J. and Stokes, Jennifer J. and - Wignall, George D. and Glish, Gary L. and Porter, Marc D. and Evans - , Neal D. and Murray, Royce W.}, - volume = {14}, - number = {1}, - pages = {17--30}, - journaltitle = {Langmuir}, - date = {1998}, - subtitle = {Core and monolayer properties as a function of core size}, - langid = {english}, - langidopts = {variant=american}, - indextitle = {Alkanethiolate gold cluster molecules}, - annotation = {An \texttt{article} entry with \arabic{author} authors. By - default, long author and editor lists are automatically - truncated. This is configurable}, -} - -@article{article:kastenholz-hunenberger_comput=method=ionic_2006, - title = {Computation of methodology\hyphen independent ionic solvation free - energies from molecular simulations}, - author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.}, - volume = {124}, - doi = {10.1063/1.2172593}, - journaltitle = jchph, - date = {2006}, - subtitle = {{I}. {The} electrostatic potential in molecular liquids}, - eid = {124106}, - langid = {english}, - langidopts = {variant=american}, - indextitle = {Computation of ionic solvation free energies}, - annotation = {An \texttt{article} entry with an \texttt{eid} and a \texttt{ - doi} field. Note that the \textsc{doi} is transformed into a - clickable link if \texttt{hyperref} support has been enabled}, - abstract = {The computation of \texttt{ionic} solvation free energies from atomistic - simulations is a surprisingly difficult problem that has found no - satisfactory solution for more than 15 years. The reason is that - the charging free energies evaluated from such simulations are - affected by very large errors. One of these is related to the - choice of a specific convention for summing up the contributions - of solvent charges to the electrostatic potential in the ionic - cavity, namely, on the basis of point charges within entire - solvent molecules (M scheme) or on the basis of individual point - charges (P scheme). The use of an inappropriate convention may - lead to a charge-independent offset in the calculated potential, - which depends on the details of the summation scheme, on the - quadrupole-moment trace of the solvent molecule, and on the - approximate form used to represent electrostatic interactions in - the system. However, whether the M or P scheme (if any) - represents the appropriate convention is still a matter of - on-going debate. The goal of the present article is to settle - this long-standing controversy by carefully analyzing (both - analytically and numerically) the properties of the electrostatic - potential in molecular liquids (and inside cavities within them). - }, -} - -@article{article:sarfraz-razzak_techni=sectio=algori_2002, - title = {Technical section: {An} algorithm for automatic capturing of the - font outlines}, - author = {M. Sarfraz and M. F. A. Razzak}, - year = {2002}, - journal = {Computers and Graphics}, - volume = {26}, - number = {5}, - pages = {795--804}, - issn = {0097-8493}, - annotation = {An \texttt{article} entry with an \texttt{issn} field}, -} - -@article{article:reese_georgi=anglos=diplom_1958, - title = {Georgia in {Anglo-Spanish} Diplomacy, 1736--1739}, - author = {Reese, Trevor R.}, - series = {3}, - volume = {15}, - pages = {168--190}, - journaltitle = {William and Mary Quarterly}, - date = {1958}, - langid = {english}, - langidopts = {variant=american}, - annotation = {An \texttt{article} entry with a \texttt{series} and a \texttt - {volume} field. Note the format of the series. If the value of - the \texttt{series} field is an integer, this number is printed - as an ordinal and the string \enquote*{series} is appended - automatically}, -} - -@article{article:shore_twiceb=once=concei_1991, - title = {Twice-Born, Once Conceived}, - author = {Shore, Bradd}, - series = {newseries}, - volume = {93}, - number = {1}, - pages = {9--27}, - journaltitle = {American Anthropologist}, - date = {1991-03}, - subtitle = {Meaning Construction and Cultural Cognition}, - annotation = {An \texttt{article} entry with \texttt{series}, \texttt{volume - }, and \texttt{number} fields. Note the format of the \texttt{ - series} which is a localization key}, -} - -@article{article:sigfridsson-ryde_compar=method=derivi_1998, - title = {Comparison of methods for deriving atomic charges from the - electrostatic potential and moments}, - author = {Sigfridsson, Emma and Ryde, Ulf}, - volume = {19}, - number = {4}, - pages = {377--395}, - doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P}, - journaltitle = {Journal of Computational Chemistry}, - date = {1998}, - langid = {english}, - langidopts = {variant=american}, - indextitle = {Methods for deriving atomic charges}, - annotation = {An \texttt{article} entry with \texttt{volume}, \texttt{number - }, and \texttt{doi} fields. Note that the \textsc{doi} is - transformed into a clickable link if \texttt{hyperref} support - has been enabled}, - abstract = {Four methods for deriving partial atomic charges from the - quantum chemical electrostatic potential (CHELP, CHELPG, - Merz-Kollman, and RESP) have been compared and critically - evaluated. It is shown that charges strongly depend on how and - where the potential points are selected. Two alternative methods - are suggested to avoid the arbitrariness in the point-selection - schemes and van der Waals exclusion radii: CHELP-BOW, which also - estimates the charges from the electrostatic potential, but with - potential points that are Boltzmann-weighted after their - occurrence in actual simulations using the energy function of the - program in which the charges will be used, and CHELMO, which - estimates the charges directly from the electrostatic multipole - moments. Different criteria for the quality of the charges are - discussed.}, -} - -@article{article:spiegelberg_intent=intent=schola_1969, - title = {\mkbibquote{Intention} und \mkbibquote{Intentionalit{\"a}t} in der - Scholastik, bei Brentano und Husserl}, - shorttitle = {Intention und Intentionalit{\"a}t}, - author = {Spiegelberg, Herbert}, - volume = {29}, - pages = {189--216}, - journaltitle = {Studia Philosophica}, - date = {1969}, - langid = {german}, - sorttitle = {Intention und Intentionalitat in der Scholastik, bei Brentano - und Husserl}, - indexsorttitle = {Intention und Intentionalitat in der Scholastik, bei - Brentano und Husserl}, - annotation = {An \texttt{article} entry. Note the \texttt{sorttitle} and - \texttt{indexsorttitle} fields and the markup of the quotes in - the database file}, -} - -@article{article:springer_mediae=pilgri=routes_1950, - title = {Mediaeval Pilgrim Routes from {Scandinavia} to {Rome}}, - shorttitle = {Mediaeval Pilgrim Routes}, - author = {Springer, Otto}, - volume = {12}, - pages = {92--122}, - journaltitle = {Mediaeval Studies}, - date = {1950}, - langid = {english}, - langidopts = {variant=british}, - annotation = {A plain \texttt{article} entry}, -} - -@article{article:weinberg_model=lepton_1967, - title = {A Model of Leptons}, - author = {Weinberg, Steven}, - volume = {19}, - pages = {1264--1266}, - journaltitle = {Phys.~Rev.~Lett.}, - date = {1967}, -} - -@string{anch-ie = {Angew.~Chem. Int.~Ed.}} - -@string{cup = {Cambridge University Press}} - -@string{dtv = {Deutscher Taschenbuch-Verlag}} - -@string{hup = {Harvard University Press}} - -@string{jams = {J.~Amer. Math. Soc.}} - -@string{jchph = {J.~Chem. Phys.}} - -@string{jomch = {J.~Organomet. Chem.}} - -@string{pup = {Princeton University Press}} - -@incollection{incollection:westfahl_true=fronti, - title = {The True Frontier}, - author = {Westfahl, Gary}, - pages = {55--65}, - subtitle = {Confronting and Avoiding the Realities of Space in {American} - Science Fiction Films}, - crossref = {westfahl:frontier}, - langid = {english}, - langidopts = {variant=american}, - indextitle = {True Frontier, The}, - annotation = {A cross-referenced article from a \texttt{collection}. This is - an \texttt{incollection} entry with a \texttt{crossref} field. - Note the \texttt{subtitle} and \texttt{indextitle} fields}, -} - -@article{article:yoon-ryu_pallad=pincer=comple_2006, - title = {Palladium pincer complexes with reduced bond angle strain: - efficient catalysts for the {Heck} reaction}, - author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn, Kyo - Han}, - volume = {25}, - number = {10}, - pages = {2409--2411}, - journaltitle = {Organometallics}, - date = {2006}, - indextitle = {Palladium pincer complexes}, -} |
