X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeX.cpp;h=7d9810aef1a8b22e147c8d571191ec98145ae693;hb=2abde5d16254e8aac29e344442b09e6272000f13;hp=c38f5cb0dd043b058a5ea373de8ca058d7b5769c;hpb=8cb7fb26d758f46bb6582761b88cbec0c3db872e;p=lyx.git diff --git a/src/LaTeX.cpp b/src/LaTeX.cpp index c38f5cb0dd..7d9810aef1 100644 --- a/src/LaTeX.cpp +++ b/src/LaTeX.cpp @@ -135,7 +135,7 @@ LaTeX::LaTeX(string const & latex, OutputParams const & rp, void LaTeX::removeAuxiliaryFiles() const { - LYXERR(Debug::LATEX, "Removing auxiliary files"); + LYXERR(Debug::OUTFILE, "Removing auxiliary files"); // Note that we do not always call this function when there is an error. // For example, if there is an error but an output file is produced we // still would like to output (export/view) the file. @@ -280,7 +280,7 @@ int LaTeX::run(TeXErrors & terr) bibtex_info_old = scanAuxFiles(aux_file, runparams.only_childbibs); ++count; - LYXERR(Debug::LATEX, "Run #" << count); + LYXERR(Debug::OUTFILE, "Run #" << count); message(runMessage(count)); int exit_code = startscript(); @@ -289,7 +289,7 @@ int LaTeX::run(TeXErrors & terr) scanres = scanLogFile(terr); if (scanres & ERROR_RERUN) { - LYXERR(Debug::LATEX, "Rerunning LaTeX"); + LYXERR(Debug::OUTFILE, "Rerunning LaTeX"); terr.clearErrors(); exit_code = startscript(); if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT) @@ -324,7 +324,7 @@ int LaTeX::run(TeXErrors & terr) // "\bibdata" and/or "\bibstyle". If one of those // tags is found -> run bibtex and set rerun = true; // no checks for now - LYXERR(Debug::LATEX, "Running Bibliography Processor."); + LYXERR(Debug::OUTFILE, "Running Bibliography Processor."); message(_("Running Bibliography Processor.")); updateBibtexDependencies(head, bibtex_info); int exit_code; @@ -357,7 +357,7 @@ int LaTeX::run(TeXErrors & terr) rerun = false; ++count; LYXERR(Debug::DEPEND, "Dep. file has changed or rerun requested"); - LYXERR(Debug::LATEX, "Run #" << count); + LYXERR(Debug::OUTFILE, "Run #" << count); message(runMessage(count)); int exit_code = startscript(); if (exit_code == Systemcall::KILLED || exit_code == Systemcall::TIMEOUT) @@ -385,7 +385,7 @@ int LaTeX::run(TeXErrors & terr) // "\bibdata" and/or "\bibstyle". If one of those // tags is found -> run bibtex and set rerun = true; // no checks for now - LYXERR(Debug::LATEX, "Re-Running Bibliography Processor."); + LYXERR(Debug::OUTFILE, "Re-Running Bibliography Processor."); message(_("Re-Running Bibliography Processor.")); updateBibtexDependencies(head, bibtex_info); int exit_code; @@ -401,17 +401,19 @@ int LaTeX::run(TeXErrors & terr) // After the bibliography was processed, we need more passes of LaTeX // in order to resolve the citations. We need to do this before the index // is being generated (since we need the correct pagination, see #2696). + // With bibliography environment, another LaTeX run might be needed + // as well to resolve citations. // Also, memoir (at least) writes an empty *idx file in the first place. // A further latex run is needed in that case as well. FileName const idxfile(changeExtension(file.absFileName(), ".idx")); - if (run_bibtex || (idxfile.exists() && idxfile.isFileEmpty())) { - while ((head.sumchange() || rerun || (scanres & RERUN)) + if (run_bibtex || (scanres & UNDEF_CIT) || (idxfile.exists() && idxfile.isFileEmpty())) { + while ((head.sumchange() || rerun || (scanres & RERUN) || (scanres & UNDEF_CIT)) && count < MAX_RUN) { // Yes rerun until message goes away, or until // MAX_RUNS are reached. rerun = false; ++count; - LYXERR(Debug::LATEX, "Run #" << count); + LYXERR(Debug::OUTFILE, "Run #" << count); message(runMessage(count)); startscript(); scanres = scanLogFile(terr); @@ -425,13 +427,20 @@ int LaTeX::run(TeXErrors & terr) // Now that we have final pagination, run the index and nomencl processors if (idxfile.exists()) { // no checks for now - LYXERR(Debug::LATEX, "Running Index Processor."); + LYXERR(Debug::OUTFILE, "Running Index Processor."); message(_("Running Index Processor.")); // onlyFileName() is needed for cygwin int const ret = runMakeIndex(onlyFileName(idxfile.absFileName()), runparams); if (ret == Systemcall::KILLED || ret == Systemcall::TIMEOUT) return ret; + else if (ret != Systemcall::OK) { + iscanres |= INDEX_ERROR; + terr.insertError(0, + _("Index Processor Error"), + _("The index processor did not run successfully. " + "Please check the output of View > Messages Pane!")); + } FileName const ilgfile(changeExtension(file.absFileName(), ".ilg")); if (ilgfile.exists()) iscanres = scanIlgFile(terr); @@ -473,7 +482,7 @@ int LaTeX::run(TeXErrors & terr) // MAX_RUNS are reached. rerun = false; ++count; - LYXERR(Debug::LATEX, "Run #" << count); + LYXERR(Debug::OUTFILE, "Run #" << count); message(runMessage(count)); startscript(); scanres = scanLogFile(terr); @@ -492,7 +501,7 @@ int LaTeX::run(TeXErrors & terr) scanres |= NONZERO_ERROR; } - LYXERR(Debug::LATEX, "Done."); + LYXERR(Debug::OUTFILE, "Done."); if (bscanres & ERRORS) return bscanres; // return on error @@ -562,7 +571,7 @@ int LaTeX::runMakeIndex(string const & f, OutputParams const & rp, tmp = subst(tmp, "$$b", removeExtension(f)); } - LYXERR(Debug::LATEX, + LYXERR(Debug::OUTFILE, "idx file has been made, running index processor (" << tmp << ") on file " << f); @@ -572,7 +581,7 @@ int LaTeX::runMakeIndex(string const & f, OutputParams const & rp, } if (rp.use_indices) { tmp = lyxrc.splitindex_command + " -m " + quoteName(tmp); - LYXERR(Debug::LATEX, + LYXERR(Debug::OUTFILE, "Multiple indices. Using splitindex command: " << tmp); } tmp += ' '; @@ -588,8 +597,8 @@ int LaTeX::runMakeIndex(string const & f, OutputParams const & rp, int LaTeX::runMakeIndexNomencl(FileName const & fname, string const & nlo, string const & nls) { - LYXERR(Debug::LATEX, "Running MakeIndex for nomencl."); - message(_("Running MakeIndex for nomencl.")); + LYXERR(Debug::OUTFILE, "Running Nomenclature Processor."); + message(_("Running Nomenclature Processor.")); string tmp = lyxrc.nomencl_command + ' '; // onlyFileName() is needed for cygwin tmp += quoteName(onlyFileName(changeExtension(fname.absFileName(), nlo))); @@ -647,7 +656,7 @@ AuxInfo const LaTeX::scanAuxFile(FileName const & fname) void LaTeX::scanAuxFile(FileName const & fname, AuxInfo & aux_info) { - LYXERR(Debug::LATEX, "Scanning aux file: " << fname); + LYXERR(Debug::OUTFILE, "Scanning aux file: " << fname); ifstream ifs(fname.toFilesystemEncoding().c_str()); string token; @@ -667,7 +676,7 @@ void LaTeX::scanAuxFile(FileName const & fname, AuxInfo & aux_info) while (!data.empty()) { string citation; data = split(data, citation, ','); - LYXERR(Debug::LATEX, "Citation: " << citation); + LYXERR(Debug::OUTFILE, "Citation: " << citation); aux_info.citations.insert(citation); } } else if (regex_match(token, sub, reg2)) { @@ -678,7 +687,7 @@ void LaTeX::scanAuxFile(FileName const & fname, AuxInfo & aux_info) string database; data = split(data, database, ','); database = changeExtension(database, "bib"); - LYXERR(Debug::LATEX, "BibTeX database: `" << database << '\''); + LYXERR(Debug::OUTFILE, "BibTeX database: `" << database << '\''); aux_info.databases.insert(database); } } else if (regex_match(token, sub, reg3)) { @@ -686,7 +695,7 @@ void LaTeX::scanAuxFile(FileName const & fname, AuxInfo & aux_info) // token is now the style file // pass it to the helper style = changeExtension(style, "bst"); - LYXERR(Debug::LATEX, "BibTeX style: `" << style << '\''); + LYXERR(Debug::OUTFILE, "BibTeX style: `" << style << '\''); aux_info.styles.insert(style); } else if (regex_match(token, sub, reg4)) { string const file2 = sub.str(1); @@ -775,7 +784,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) int retval = NO_ERRORS; string tmp = onlyFileName(changeExtension(file.absFileName(), ".log")); - LYXERR(Debug::LATEX, "Log file: " << tmp); + LYXERR(Debug::OUTFILE, "Log file: " << tmp); FileName const fn = makeAbsPath(tmp); // FIXME we should use an ifdocstream here and a docstring for token // below. The encoding of the log file depends on the _output_ (font) @@ -806,7 +815,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) token = subst(token, "\r", ""); smatch sub; - LYXERR(Debug::LATEX, "Log line: " << token); + LYXERR(Debug::OUTFILE, "Log line: " << token); if (token.empty()) continue; @@ -862,24 +871,24 @@ int LaTeX::scanLogFile(TeXErrors & terr) // Here shall we handle different // types of warnings retval |= LATEX_WARNING; - LYXERR(Debug::LATEX, "LaTeX Warning."); + LYXERR(Debug::OUTFILE, "LaTeX Warning."); if (contains(token, "Rerun to get cross-references")) { retval |= RERUN; - LYXERR(Debug::LATEX, "We should rerun."); + LYXERR(Debug::OUTFILE, "We should rerun."); // package clefval needs 2 latex runs before bibtex } else if (contains(token, "Value of") && contains(token, "on page") && contains(token, "undefined")) { retval |= ERROR_RERUN; - LYXERR(Debug::LATEX, "Force rerun."); + LYXERR(Debug::OUTFILE, "Force rerun."); // package etaremune } else if (contains(token, "Etaremune labels have changed")) { retval |= ERROR_RERUN; - LYXERR(Debug::LATEX, "Force rerun."); + LYXERR(Debug::OUTFILE, "Force rerun."); // package enotez } else if (contains(token, "Endnotes may have changed. Rerun")) { retval |= RERUN; - LYXERR(Debug::LATEX, "We should rerun."); + LYXERR(Debug::OUTFILE, "We should rerun."); //"Citation `cit' on page X undefined on input line X." } else if (!runparams.includeall && contains(token, "Citation") //&& contains(token, "on input line") //often split to newline @@ -961,20 +970,20 @@ int LaTeX::scanLogFile(TeXErrors & terr) contains(token, "Rerun to get")) { // at least longtable.sty and bibtopic.sty // might use this. - LYXERR(Debug::LATEX, "We should rerun."); + LYXERR(Debug::OUTFILE, "We should rerun."); retval |= RERUN; } } else if (prefixIs(token, "LETTRE WARNING:")) { if (contains(token, "veuillez recompiler")) { // lettre.cls - LYXERR(Debug::LATEX, "We should rerun."); + LYXERR(Debug::OUTFILE, "We should rerun."); retval |= RERUN; } } else if (token[0] == '(') { if (contains(token, "Rerun LaTeX") || contains(token, "Rerun to get")) { // Used by natbib - LYXERR(Debug::LATEX, "We should rerun."); + LYXERR(Debug::OUTFILE, "We should rerun."); retval |= RERUN; } } else if (prefixIs(token, "! ") @@ -997,7 +1006,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) if (prefixIs(token, "! File ended while scanning use of \\Hy@setref@link.")){ // bug 7344. We must rerun LaTeX if hyperref has been toggled. retval |= ERROR_RERUN; - LYXERR(Debug::LATEX, "Force rerun."); + LYXERR(Debug::OUTFILE, "Force rerun."); } else { // bug 6445. At this point its not clear we finish with error. wait_for_error = desc; @@ -1014,7 +1023,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) if (prefixIs(token, "! Paragraph ended before \\Hy@setref@link was complete.")){ // bug 7344. We must rerun LaTeX if hyperref has been toggled. retval |= ERROR_RERUN; - LYXERR(Debug::LATEX, "Force rerun."); + LYXERR(Debug::OUTFILE, "Force rerun."); } if (!wait_for_error.empty() && prefixIs(token, "! Emergency stop.")){ @@ -1094,8 +1103,8 @@ int LaTeX::scanLogFile(TeXErrors & terr) if (preamble_error) // Add a note that the error is to be found in preamble errstr += "\n" + to_utf8(_("(NOTE: The erroneous command is in the preamble)")); - LYXERR(Debug::LATEX, "line: " << line << '\n' - << "Desc: " << desc << '\n' << "Text: " << errstr); + LYXERR(Debug::OUTFILE, "line: " << line << '\n' + << "Desc: " << desc << '\n' << "Text: " << errstr); if (line == last_line) ++line_count; else { @@ -1175,7 +1184,7 @@ int LaTeX::scanLogFile(TeXErrors & terr) } } } - LYXERR(Debug::LATEX, "Log line: " << token); + LYXERR(Debug::OUTFILE, "Log line: " << token); return retval; } @@ -1553,7 +1562,7 @@ void LaTeX::deplog(DepTable & head) int LaTeX::scanBlgFile(DepTable & dep, TeXErrors & terr) { FileName const blg_file(changeExtension(file.absFileName(), "blg")); - LYXERR(Debug::LATEX, "Scanning blg file: " << blg_file); + LYXERR(Debug::OUTFILE, "Scanning blg file: " << blg_file); ifstream ifs(blg_file.toFilesystemEncoding().c_str()); string token; @@ -1576,7 +1585,7 @@ int LaTeX::scanBlgFile(DepTable & dep, TeXErrors & terr) if (regex_match(token, sub, reg1)) { string data = sub.str(3); if (!data.empty()) { - LYXERR(Debug::LATEX, "Found bib file: " << data); + LYXERR(Debug::OUTFILE, "Found bib file: " << data); handleFoundFile(data, dep); } } @@ -1621,7 +1630,7 @@ int LaTeX::scanBlgFile(DepTable & dep, TeXErrors & terr) int LaTeX::scanIlgFile(TeXErrors & terr) { FileName const ilg_file(changeExtension(file.absFileName(), "ilg")); - LYXERR(Debug::LATEX, "Scanning ilg file: " << ilg_file); + LYXERR(Debug::OUTFILE, "Scanning ilg file: " << ilg_file); ifstream ifs(ilg_file.toFilesystemEncoding().c_str()); string token;