10

RStudio の使用 --> CompilePDF

pdflatex で処理される .Rnw ドキュメントで、ドキュメント内の library() または require() を介してロードされたすべてのユーザー (自分) パッケージのリストを取得したいと考えています。次のように、sessionInfo()を使用しようとしました

   \AtEndDocument{
   \medskip
   \textbf{Packages used}: \Sexpr{names(sessionInfo()$loadedOnly)}.
   }

ただし、これが出力するのは、knitr 自体が使用するパッケージのリストにすぎません。

使用したパッケージ: digest、evaluate、formatR、highr、stringr、tools。

私が明示的に言及したものではありません。これは、knitr が内部環境内でコード チャンクを実行するためだと思いますが、それにアクセスする方法がわかりません。

cache=TRUE; で作成されたファイル cache/__packages について知っています。キャッシュせずにこれを自動的に生成する方法はありますか?

4

4 に答える 4

1

したがって、必要なのは、基本パッケージと Knitr を除く、ロードされるすべてのパッケージです。次に、すべてのパッケージをリストしてそれらを除外すると、必要なものが得られます。

p <- setdiff(.packages(), 
        c("knitr", "stats", "graphics", "grDevices", "utils", "datasets", 
          "methods", "base"))
p

Knitr で何かを作成するための Knitr ドキュメントを作成している場合や、基本パッケージを明示的にロードしたい場合は、いくつかの例外を作成する必要があります。

于 2013-09-30T02:19:35.253 に答える
1

このアプローチの問題は、プリアンブルの \AtEndDocument{} ブロック内の \Sexpr{} がニットタイム (.Rnw ファイルの先頭) で評価されるため、空のリストが返されることです。生成された .tex ファイルでは、これは次のように表示されます

\AtEndDocument{
\medskip
\textbf{Packages used}: .
}

これが機能する唯一の方法は、このテキストを明示的に生成するコードを .Rnw ファイルの末尾に含めることです (私の場合、これは子ドキュメントです。たとえば、

...
\bibliography{graphics,statistics}

Inside child document:
\textbf{Packages used}: \Sexpr{setdiff(.packages(), 
        c("knitr", "stats", "graphics", "grDevices", "utils", "datasets", 
          "methods", "base"))}.
于 2013-09-30T13:58:40.533 に答える