【问题标题】:Create PDF Hyperlinked Table of Contents inside R在 R 中创建 PDF 超链接目录
【发布时间】:2015-08-19 17:19:11
【问题描述】:

这是我在 StackOverflow 上的第一个问题,所以如果我做错了什么,请告诉我。

我正在使用 R 生成很多非常大的 PDF 文档。我的数据大约有 580,000 个观察值,分为 32 个类别,每个类别包含 20 到 300 个问题的 70 个答案。目前我使用两个 for 循环(我尽量避免 for 循环,但对于创建这些 pdf,这是唯一可行的方法)。第一个通过并为具有标题页的类别创建一个 pdf,然后第二个为每个图表添加一个页面,显示该问题的结果。我正在使用 ggplot2 和“pdf”函数。

脚本运行良好,创建了 32 个 pdf(每个类别一个),其中包含自定义标题页和该类别中所有问题的页面。我想在标题页之后添加一个目录。我知道如何添加带有标签和页码的页面,但我需要一个链接到每个问题的页面。

我已经搜索了这个网站和谷歌,但还没有找到在 R 中执行此操作的任何方法。这个问题:Adding a table of contents to PDF with R plots 谈论使用 RPython。我还遇到过提到“hyperref”、LaTex、Pandoc 和 Knitr 的消息来源。我知道如何在 Rmarkdown 文档中使用 Kintr,但这不适用于我正在尝试做的事情。我不确定如何与其他任何人一起工作,因此使用它们的解决方案超出了我的想象。

有没有一种方法可以在不使用其他语言的情况下创建目录或仅在 R 中创建指向 PDF 页面的超链接?

【问题讨论】:

  • 我之前也遇到过,但没试过。查看您的链接并检查 xtable 文档后,我想我了解如何在 PDF 文档中添加指向网页的链接。我仍然不确定如何引用同一 PDF 文档的其他页面?如果有办法做到这一点,那么 xtable 会很好用。

标签: r pdf


【解决方案1】:

您是否尝试过只单击目录中的部分名称?默认情况下,这些似乎是超链接的,尽管没有任何颜色暗示它。

为了帮助您了解可能发生的情况,请添加/更改您的 YAML 标头以添加以下内容:

output:
  pdf_document:
    keep_tex: true
    toc: true
    toc_depth: 3

这将保留中间的.tex 文件。如果您在编织后打开它,您应该已经看到其中对 hyperref 的引用。

然后我发现我的目录被定义为:

{
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{3}
\tableofcontents
}

生成超链接目录,但带有“黑色”超链接!

如果你想改变颜色并看到它们显示出来,你可以在 RSudio 中打开 tex 文件,只需将“黑色”更改为“蓝色”,然后让 RStudio 运行“编译 PDF”,你应该会看到它们显示出来.

如果您希望您的页码超链接而不是描述,请将以下内容添加到您的 YAML 中:

header-includes:
   - \hypersetup{linktocpage}

分享和享受!

【讨论】:

    【解决方案2】:

    我只记得我把这个打开了,我想我会回去发布我最终是如何解决它的,好吧。我没有使用 R 脚本,而是使用 R Markdownfile 创建了一个组合 pdf,其中包括所有部分及其后续问题的不同级别。我能够为每个部分单独创建一个 pdf,其中包含一个链接的可点击目录,包括其所有问题(页面)和标题页的不同标题级别。

    关键是 pandoc.header,它允许我创建在 TOC 中显示的标题。我认为 for 循环和为每个页面创建的 ggplot 都不相关。以下是 .rmd 的概述:

    title: 
    author: 
    output: 
        pdf_document:
            toc: true
    
    ```{r results = "asis", message=FALSE, warning=FALSE, echo=FALSE, fig.height = 11, fig.width = 8}
    
    for(i in 1:length(categories){
    
    pandoc.header(paste("Category ",category_num, ": ", category discription), level = 1)
    
    category title page
    
    for(i in 1:numberofquestions){
    
    pandoc.header(paste("Question ",question_num, ": ", subtitle1), level = 2)
    
    print(ggplot())
    
    }}
    
    ```
    

    唯一不方便的部分是每个页面都必须有一个要链接的标题,我真的不喜欢标题页有一个,但看起来我可以用 dsz posted 手动编辑它。

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 2017-11-21
      • 2017-01-22
      • 1970-01-01
      • 2016-11-28
      • 2013-06-18
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多