编织多个章节

编织多个章节

我正在编写一个大型的 Sweave 文档,该文档将被分成许多章节,最终输出是所有内容的大型 pdf 和每个章节的单独 pdf(与大型 pdf 中的页面和标题编号相同)。

我发现了一些很棒的答案关于处理多个文件,但还没有看到如何创建具有适当分页的单独章节 pdf。

有没有办法做到这一点?

答案1

我发现这对于论文的特定章节布局非常有帮助,但是还有许多其他关于 LaTeX 章节的资源:数学论文模板和指南

单个 .tex 文档整理所有单独的章节,这些章节可以单独从 .Rnw 生成为 .tex,样式文件和配置控制章节和分页。

我不认为这与 Sweave 或 R 有关,因为这仅与将单个块从 .Rnw 转换为 .tex 有关

答案2

如果你不介意先创建一个大的 PDF 文件,然后提取章节,pdf页面可能是您正在寻找的工具。

如果您想为每个章节创建单独的文件,我认为唯一的方法是为每个章节创建一个 TEX 文件。如何做到这一点取决于您目前拥有的 Sweave 块的结构。有关此内容的详细信息将提供更多想法。

问候,雷纳

答案3

我最终选择了针织品而不是 Sweave,因为它提供了更多选项,并且更好地控制了创建后放置 tex 文件的位置。

现在,从技术上来说,有一种方法可以让 knitr 通过 master 并编译包含的单个 Rnw 文件,但我无法让它工作。我知道人们使用 makefile,但我更擅长 R 而不是 makefile,所以我想出了这个解决方案。

我编写了一个 R 函数,用于检查 tek 文件是否不存在或是否比 Rnw 文件旧。如果是,则编译 tex。

doKnit <- function(file.name)
{
    # create full names of files
    rnw <- sprintf("%s.Rnw", file.name)
    tex <- sprintf("%s.tex", file.name)

    # if the rnw file doesn't exist, just exit and do nothing
    if(!file.exists(rnw))
    {
        return(NULL)
    }

    ## create the tex file if necessary
    # if the tex file doesn't exist, or it is older than the rnw file you have to create it
    if(!file.exists(tex) || file.info(tex)$mtime < file.info(rnw)$mtime)
    {
        knit(input=rnw, output=tex)
    }else
    {
        # just return NULL
        NULL
    }
}

然后我有另一个函数,它只是循环遍历文件名向量,对每个文件名调用上述函数。

knitAll <- function(files)
{
    ## loop through and knit each chapter file if the tex file is older
    for(a in files)
    {
        doKnit(file.name=a)
    }
}

(我知道我可以将其矢量化,但感觉有点过度了)。

然后在我的 master.Rnw 中,我使用文件列表(不包括扩展名)调用该函数来检查编译。

<<knitting,include=FALSE>>=
source("knitting.r")
# vector of chapters to be knitted
chapters <- c("Introduction",
              "Chapter01",
              "Chapter02"
)
knitAll(files=sprintf("%s/%s", chapters, chapters))
@

这个块必须include=FALSE确保它不会出现在文档中。

我知道这有点儿不靠谱,但效果确实很好。效果非常好,所以我打算把它加入到我的R 包零碎的东西。

无论如何,RStudio真的让生活变得如此美好。新预览版甚至还对 Rnw 文件进行了拼写检查。

knitr 还包括一种生成 PDF 的方法个人文件,但我还没有掌握。

相关内容