tree bibtex_run (string bib, string style, url bib_file, tree bib_t) { int i; string bib_s= "\\bibstyle{" * style * "}\n"; for (i=0; i<arity(bib_t); i++) bib_s << "\\citation{" << as_string (bib_t[i]) << "}\n"; string dir= concretize (head (bib_file)); string bib_name= as_string (tail (bib_file)); if ((N(bib_name) >= 4) && (bib_name (N(bib_name)-4, N(bib_name)) == ".bib")) bib_name= bib_name (0, N(bib_name)- 4); bib_s << "\\bibdata{" << bib_name << "}\n"; save_string ("$TEXMACS_HOME_PATH/system/bib/temp.aux", bib_s); #ifdef OS_WIN32 char *directory = as_charp (dir); RunBibtex(directory, "$TEXMACS_HOME_PATH/system/bib", "temp"); tm_delete_array (directory); #else string cmdln= "cd $TEXMACS_HOME_PATH/system/bib; "; cmdln << "BIBINPUTS=" << dir << ":$BIBINPUTS " << "BSTINPUTS=" << dir << ":$BSTINPUTS " << bibtex_command << " temp"; if (DEBUG_AUTO) cout << "TeXmacs] BibTeX command: " << cmdln << "\n"; system (cmdln); #endif return bibtex_load_bbl (bib, "$TEXMACS_HOME_PATH/system/bib/temp.bbl"); /* string result; if (load_string ("$TEXMACS_HOME_PATH/system/bib/temp.bbl", result, false)) return "Error: bibtex failed to create bibliography"; int count=1; tree t= generic_to_tree (result, "latex-snippet"); t= search_bib (t); if (t == "") return ""; tree largest= t[0]; t= t[1]; tree u (DOCUMENT); for (i=0; i<arity(t); i++) { if (is_concat (t[i]) && (is_compound (t[i][0], "bibitem") || is_compound (t[i][0], "bibitem*"))) { tree item= t[i][0]; if (is_compound (item, "bibitem")) item= compound ("bibitem*", as_string (count++), item[0]); t[i][0]= item; tree v (CONCAT, compound ("bibitem*", item[0])); if (is_atomic (item[1])) v << tree (LABEL, bib * "-" * item[1]->label); if (N(t[i])>1) { v << remove_start_space (t[i][1]); v << A (t[i] (2, N(t[i]))); } u << v; } } if (N(u) == 0) u= tree (DOCUMENT, ""); return compound ("bib-list", largest, u); */ }
void edit_process_rep::generate_bibliography ( string bib, string style, string fname) { system_wait ("Generating bibliography, ", "please wait"); if (DEBUG_AUTO) debug_automatic << "Generating bibliography" << " [" << bib << ", " << style << ", " << fname << "]\n"; tree bib_t= buf->data->aux[bib]; if (buf->prj != NULL) bib_t= buf->prj->data->aux[bib]; tree t; url bib_file= find_bib_file (buf->buf->name, fname); //cout << fname << " -> " << concretize (bib_file) << "\n"; if (is_none (bib_file)) { url bbl_file= find_bib_file (buf->buf->name, fname, ".bbl"); if (is_none (bbl_file)) { if (supports_db ()) { t= as_tree (call (string ("bib-compile"), bib, style, bib_t)); call (string ("bib-attach"), bib, bib_t); } else { std_error << "Could not load BibTeX file " << fname; set_message ("Could not find bibliography file", "compile bibliography"); return; } } else t= bibtex_load_bbl (bib, bbl_file); } else { if (!bibtex_present () && !starts (style, "tm-")) { if (style == "abbrv") style= "tm-abbrv"; else if (style == "acm") style= "tm-acm"; else if (style == "alpha") style= "tm-alpha"; else if (style == "elsart-num") style= "tm-elsart-num"; else if (style == "ieeetr") style= "tm-ieeetr"; else if (style == "siam") style= "tm-siam"; else if (style == "unsrt") style= "tm-unsrt"; else style= "tm-plain"; } if (supports_db () && !is_rooted (bib_file)) bib_file= find_bib_file (buf->buf->name, fname, ".bib", true); if (supports_db ()) { //(void) call (string ("bib-import-bibtex"), bib_file); t= as_tree (call (string ("bib-compile"), bib, style, bib_t, bib_file)); } else if (starts (style, "tm-")) { string sbib; if (load_string (bib_file, sbib, false)) std_error << "Could not load BibTeX file " << fname; tree te= bib_entries (parse_bib (sbib), bib_t); object ot= tree_to_stree (te); eval ("(use-modules (bibtex " * style (3, N(style)) * "))"); t= stree_to_tree (call (string ("bib-process"), bib, style (3, N(style)), ot)); } else t= bibtex_run (bib, style, bib_file, bib_t); if (supports_db ()) (void) call (string ("bib-attach"), bib, bib_t, bib_file); } if (is_atomic (t) && starts (t->label, "Error:")) set_message (t->label, "compile bibliography"); else if (is_compound (t) && N(t) > 0) insert_tree (t); }