Use the right latex backend when a converter needs aux files.

If a converter specifies the needaux flag, latex (or xelatex) is
always run to produce the needed auxiliary files. This is wrong
because there are documents that can only be compiled with a specific
backend and thus the conversion may fail. On the other hand, even if
the document specifies the backend to be used, LyX ignores this info.

This commit rectifies this behavior by letting LyX run the same flavor
of the latex backend that shall be used for previewing the document
also for producing the auxiliary files.

(cherry picked from commit 3285ce1d5c)

Conflicts:

	src/Converter.cpp
This commit is contained in:
Enrico Forestieri 2012-04-11 18:19:11 +02:00
parent 229fa2cd88
commit 99fe8ef2ba
14 changed files with 61 additions and 20 deletions

0
lib/fonts/cmex10.ttf Normal file → Executable file
View File

0
lib/fonts/cmmi10.ttf Normal file → Executable file
View File

0
lib/fonts/cmr10.ttf Normal file → Executable file
View File

0
lib/fonts/cmsy10.ttf Normal file → Executable file
View File

0
lib/fonts/esint10.ttf Normal file → Executable file
View File

0
lib/fonts/eufm10.ttf Normal file → Executable file
View File

0
lib/fonts/msam10.ttf Normal file → Executable file
View File

0
lib/fonts/msbm10.ttf Normal file → Executable file
View File

0
lib/fonts/rsfs10.ttf Normal file → Executable file
View File

0
lib/fonts/wasy10.ttf Normal file → Executable file
View File

View File

@ -3544,7 +3544,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
}
return false;
}
runparams.flavor = converters.getFlavor(path);
runparams.flavor = converters.getFlavor(path, this);
} else {
backend_format = format;

View File

@ -189,16 +189,25 @@ void Converters::add(string const & from, string const & to,
}
converter.readFlags();
// If we have both latex & pdflatex, we set latex_command to latex.
// The latex_command is used to update the .aux file when running
// a converter that uses it.
if (converter.latex
&& (latex_command_.empty() || converter.latex_flavor == "latex"))
latex_command_ = subst(command, token_from, "");
// Similarly, set xelatex_command to xelatex.
if (converter.latex
&& (xelatex_command_.empty() || converter.latex_flavor == "xelatex"))
xelatex_command_ = subst(command, token_from, "");
if (converter.latex) {
if (latex_command_.empty() ||
converter.latex_flavor == "latex")
latex_command_ = subst(command, token_from, "");
if (dvilualatex_command_.empty() ||
converter.latex_flavor == "dvilualatex")
dvilualatex_command_ = subst(command, token_from, "");
if (lualatex_command_.empty() ||
converter.latex_flavor == "lualatex")
lualatex_command_ = subst(command, token_from, "");
if (pdflatex_command_.empty() ||
converter.latex_flavor == "pdflatex")
pdflatex_command_ = subst(command, token_from, "");
if (xelatex_command_.empty() ||
converter.latex_flavor == "xelatex")
xelatex_command_ = subst(command, token_from, "");
}
if (it == converterlist_.end()) {
converterlist_.push_back(converter);
@ -258,6 +267,7 @@ void Converters::sort()
OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path)
Buffer const * buffer)
{
for (Graph::EdgePath::const_iterator cit = path.begin();
cit != path.end(); ++cit) {
@ -274,7 +284,8 @@ OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path)
if (conv.xml)
return OutputParams::XML;
}
return OutputParams::LATEX;
return buffer ? buffer->params().getOutputFlavor()
: OutputParams::LATEX;
}
@ -338,7 +349,7 @@ bool Converters::convert(Buffer const * buffer,
// buffer is only invalid for importing, and then runparams is not
// used anyway.
OutputParams runparams(buffer ? &buffer->params().encoding() : 0);
runparams.flavor = getFlavor(edgepath);
runparams.flavor = getFlavor(edgepath, buffer);
if (buffer) {
runparams.use_japanese = buffer->params().bufferFormat() == "platex";
@ -403,14 +414,33 @@ bool Converters::convert(Buffer const * buffer,
if (!runLaTeX(*buffer, command, runparams, errorList))
return false;
} else {
if (conv.need_aux && !run_latex
&& !latex_command_.empty()) {
string const command = (buffer && buffer->params().useNonTeXFonts) ?
xelatex_command_ : latex_command_;
LYXERR(Debug::FILES, "Running " << command
<< " to update aux file");
if (!runLaTeX(*buffer, command, runparams, errorList))
return false;
if (conv.need_aux && !run_latex) {
string command;
switch (runparams.flavor) {
case OutputParams::DVILUATEX:
command = dvilualatex_command_;
break;
case OutputParams::LUATEX:
command = lualatex_command_;
break;
case OutputParams::PDFLATEX:
command = pdflatex_command_;
break;
case OutputParams::XETEX:
command = xelatex_command_;
break;
default:
command = latex_command_;
break;
}
if (!command.empty()) {
LYXERR(Debug::FILES, "Running "
<< command
<< " to update aux file");
if (!runLaTeX(*buffer, command,
runparams, errorList))
return false;
}
}
// FIXME UNICODE

View File

@ -115,7 +115,8 @@ public:
///
Graph::EdgePath getPath(std::string const & from, std::string const & to);
///
OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path);
OutputParams::FLAVOR getFlavor(Graph::EdgePath const & path,
Buffer const * buffer = 0);
/// Flags for converting files
enum ConversionFlags {
/// No special flags
@ -158,6 +159,12 @@ private:
///
std::string latex_command_;
///
std::string dvilualatex_command_;
///
std::string lualatex_command_;
///
std::string pdflatex_command_;
///
std::string xelatex_command_;
/// If \p from = /path/file.ext and \p to = /path2/file2.ext2 then
/// this method moves each /path/file*.ext file to /path2/file2*.ext2

View File

@ -85,6 +85,10 @@ What's new
- Fixed reading the bounding box from EPS figures with negative
values (bug 8114).
- Fix generation of auxiliary files for converters specifying the needaux
flag by using the same latex backend used for previewing the document
instead of always using the plain latex backend.
* USER INTERFACE