我正在使用 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/