-
Notifications
You must be signed in to change notification settings - Fork 764
Report the LaTeX error from stderr when build_manual() fails #2637
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
This parses the stderr text for the "LaTeX Error:" line and reports it if it's found.
R/build-manual.R
Outdated
| "--force", | ||
| paste0("--output=", path, "/", name), | ||
| pkg$path | ||
| ), fail_on_status = TRUE, stderr = "2>&1", spinner = FALSE), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess the forwarding from stderr to stdout is not working here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems so, e$stdout is NULL.
Here's what I get when printing e$stderr:
e$stderr
[1] "Hmm ... looks like a package\nConverting Rd files to LaTeX ....\nCreating pdf output from LaTeX ...\nError in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, : \n Running 'texi2dvi' on 'Rd2.tex' failed.\nLaTeX errors:\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nOutput:\nThis is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)\n restricted \\write18 enabled.\nentering extended mode\nLaTeX2e <2024-11-01> patch level 2\nL3 programming layer <2025-01-18>\n(./Rd2.tex\n(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls\nDocument Class: book 2024/06/29 v1.4n Standard LaTeX document class\n(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))\n(/usr/share/R/share/texmf/tex/latex/Rd.sty\n(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)\n(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty\nFor additional information on amsmath, use the `?' option.\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)\n\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\nEnter file name: \n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nTranscript written on Rd2.log.\nError in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, : \n Running 'texi2dvi' on 'Rd2.tex' failed.\nLaTeX errors:\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nOutput:\nThis is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)\n restricted \\write18 enabled.\nentering extended mode\nLaTeX2e <2024-11-01> patch level 2\nL3 programming layer <2025-01-18>\n(./Rd2.tex\n(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls\nDocument Class: book 2024/06/29 v1.4n Standard LaTeX document class\n(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))\n(/usr/share/R/share/texmf/tex/latex/Rd.sty\n(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)\n(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty\nFor additional information on amsmath, use the `?' option.\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)\n\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\nEnter file name: \n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nTranscript written on Rd2.log.\nError in running tools::texi2pdf()\n"
And this if I remove stderr = "2>&1":
[1] "Converting Rd files to LaTeX ....\nError in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, : \n Running 'texi2dvi' on 'Rd2.tex' failed.\nLaTeX errors:\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nOutput:\nThis is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)\n restricted \\write18 enabled.\nentering extended mode\nLaTeX2e <2024-11-01> patch level 2\nL3 programming layer <2025-01-18>\n(./Rd2.tex\n(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls\nDocument Class: book 2024/06/29 v1.4n Standard LaTeX document class\n(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))\n(/usr/share/R/share/texmf/tex/latex/Rd.sty\n(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)\n(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty\nFor additional information on amsmath, use the `?' option.\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)\n\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\nEnter file name: \n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nTranscript written on Rd2.log.\nError in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, : \n Running 'texi2dvi' on 'Rd2.tex' failed.\nLaTeX errors:\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nOutput:\nThis is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)\n restricted \\write18 enabled.\nentering extended mode\nLaTeX2e <2024-11-01> patch level 2\nL3 programming layer <2025-01-18>\n(./Rd2.tex\n(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls\nDocument Class: book 2024/06/29 v1.4n Standard LaTeX document class\n(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))\n(/usr/share/R/share/texmf/tex/latex/Rd.sty\n(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)\n(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty\nFor additional information on amsmath, use the `?' option.\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)\n(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)\n\n! LaTeX Error: File `inconsolata.sty' not found.\n\nType X to quit or <RETURN> to proceed,\nor enter new name. (Default extension: sty)\n\nEnter file name: \n! Emergency stop.\n<read *> \n \nl.326 ^^M\n \n! ==> Fatal error occurred, no output PDF file produced!\nTranscript written on Rd2.log.\nError in running tools::texi2pdf()\n"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Feels like we should probably just report the whole string? Looks like that was the intent of the cat(). If you want to put it in the string, you'll need something like this to suppress cli's default wrapping:
# Supress cli wrapping
no_wrap <- function(x) {
x <- gsub(" ", "\u00a0", x, fixed = TRUE)
x <- gsub("\n", "\f", x, fixed = TRUE)
x
}(just stick that in utils.R)
|
With that the output looks like the one in the collapsed paragraph there's a fair amount of repetition and probably unnecessary details, but at least we are not hiding information that could be potentially useful in other cases. Generated error message |
This parses the stderr text for the "LaTeX Error:" line and reports it if it's found, producing this output:
If no match is found, the output remains the same as the current one:
Fixes #2586.