脚注中的 knitr 代码块

脚注中的 knitr 代码块

我的问题是将 knitr Sweave 代码块的逐字输出包含在脚注中。BVerbatim 环境 (幻想VRB) 为我提供了我想要的格式。(注意:需要在序言后面的某个位置放置 \VerbatimFootnotes。)使用 chunk 选项,results='asis'代码以 \begin{Sinput} ... \end{Sinput} 分隔。有没有办法确保这些不会出现,或者忽略它们?文章末尾有一个例子。

如果我将输出直接包含在脚注中,无论是使用results='asis'还是results='markup',格式都会很乱,代码会显示为正常大小,即使我有size='footnotesize'一个块选项。我当然可以承认失败,并将代码直接包含在 BVerbatim 环境中,同时存在打印的代码不能保证是执行的代码的风险。

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\VerbatimFootnotes
<<setup, echo=FALSE>>=
render_listings()
@

<<install-pkg, echo=FALSE, eval=FALSE>>=
repos <- "http://cran.csiro.au"
install.packages('httr', repos=repos)}
@ 

To install the package {\em httr}, execute
the code in the footnote.\footnote{
\begin{BVerbatim}[baseline=t]
<<install-pkg, eval=FALSE, echo=TRUE, results="asis">>=
@ 
\end{BVerbatim}
}
\end{document}

答案1

下面的做法比较笨拙,但是却达到了我想要的效果

    \documentclass{article}
    \usepackage{fancyvrb}
    \begin{document}
    \VerbatimFootnotes
    \newcommand*\FancyVerbStopString{'zzz'}
    <<setup, echo=FALSE>>=
    render_listings()
    @

    <<install-pkg, echo=FALSE, eval=FALSE>>=
    repos <- "http://cran.csiro.au"
    install.packages('httr', repos=repos)}
    @ 

    To install the package {\em httr}, execute
    the code in the footnote.\footnote{
    \begin{BVerbatim}[baseline=t, firstline=2, lastline=3] 
    <<install-pkg-fn, eval=FALSE, echo=TRUE, highlight=FALSE, results="asis">>=
    <<install-pkg>>
    'zzz'
    @ 
    \end{BVerbatim}
    }
    \end{document}

的效果第一行=2是删除 \begin{Sinput}。可以指定最后一行=3删除 \end{Sinput}。但是,为了自动使用,这需要一种计算代码行数的机制。因此使用

        \newcommand*\FancyVerbStopString{'zzz'}

当然,任何字母数字字符串都可以代替“zzz”

相关内容