r - knitr 如何将警告信息保留在盒子内?

标签 r knitr

我正在使用 knit 编写教程,我想展示学生可能遇到的一些警告和错误。虽然我能够使用 tidy=TRUE 选项很好地显示框中的代码块,但我不明白如何处理警告和错误的显示。例如,如果我有以下代码:

\documentclass{article}
\begin{document}
<<setupOp, include=FALSE>>=
opts_chunk$set(tidy=TRUE,
           tidy.opts=list(blank=FALSE, width.cutoff=20))
@

<<ErrorTest>>=
warning(paste("A suuuuuuuuuuuuuuuuuper", "loooooooooooong waaaaaaaaaaaaarning"))
@

\end{document}

警告代码行很好地显示在框中,但警告本身超出了框。我有一种感觉,这与警告消息是一个很长的字符串这一事实有关,但我不知道如何告诉knitr 将警告保留在框中。我查看了 knitr chunk options 上的文档还有这个formatR info ,但我找不到解决方案。

谢谢!

最佳答案

LaTeX 试图在此处生成左右对齐的文本 block 。这意味着自动换行和连字符以获得漂亮的直右边缘。您的警告中包含很长的单词,LaTeX 不会用连字符连接打字机文本,因此它会溢出为其分配的框,并将溢出警告打印到 TeX 日志文件中。

即使它可以对文本进行连字符,也可能很难找到一个好位置来对奇怪的单词进行连字符。例如,您绝对不应该将跨行的“buttoned”断开为“but-toned”。 TeX 为此有一个复杂的算法。

解决方案可能是为 R block 设置\raggedright:

{
  \raggedright
<<setupOp, include=FALSE>>=
opts_chunk$set(tidy=TRUE,
           tidy.opts=list(blank=FALSE, width.cutoff=20))
@

<<ErrorTest>>=
warning(paste("A suuuuuuuuuuuuuuuuuper", "loooooooooooong waaaaaaaaaaaaarning"))
@
}

像这样,每当单词超出框外时,TeX 就应该开始一个新行。用大括号对括起来,这样普通文本就不会受到影响。我不知道这可能会对代码块产生什么影响,所以买者自负。

关于r - knitr 如何将警告信息保留在盒子内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241686/

相关文章:

r - knitr/rmarkdown/Latex : How to custom justify xtable columns using dcolumn, 同时抑制其他 dcolumn 格式

r - R 中的 Lsmeans 包 - lme 模型的自由度

html - 将 rmarkdown 编织到 html 时标签不呈现

RStudio、knitr、pandoc、Word : how do I get a 'new page' in my docx?

r - 为 knitr beamer 幻灯片丢掉部分和小节标题的帧

r - 是否可以将任何 .md 文件设置为像 README 文件那样在 github 存储库中自动显示?

r - 逐行连接 data.table 中的列之间的值

r - R中具有2个分类变量和1个连续变量的折线图

r - 一组点与 R 中 sf 的多边形之间的距离

r - 在数据框列上使用 Poly