吞噬所有后续空行的命令

吞噬所有后续空行的命令

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

以达到预期的效果。

相关内容