Bookdown将URL添加为脚注

时间:2018-04-23 22:14:56

标签: latex r-markdown pandoc bookdown

我在获取包含网址的图例的正确pdf输出时遇到问题。它的作用为bookdown::gitbook,但不作为bookdown::pdf_book

以下是一个例子:

---
output: bookdown::pdf_book
---

## Reference with URL doesn't work
In this experiment, we will use a [spectrophotometer]     (https://en.wikipedia.org/wiki/Spectrophotometry) to measure the absorption of light of different wavelength by colored solutions.

(ref:spectrum) [Spectrum of light. V, violet; B, blue; G, green Y, yellow; O,   orange; R, red](https://commons.wikimedia.org/wiki/File:Linear_visible_spectrum.svg)

```{r spectrum, fig.cap='(ref:spectrum)', echo=FALSE, message=FALSE,     warning=FALSE}
knitr::include_graphics("./figures/photosynthesis/spectrum.png")
```

## Reference without URL does work
In this experiment, we will use a [spectrophotometer] (https://en.wikipedia.org/wiki/Spectrophotometry) to measure the absorption of light of different wavelength by colored solutions.

(ref:spectrumNOurl) Spectrum of light. V, violet; B, blue; G, green Y, yellow; O, orange; R, red.

```{r spectrumNOurl, fig.cap='(ref:spectrumNOurl)', echo=FALSE, message=FALSE,  warning=FALSE}
knitr::include_graphics("./figures/photosynthesis/spectrum.png")
```

我想要的是图例,如图所示,没有网址,但在脚注的网址上加了一个上标。

其他信息

我在MacBook Pro 13上的OS X(10.13.5 Beta)上的docker容器(摇杆/ rstudio)上使用了bookdown(0.7.8),rstudio(1.1.423)和Pandoc 2.1.3。

我已尽力而为但无法解决这个问题。我将所有Pandoc降级为带有降价功能的1.x版本,但却遇到了同样的问题。我是否使用pdflatex或xelatex作为引擎并不重要。

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

<强> 1。添加超链接作为脚注

默认情况下,输出LaTeX文档不会显示超链接。我们可以使用LaTeX命令重新定义href的工作方式。您可以将以下行添加到preamble.tex或直接将其嵌入标题:

\let\oldhref\href 
  - \renewcommand{\href}[2]{#2\footnote{\url{#1}}}

在YAML标题中使用它:

---
output: bookdown::pdf_book
header-includes:
  - \let\oldhref\href 
  - \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
---

如果您希望将其另存为单独的文件(我建议大型项目使用),您可以使用:

header-includes: preamble.tex

<强> 2。文字参考不在标题中

导致此问题的原因是文字参考似乎无法包含任何特殊字符,包括_-。我已将此问题作为另一个问题提出,因为这似乎是您问题的一个特定子问题:Bookdown text references not working if URL contains special characters

最简单的解决方法似乎是使用this等服务缩短网址。它是免费的,链接不会过期。

这是部分有效的解决方案。 Stackoverflow不允许包含来自Google的网址,因此您必须将缩短的网址替换为您的链接。

---
output: bookdown::pdf_book
header-includes:
  - \let\oldhref\href 
  - \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
---

The references work fine when not used within a text reference [Spectrum of light. V, violet; B, blue; G, green Y, yellow](https://commons.wikimedia.org/wiki/File:Linear_visible_spectrum.svg)

(ref:spectrum) [Spectrum of light. V, violet; B, blue; G, green Y, yellow](Shortened URL)

```{r spectrum, fig.cap='(ref:spectrum)', echo=FALSE, message=FALSE, warning=FALSE}
plot(cars)
```

enter image description here

我说这部分有效:正如你所看到的,我们现在有了URL的脚注,但标题中的脚注实际上并没有显示在页脚中!

我认为你最好的选择是使用参考书目并使用[@ref]中的引用来引用这个数字。点击此处:https://bookdown.org/yihui/bookdown/citations.html