Set correct path to (biblatex) bibliography databases that are entered relative to child documents.

Fixes: #11105
(cherry picked from commit 2ecc3b09c6)
This commit is contained in:
Juergen Spitzmueller 2018-04-07 22:09:06 +02:00
parent c690e8880b
commit 9df09d8cba
4 changed files with 33 additions and 8 deletions

View File

@ -3185,9 +3185,27 @@ vector<docstring> const Buffer::prepareBibFilePaths(OutputParams const & runpara
string utf8input = to_utf8(it->first); string utf8input = to_utf8(it->first);
string database = string database =
prepareFileNameForLaTeX(utf8input, ".bib", runparams.nice); prepareFileNameForLaTeX(utf8input, ".bib", runparams.nice);
FileName const try_in_file = FileName try_in_file =
makeAbsPath(database + ".bib", filePath()); makeAbsPath(database + ".bib", filePath());
bool const not_from_texmf = try_in_file.isReadableFile(); bool not_from_texmf = try_in_file.isReadableFile();
// If the file has not been found, try with the real file name
// (it might come from a child in a sub-directory)
if (!not_from_texmf) {
try_in_file = it->second;
if (try_in_file.isReadableFile()) {
// Check if the file is in texmf
FileName kpsefile(findtexfile(changeExtension(utf8input, "bib"), "bib", true));
not_from_texmf = kpsefile.empty()
|| kpsefile.absFileName() != try_in_file.absFileName();
if (not_from_texmf)
// If this exists, make path relative to the master
// FIXME Unicode
database = removeExtension(
prepareFileNameForLaTeX(to_utf8(makeRelPath(from_utf8(try_in_file.absFileName()),
from_utf8(filePath()))),
".bib", runparams.nice));
}
}
if (!runparams.inComment && !runparams.dryrun && !runparams.nice && if (!runparams.inComment && !runparams.dryrun && !runparams.nice &&
not_from_texmf) { not_from_texmf) {

View File

@ -1094,7 +1094,8 @@ cmd_ret const runCommand(string const & cmd)
} }
FileName const findtexfile(string const & fil, string const & /*format*/) FileName const findtexfile(string const & fil, string const & /*format*/,
bool const onlykpse)
{ {
/* There is no problem to extend this function too use other /* There is no problem to extend this function too use other
methods to look for files. It could be setup to look methods to look for files. It could be setup to look
@ -1107,9 +1108,11 @@ FileName const findtexfile(string const & fil, string const & /*format*/)
// If the file can be found directly, we just return a // If the file can be found directly, we just return a
// absolute path version of it. // absolute path version of it.
FileName const absfile(makeAbsPath(fil)); if (!onlykpse) {
if (absfile.exists()) FileName const absfile(makeAbsPath(fil));
return absfile; if (absfile.exists())
return absfile;
}
// Now we try to find it using kpsewhich. // Now we try to find it using kpsewhich.
// It seems from the kpsewhich manual page that it is safe to use // It seems from the kpsewhich manual page that it is safe to use

View File

@ -282,7 +282,8 @@ bool readLink(FileName const & file, FileName & link);
* \param format The file format as used by kpsewhich, e.g. "bib", "bst" etc. * \param format The file format as used by kpsewhich, e.g. "bib", "bst" etc.
*/ */
FileName const findtexfile(std::string const & fil, FileName const findtexfile(std::string const & fil,
std::string const & format); std::string const & format,
bool const onlykpse = false);
/** \param file1, file2 the two files to be compared. Must have absolute paths. /** \param file1, file2 the two files to be compared. Must have absolute paths.
* \returns 1 if \c file1 has a more recent timestamp than \c file2, * \returns 1 if \c file1 has a more recent timestamp than \c file2,

View File

@ -94,7 +94,7 @@ What's new
* DOCUMENT INPUT/OUTPUT * DOCUMENT INPUT/OUTPUT
- Fix language settings annd line spacing in InPreamble-titles - Fix language settings and line spacing in InPreamble-titles
(bug 9332, 1049). (bug 9332, 1049).
- Respect 'literal' setting when calculating longest bibitem (bug 10817). - Respect 'literal' setting when calculating longest bibitem (bug 10817).
@ -104,6 +104,9 @@ What's new
- Fix polyglossia language switches for Arabic (bug 11057). - Fix polyglossia language switches for Arabic (bug 11057).
- Set correct path to (biblatex) bibliography databases that are entered
relative to child documents (bug 11105).
* LYX2LYX * LYX2LYX