Skip to content

Conversation

@mcol
Copy link

@mcol mcol commented Jan 11, 2026

This parses the stderr text for the "LaTeX Error:" line and reports it if it's found, producing this output:

Error in `value[[3L]]()`:
✖ LaTeX Error: File `inconsolata.sty' not found.
! Failed to build manual
Run `rlang::last_trace()` to see where the error occurred.

If no match is found, the output remains the same as the current one:

Error in `value[[3L]]()`:
! Failed to build manual
Run `rlang::last_trace()` to see where the error occurred.

Fixes #2586.

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),
Copy link
Member

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?

Copy link
Author

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"

Copy link
Member

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)

@mcol
Copy link
Author

mcol commented Jan 12, 2026

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
Error in `value[[3L]]()`:
✖ Converting Rd files to LaTeX ....
Error in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, :
Running 'texi2dvi' on 'Rd2.tex' failed.
LaTeX errors:
! LaTeX Error: File `inconsolata.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

! Emergency stop.
<read *>

l.326 ^^M

!  ==> Fatal error occurred, no output PDF file produced!
Output:
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
LaTeX2e <2024-11-01> patch level 2
L3 programming layer <2025-01-18>
(./Rd2.tex
(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls
Document Class: book 2024/06/29 v1.4n Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))
(/usr/share/R/share/texmf/tex/latex/Rd.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)
(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)

! LaTeX Error: File `inconsolata.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name:
! Emergency stop.
<read *>

l.326 ^^M

!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on Rd2.log.
Error in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, :
Running 'texi2dvi' on 'Rd2.tex' failed.
LaTeX errors:
! LaTeX Error: File `inconsolata.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

! Emergency stop.
<read *>

l.326 ^^M

!  ==> Fatal error occurred, no output PDF file produced!
Output:
This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2025/dev/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
LaTeX2e <2024-11-01> patch level 2
L3 programming layer <2025-01-18>
(./Rd2.tex
(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls
Document Class: book 2024/06/29 v1.4n Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo))
(/usr/share/R/share/texmf/tex/latex/Rd.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/bm.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty)
(/usr/share/texlive/texmf-dist/tex/latex/jknapltx/mathrsfs.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty)
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)

! LaTeX Error: File `inconsolata.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name:
! Emergency stop.
<read *>

l.326 ^^M

!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on Rd2.log.
Error in running tools::texi2pdf()

! Failed to build manual
Run `rlang::last_trace()` to see where the error occurred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Error in value[[3L]](): Failed to build manual

2 participants