我正在使用knitr编写教程,我想展示一些学生可能会遇到的警告和错误。虽然我能够使用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 chunk options和formatR info上的文档,但我无法找到解决方案。
谢谢!
答案 0 :(得分:4)
LaTeX正在尝试在此处生成左右对齐的文本块。这意味着自动换行和连字以获得良好的直线右边缘。你的警告里面有很长的字样,LaTeX没有连字符打字机文字,所以它溢出了为它分配的盒子,并向TeX日志文件打印了一个过满的警告。
即使它可以对文本进行连字,也可能很难找到一个连接一个奇数单词的好地方。例如,你永远不应该打破&#34;按钮&#34;跨越线条#34;但是调和了#34; TeX有一个复杂的算法。
解决方案可能是为R块设置\ 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应该开始一个新行。括在一个花括号对中,使普通文本不受影响。我不知道这可能会对代码块中的其他内容产生什么影响,因此需要注意。