X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLaTeX.cpp;h=cfa6e1d3f96d7daf691f4da19425c140b47550cc;hb=589f49ff366f88e3f3be9424397d9d99ebf44dfe;hp=55e31ec1c1a849e2392db45343bdbf3ebf62f7af;hpb=306b136cc005a1aeb9a6861ee0ac6fe2a2dd53e3;p=lyx.git diff --git a/src/LaTeX.cpp b/src/LaTeX.cpp index 55e31ec1c1..cfa6e1d3f9 100644 --- a/src/LaTeX.cpp +++ b/src/LaTeX.cpp @@ -97,7 +97,13 @@ LaTeX::LaTeX(string const & latex, OutputParams const & rp, : cmd(latex), file(f), path(p), lpath(lp), runparams(rp), biber(false) { num_errors = 0; - if (prefixIs(cmd, "pdf")) { // Do we use pdflatex ? + // lualatex can still produce a DVI with --output-format=dvi. However, + // we do not use that internally (we use the "dvilualatex" command) so + // it would only happen from a custom converter. Thus, it is better to + // guess that lualatex produces a PDF than to guess a DVI. + // FIXME we should base the extension on the output format, which we should + // get in a robust way, e.g. from the converter. + if (prefixIs(cmd, "pdf") || prefixIs(cmd, "lualatex") || prefixIs(cmd, "xelatex")) { depfile = FileName(file.absFileName() + ".dep-pdf"); output_file = FileName(changeExtension(file.absFileName(), ".pdf")); @@ -148,6 +154,10 @@ void LaTeX::removeAuxiliaryFiles() const FileName const aux(changeExtension(file.absFileName(), ".aux")); aux.removeFile(); + // Also remove the .out file (e.g. hyperref bookmarks) (#9963) + FileName const out(changeExtension(file.absFileName(), ".out")); + out.removeFile(); + // Remove the output file, which is often generated even if error output_file.removeFile(); } @@ -232,12 +242,13 @@ int LaTeX::run(TeXErrors & terr) LYXERR(Debug::LATEX, "Run #" << count); message(runMessage(count)); - int const exit_code = startscript(); + int exit_code = startscript(); scanres = scanLogFile(terr); if (scanres & ERROR_RERUN) { LYXERR(Debug::LATEX, "Rerunning LaTeX"); - startscript(); + terr.clearErrors(); + exit_code = startscript(); scanres = scanLogFile(terr); } @@ -407,8 +418,12 @@ int LaTeX::run(TeXErrors & terr) // Write the dependencies to file. head.write(depfile); - if (exit_code) + if (exit_code) { + // add flag here, just before return, instead of when exit_code + // is defined because scanres is sometimes overwritten above + // (e.g. rerun) scanres |= NONZERO_ERROR; + } LYXERR(Debug::LATEX, "Done."); @@ -869,20 +884,29 @@ int LaTeX::scanLogFile(TeXErrors & terr) } else if (contains(token, "Rerun to get citations")) { // Natbib seems to use this. retval |= UNDEF_CIT; - } else if (contains(token, "No pages of output")) { - // A dvi file was not created + } else if (contains(token, "No pages of output") + || contains(token, "no pages of output")) { + // No output file (e.g. the DVI or PDF) was created retval |= NO_OUTPUT; } else if (contains(token, "That makes 100 errors")) { // More than 100 errors were reprted retval |= TOO_MANY_ERRORS; - } else if (prefixIs(token, "!pdfTeX error:")){ + } else if (prefixIs(token, "!pdfTeX error:")) { // otherwise we dont catch e.g.: // !pdfTeX error: pdflatex (file feyn10): Font feyn10 at 600 not found retval |= ERRORS; - terr.insertError(0, - from_local8bit("pdfTeX Error"), - from_local8bit(token), - child_name); + terr.insertError(0, + from_local8bit("pdfTeX Error"), + from_local8bit(token), + child_name); + } else if (prefixIs(token, "Missing character: There is no ")) { + // XeTeX/LuaTeX error about missing glyph in selected font + // (bug 9610) + retval |= LATEX_ERROR; + terr.insertError(0, + from_local8bit("Missing glyphs!"), + from_local8bit(token), + child_name); } } } @@ -938,8 +962,7 @@ bool handleFoundFile(string const & ff, DepTable & head) return true; // strip off part after last space and try again string tmp = strippedfile; - string const stripoff = - rsplit(tmp, strippedfile, ' '); + rsplit(tmp, strippedfile, ' '); absname.set(strippedfile); if (insertIfExists(absname, head)) return true; @@ -964,8 +987,7 @@ bool handleFoundFile(string const & ff, DepTable & head) break; // strip off part after last space and try again string strippedfile; - string const stripoff = - rsplit(foundfile, strippedfile, ' '); + rsplit(foundfile, strippedfile, ' '); foundfile = strippedfile; onlyfile = onlyFileName(strippedfile); absname = makeAbsPath(onlyfile);