From 3285ce1d5cb9ba79af700d004401115269e97ada Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Wed, 11 Apr 2012 18:19:11 +0200 Subject: [PATCH] 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. --- src/Buffer.cpp | 2 +- src/Converter.cpp | 68 ++++++++++++++++++++++++++++++++++------------- src/Converter.h | 9 ++++++- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index d5e337603c..76ec7d81ab 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -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; diff --git a/src/Converter.cpp b/src/Converter.cpp index 5d4a1326f9..ed5f893f7b 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -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 diff --git a/src/Converter.h b/src/Converter.h index f71f123a61..8f131bba36 100644 --- a/src/Converter.h +++ b/src/Converter.h @@ -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