使用R/exams中的exams2pdf()函数生成PDF文档

3

我刚开始接触R/exams包,并尝试使用开发者提供的一个模板生成PDF文档。(http://www.R-exams.org/templates/confint3/

我能够使用命令将Rnw文件编译成HTML文档。

library("exams")
exams2html("confint3.Rnw")

当调用函数exams2pdf("confint3.Rnw")时,会出现错误信息。

! LaTeX Error: File `Sweave.sty' not found.

我已经安装了Latex,并且一般情况下使用它没有问题。我不明白:

  1. 我需要告诉`exams2pdf()` Latex的安装位置吗?
  2. 我需要先定义一个模板(如纯文本 plain.tex)吗?该模板应该是什么样子的?
  3. 我理解错了什么吗?

我查看了exams包的文档,也在安装并调用`library("tinytex")`之后尝试了`exams2pdf()`。

非常感谢任何可以帮助我寻找答案或提供指导的人。谢谢!

最简示例:

install.packages("exams")
install.packages("tth")
library("exams")

set.seed(1090)
exams2html("confint3.Rnw")
set.seed(1090)
exams2pdf("confint3.Rnw")

我使用Ubuntu操作系统,无法重现该问题。我可以获得一个漂亮的PDF文档。Linux系统更容易进行Latex操作,而Mac或Windows系统则需要进行额外配置。尝试创建运行示例非常值得赞赏,但是exams软件包安装过程失败了,并且没有安装tth软件包。显然,软件包作者在依赖关系中忽略了这一要求。 - IRTFM
1
@AchimZeileis: 由于软件包维护者有时会成为SO的贡献者,如果“SO-pin”没有吸引他的注意力,那么您可以在软件包描述的维护者信息中找到:Achim.Zeileis at R-project.org - IRTFM
感谢 @IRTFM 对我的问题和最小示例进行纠正。我应该更加准确地说明软件包依赖关系,对吧。据我所知,这不是错误消息的来源,我已经安装了 tth 软件包。 - n. small
再次感谢@IRTFM,我想过联系Achim Zeileis,但我想先在这里发布我的问题。 - n. small
事实证明,“tth”包仅在第一个函数调用“exams2html”时需要,Achim知道这一点,因此只将“tth”放在了Suggests而不是Imports中,所以这实际上是我的错误而不是他的。 - IRTFM
1个回答

3
提供的信息很难确切地诊断出问题。无论如何,在通过utils::texi2dvi()(当未安装R包tinytex时的默认设置)或通过tinytex::latexmk()(当安装R包tinytex时的默认设置)运行pdfLaTeX时,都找不到R基本系统提供的Sweave.sty文件。对我来说不清楚后台正在运行哪个LaTeX引擎:Windows上的MikTeX?
解决此问题的几种策略:
  • 告诉你的LaTeX安装有关R基本系统提供的texmf目录,以便无论在系统上的哪个位置调用pdfLaTeX都可以找到它。
  • 使用不同的LaTeX安装,例如通过tinytex::install_tinytex()在R中安装TinyTeX(LaTeX分发)。如果您实际上不是LaTeX用户,只需要编译PDF考试,这可能特别有吸引力。
  • 避免在自定义模板文件中使用Sweave.sty文件,比如myplain.tex。此类文件的建议在本帖子末尾包括在内。
此线程中讨论了更多详细信息:https://tex.stackexchange.com/questions/153193/latex-error-sweave-sty-not-found 至于您的三个问题:
  1. 如上所述:exams2pdf()利用utils::texi2dvi()tinytex::latexmk()。因此,它们需要了解LaTeX安装情况-但似乎情况是这样的。他们只是找不到基本的R提供的texmf
  2. 您不应该必须这样做,但这当然是一个选项,您可以使用。作为起点,请运行exams_skeleton(markup = "latex", writer = "exams2pdf")。除其他外,此操作将创建一个templates文件夹,您可以在其中放置下面的myplain.tex模板。
  3. 正如我上面所说的,根据提供的信息很难回答这个问题。希望这里提供的线索能让您前进数步。
myplain.tex内容如下:
\documentclass[a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage{a4wide,graphicx,color,verbatim,url,fancyvrb,ae,amsmath,amssymb,booktabs,longtable,eurosym}
\newenvironment{question}{\item \textbf{Problem}\newline}{}
\newenvironment{solution}{\textbf{Solution}\newline}{}
\newenvironment{answerlist}{\renewcommand{\labelenumi}{(\alph{enumi})}\begin{enumerate}}{\end{enumerate}}
\providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}

\setkeys{Gin}{keepaspectratio}

\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl}
\newenvironment{Schunk}{}{}

\begin{document}
\begin{enumerate}
%% \exinput{exercises}
\end{enumerate}
\end{document}

@IRTFM 感谢您对此的支持。关于“tth”安装中出现的问题:我需要更多细节才能发表意见。请随时通过电子邮件或在其他地方报告详细信息。 - Achim Zeileis
@n.small 在这种情况下,我建议 不要 安装 TinyTeX 发行版。作为短期解决方案,您可以使用自己的 LaTeX 模板(例如我发布的 myplain.tex)。此外,我建议解决无法找到 Sweave.sty 的问题。可能上面链接讨论中用户 chan1142 的建议适合您... - Achim Zeileis
关于找不到Sweave.sty的问题,这个消息以前从未出现过。我使用knitr编写所有的讲座笔记。尽管如此,我会按照您的建议进行操作,以更好地理解整个设置!我已经安装了TinyTeX... - n. small
默认情况下,knitr 不使用 Sweave.sty(即除非您告诉它使用)。我建议您在 R 安装提供的 share/texmf/ 目录中搜索 Sweave.sty。然后,您应该将该目录添加到您的 texhash 中。由于我从未使用过 OS X/MacTeX,因此无法提供更多详细信息。 - Achim Zeileis
1
好的!关于RStudio中的Weave选项设置。这些选项会影响RStudio中的编织/编织按钮,但不会影响其他软件包的行为。在R/exams中,默认情况下使用Sweave()来处理.Rnw文件,以保持依赖项简单,并且因为大多数考试通常不需要knitr的扩展功能。但是,在exams2pdf()中可以设置engine = "knitr"。然而,这仍将调用knitr::render_sweave()兼容性选项。 - Achim Zeileis
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接