knitr
和之间的一个区别Sweave
是,前者在生成的 TeX 源中强制插入两个空行,用于不进行任何输出的块。我不确定这是否问题是一个错误或功能,但现在我正在寻找解决方法。
问题可以总结如下:.Rnw
代码如下
a
<<q,echo=FALSE,results='hide'>>=
getwd()
@
b
生成类似 LaTeX 代码
a
b
a
和之间的空格b
并不总是需要的。到目前为止,我发现最好的解决方法是写
a\q{
<<q,echo=FALSE,results='hide'>>=
getwd()
@
}b
并定义\q
为一个参数命令,该命令会扩展为一个空格。有没有更短的方法来实现类似的结果,也许不使用括号,也不会影响以 开头的行b
?
添加:有没有办法§
将此命令的语义分配给特殊字符,例如,以便以下命令可以正常工作:
a §
<<q,echo=FALSE,results='hide'>>=
getwd()
@
b
(当然,如果knitr
能找到实现这一目标的方法,我们也非常欢迎。)
这个答案似乎相关,但我无法让\eatpar
命令工作。它也会吃掉两个空行吗?
答案1
以下定义(取自这个博客)似乎有效:
\makeatletter
\newcommand\gobblepars{%
\@ifnextchar\par%
{\expandafter\gobblepars\@gobble}%
{}}
\makeatother
然后我可以写:
a \gobblepars
<<q,echo=FALSE,results='hide'>>=
getwd()
@
b
以达到预期的效果。