【问题标题】:Add linebreak in knitr sweave, keeping tidy=TRUE在 knitr sweave 中添加换行符,保持 tidy=TRUE
【发布时间】:2014-05-02 22:39:27
【问题描述】:

我知道如果我为相关代码块设置 tidy=FALSE,我可以手动格式化所有代码,但我喜欢 tidy=TRUE 选项。它使我的代码看起来不错!但是我有一个很长的向量要打印,它正在离线并导致 LaTeX badbox。

编辑——我知道人们喜欢例子。这是一个例子。

<<HolySnail>>=
X <- data.frame(p1=c(0,2,0,0,-1,1),
                p2=c(3,0,1,1,0,1),
                p3=c(0,0,3,2,1,1))
poor_formatting_requires_tidying <- function(x,y,z) { a <- x*y+z; return(a+z) }
@

编辑——问题是“如何强制 knitr 在不设置 tidy=FALSE 的情况下尊重 X 定义中的换行符?”

【问题讨论】:

  • 您可能想在您的问题中添加一个问题
  • 您可以将一个块的 tidy 设置为 false,它会保留 x 的格式。由于另一个功能是单行,因此无论如何它都无关紧要。而且我一直认为 tidy = TRUE 使代码看起来很糟糕,但这是个人意见。我的意思是,这就是为什么你无论如何都要在代码中插入换行符——以使其更具可读性和美观性,对吧?

标签: r knitr sweave


【解决方案1】:

我猜您只是在寻找控制源代码宽度的选项?使用tidy = TRUE 设置宽度非常棘手;您通常必须尝试不同的值才能获得合适的宽度。您可以使用tidy.opts 选项将width.cutoff 参数传递给formatR::tidy.source(),例如

\documentclass{article}
\begin{document}
<<HolySnail, tidy.opts=list(width.cutoff=60)>>=
X <- data.frame(p1=c(0,2,0,0,-1,1),
                p2=c(3,0,1,1,0,1),
                p3=c(0,0,3,2,1,1))
poor_formatting_requires_tidying <- function(x,y,z) { a <- x*y+z; return(a+z) }
@
\end{document}

注意width.cutoff 仅设置最小宽度,这意味着输出可能比您的设置更宽。这取决于R是否真的能破解width.cutoff字符后的代码。

在您更努力地调整宽度值之后,您可能会回到tidy = FALSE...

【讨论】:

  • 好的,我去 tidy=FALSE。感谢您的周到回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多