diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index 204c842652..310e621e17 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -710,8 +710,12 @@ string latexEnvCmdPrefix(string const & path, string const & lpath) string texinputs_prefix = lyxrc.texinputs_prefix.empty() ? string() : os::latex_path_list( replaceCurdirPath(path, lyxrc.texinputs_prefix)); + string const allother_prefix = os::latex_path_list(path); string const sep = string(1, os::path_separator(os::TEXENGINE)); string const texinputs = getEnv("TEXINPUTS"); + string const bibinputs = getEnv("BIBINPUTS"); + string const bstinputs = getEnv("BSTINPUTS"); + string const texfonts = getEnv("TEXFONTS"); if (use_lpath) { string const abslpath = FileName::isAbsolute(lpath) @@ -727,13 +731,28 @@ string latexEnvCmdPrefix(string const & path, string const & lpath) if (os::shell() == os::UNIX) return "env TEXINPUTS=\"." + sep + texinputs_prefix - + sep + texinputs + "\" "; + + sep + texinputs + "\" " + + "BIBINPUTS=\"." + sep + allother_prefix + + sep + bibinputs + "\" " + + "BSTINPUTS=\"." + sep + allother_prefix + + sep + bstinputs + "\" " + + "TEXFONTS=\"." + sep + allother_prefix + + sep + texfonts + "\" "; else - // NOTE: the dummy blank dir is necessary to force the + // NOTE: the dummy blank dirs are necessary to force the // QProcess parser to quote the argument (see bug 9453) return "cmd /d /c set \"TEXINPUTS=." + sep + " " - + sep + texinputs_prefix - + sep + texinputs + "\" & "; + + sep + texinputs_prefix + + sep + texinputs + "\" & " + + "set \"BIBINPUTS=." + sep + " " + + sep + allother_prefix + + sep + bibinputs + "\" & " + + "set \"BSTINPUTS=." + sep + " " + + sep + allother_prefix + + sep + bstinputs + "\" & " + + "set \"TEXFONTS=." + sep + " " + + sep + allother_prefix + + sep + texfonts + "\" & "; } diff --git a/src/support/os_cygwin.cpp b/src/support/os_cygwin.cpp index 572273ce2c..3464c04d78 100644 --- a/src/support/os_cygwin.cpp +++ b/src/support/os_cygwin.cpp @@ -438,11 +438,21 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode, { string const texinputs = os::latex_path_list( replaceCurdirPath(path, lyxrc.texinputs_prefix)); + string const otherinputs = os::latex_path_list(path); string const sep = windows_style_tex_paths_ ? ";" : ":"; - string const oldval = getEnv("TEXINPUTS"); - string const newval = "." + sep + texinputs + sep + oldval; + string const oldtexinputs = getEnv("TEXINPUTS"); + string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs; + string const oldbibinputs = getEnv("BIBINPUTS"); + string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs; + string const oldbstinputs = getEnv("BSTINPUTS"); + string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs; + string const oldtexfonts = getEnv("TEXFONTS"); + string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts; if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { - setEnv("TEXINPUTS", newval); + setEnv("TEXINPUTS", newtexinputs); + setEnv("BIBINPUTS", newbibinputs); + setEnv("BSTINPUTS", newbstinputs); + setEnv("TEXFONTS", newtexfonts); cygwin_internal(CW_SYNC_WINENV); } @@ -453,7 +463,10 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode, win_path.c_str(), NULL, NULL, 1)) > 32; if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { - setEnv("TEXINPUTS", oldval); + setEnv("TEXINPUTS", oldtexinputs); + setEnv("BIBINPUTS", oldbibinputs); + setEnv("BSTINPUTS", oldbstinputs); + setEnv("TEXFONTS", oldtexfonts); cygwin_internal(CW_SYNC_WINENV); } return success; diff --git a/src/support/os_unix.cpp b/src/support/os_unix.cpp index 81cbb354fe..9109fbb586 100644 --- a/src/support/os_unix.cpp +++ b/src/support/os_unix.cpp @@ -298,14 +298,29 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode, string const texinputs = os::latex_path_list( replaceCurdirPath(path, lyxrc.texinputs_prefix)); - string const oldval = getEnv("TEXINPUTS"); - string const newval = ".:" + texinputs + ":" + oldval; - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", newval); + string const otherinputs = os::latex_path_list(path); + string const oldtexinputs = getEnv("TEXINPUTS"); + string const newtexinputs = ".:" + texinputs + ":" + oldtexinputs; + string const oldbibinputs = getEnv("BIBINPUTS"); + string const newbibinputs = ".:" + otherinputs + ":" + oldbibinputs; + string const oldbstinputs = getEnv("BSTINPUTS"); + string const newbstinputs = ".:" + otherinputs + ":" + oldbstinputs; + string const oldtexfonts = getEnv("TEXFONTS"); + string const newtexfonts = ".:" + otherinputs + ":" + oldtexfonts; + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", newtexinputs); + setEnv("BIBINPUTS", newbibinputs); + setEnv("BSTINPUTS", newbstinputs); + setEnv("TEXFONTS", newtexfonts); + } status = LSOpenFromURLSpec (&launchUrlSpec, NULL); CFRelease(launchItems); - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", oldval); + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", oldtexinputs); + setEnv("BIBINPUTS", oldbibinputs); + setEnv("BSTINPUTS", oldbstinputs); + setEnv("TEXFONTS", oldtexfonts); + } return status == 0; #else // silence compiler warnings diff --git a/src/support/os_win32.cpp b/src/support/os_win32.cpp index 0928259b72..c50fa05b1a 100644 --- a/src/support/os_win32.cpp +++ b/src/support/os_win32.cpp @@ -544,19 +544,34 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode, { string const texinputs = os::latex_path_list( replaceCurdirPath(path, lyxrc.texinputs_prefix)); + string const otherinputs = os::latex_path_list(path); string const sep = windows_style_tex_paths_ ? ";" : ":"; - string const oldval = getEnv("TEXINPUTS"); - string const newval = "." + sep + texinputs + sep + oldval; - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", newval); + string const oldtexinputs = getEnv("TEXINPUTS"); + string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs; + string const oldbibinputs = getEnv("BIBINPUTS"); + string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs; + string const oldbstinputs = getEnv("BSTINPUTS"); + string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs; + string const oldtexfonts = getEnv("TEXFONTS"); + string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts; + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", newtexinputs); + setEnv("BIBINPUTS", newbibinputs); + setEnv("BSTINPUTS", newbstinputs); + setEnv("TEXFONTS", newtexfonts); + } // reference: http://msdn.microsoft.com/en-us/library/bb762153.aspx char const * action = (mode == VIEW) ? "open" : "edit"; bool success = reinterpret_cast(ShellExecute(NULL, action, to_local8bit(from_utf8(filename)).c_str(), NULL, NULL, 1)) > 32; - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", oldval); + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", oldtexinputs); + setEnv("BIBINPUTS", oldbibinputs); + setEnv("BSTINPUTS", oldbstinputs); + setEnv("TEXFONTS", oldtexfonts); + } return success; }