我想使用 markdown (knitr
) 和 pdf 输出为 R 包创建一个小插图。我的一些函数生成的消息在控制台中被很好地分成几行。然而,在生成的 pdf 中,这些行不适合代码块的框,而是溢出。
我尝试在宽度= 80的message
中使用strwrap
和writeLines
(参见示例)。它确实在正确的位置断行,但我必须在 writeLines
中使用 con = stdout()
才能查看 markdown pdf 中的输出。
con = stderr()
(默认值)不显示该消息。但是,这样,控制台输出的格式不再与普通消息(在我的例子中为红色)相同,而是像普通输出(黑色)一样。
mes <- "A very, very, very, very, very, very, very, very, very, very, very, very, very, very long message."
# default settings
message(mes)
# using writeLines and strwrap
message(writeLines(strwrap(mes, width = 80, con = stderr()))
message(writeLines(strwrap(mes, width = 80), con = stdout())
这是 R 控制台中的结果
在 Markdown pdf 中:
我的首选解决方案不是格式化消息,而是找到正确的 markdown/knitr 技巧。
最佳答案
我不会使用writeLines
,我会进行包装,然后将字符串传递给message
。例如,
mes <- "A very, very, very, very, very, very, very, very, very, very, very, very, very, very long message."
# default settings
message(mes)
# pasted together
message(paste(strwrap(mes, width = 80), collapse = "\n"))
每次都写起来很麻烦,所以如果你经常这样做,我会把它放在一个函数中:
wrapmessage <- function(mes, width = 80)
message(paste(strwrap(mes, width = width), collapse = "\n"))
然后像这样使用它:
wrapmessage(mes) # 80 chars
wrapmessage(mes, 40) # 40 chars
后者看起来像这样:
关于r - 如何在 markdown/knitr 中的消息中换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55972128/