如下例所示,环境中添加了一个水平空格Soutput
。这会导致输出不左对齐(参见 的输出)rnorm()
。我发现这个空格在“标准 R 输出”(交互模式下)中已经存在,问题是能否以某种方式避免它?
\documentclass{article}
\usepackage[american]{babel}
\usepackage{fancyvrb}
\usepackage{Sweave}
\begin{document}
\noindent Just some text before the chunk
<<foo>>=
set.seed(1)
rnorm(10)
3 != 4
@
Just some text after the chunk
\end{document}
答案1
这可能不是一个真正的 LaTeX 问题——正如您所提到的,R 输出中存在空格,并且它不是由环境引起的Soutput
。
在输出中添加空格的原因是您要打印 10 个数字,并且 R 必须保留一个空格以确保所有行的对齐良好,例如输出可能[10]
在最后一行有一个潜在索引,其中有两个字符,而前面的索引只有一个字符,例如[1]
,,[2]
...
请注意,随着向量中元素数量的增加,空格的数量也会增加:
> options(width = 30)
> 1 # no space
[1] 1
> 1:10
[1] 1 2 3 4 5 6 7 8
[9] 9 10
> 1:20
[1] 1 2 3 4 5 6 7 8
[9] 9 10 11 12 13 14 15 16
[17] 17 18 19 20
> 1:100 # two spaces now
[1] 1 2 3 4 5 6
[7] 7 8 9 10 11 12
[13] 13 14 15 16 17 18
[19] 19 20 21 22 23 24
....
有一个解决方案,如果你使用knitr
包裹而不是 Sweave。基本思路是使用输出钩子函数。
\documentclass{article}
<<setup, include=FALSE>>=
# modify the default hook to remove spaces before writing output
hook_output = knit_hooks$get('output')
knit_hooks$set(output = function(x, options) {
s = options$rm.spaces
if (!is.null(s)) x = gsub(sprintf('(^|\n)%s', s), '\\1', x)
hook_output(x, options)
})
@
\begin{document}
\noindent Just some text before the chunk
<<foo, comment=NA, rm.spaces=' '>>=
set.seed(1)
rnorm(10)
3 != 4
@
Just some text after the chunk
\end{document}
要编译该文档,请使用library(knitr); knit('yourfile.Rnw')
而不是Sweave('yourfile.Rnw')
。