mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
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.
This commit is contained in:
parent
829e1fbc4d
commit
3285ce1d5c
@ -3695,7 +3695,7 @@ Buffer::ExportStatus Buffer::doExport(string const & target, bool put_in_tempdir
|
||||
}
|
||||
return ExportNoPathToFormat;
|
||||
}
|
||||
runparams.flavor = converters.getFlavor(path);
|
||||
runparams.flavor = converters.getFlavor(path, this);
|
||||
|
||||
} else {
|
||||
backend_format = format;
|
||||
|
@ -175,16 +175,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);
|
||||
@ -237,7 +246,8 @@ void Converters::updateLast(Formats const & formats)
|
||||
}
|
||||
|
||||
|
||||
OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path)
|
||||
OutputParams::FLAVOR Converters::getFlavor(Graph::EdgePath const & path,
|
||||
Buffer const * buffer)
|
||||
{
|
||||
for (Graph::EdgePath::const_iterator cit = path.begin();
|
||||
cit != path.end(); ++cit) {
|
||||
@ -254,7 +264,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;
|
||||
}
|
||||
|
||||
|
||||
@ -318,7 +329,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";
|
||||
@ -391,14 +402,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
|
||||
|
@ -113,7 +113,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
|
||||
@ -156,6 +157,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
|
||||
|
Loading…
Reference in New Issue
Block a user