Включая ссылки и ссылки при использовании приложения в RMarkdown - PullRequest
5 голосов
/ 27 июня 2019

Я работаю над RMarkdown, чтобы создать отчет с приложением после ссылок. Я написал приложение в другом файле RMarkdown и адаптировал основной файл для его компиляции. Это код моего основного файла Rmd, который генерирует отчет:

---
bibliography: bb.bib
fontsize: 11pt
nocite: '@*'
output: 
  pdf_document:
    includes:
      after_body: Demo2.Rmd
      keep_tex: yes
link-citations: true
---
\newpage

\section{Testing}\label{sec1}
```{r}
summary(cars)
```
\section{Demo}
This was done using @shiina and we will use some info from Section \ref{sec1} to do.
```{r}
summary(iris[,1:2])
```
\section{References} 

Файл bb.bib содержит следующие ссылки:

@article {shiina,
author = {Shiina, Takayuki and Birge, John R.},
title = {Stochastic unit commitment problem},
journal = {International Transactions in Operational Research},
volume = {11},
number = {1},
publisher = {Blackwell Publishing},
pages = {19--32},
year = {2004},
}

@book{groewe2001,
  title={Stochastic unit commitment in hydro-thermal power production planning},
  author={Gr{\"o}we-Kuska, N. and R{\"o}misch, W.},
  year={2001},
  series = { Preprints aus dem Institut f{\"u}r Mathematik },
  publisher = { Humboldt-Universit{\"a}t zu Berlin, Institut f{\"u}r Mathematik },
}

Наконец, мой Rmd-файл приложения, Demo2.Rmd, содержит следующую структуру:

\appendix
\section*{Appendix}
\section{Additional info}
In this section we also follow @shiina to explain concepts.

Компиляция работает отлично и генерирует документ, но проблемы появляются в разделе приложения. Я использовал ссылку с @shiina для цитирования чего-либо, но я получаю этот вывод в окончательном отчете: enter image description here

Круг в черном показывает, что цитата из библиографии не работает. Вместо @shiina должно появиться Shiina and Birge (2004). Я пытался заменить файл Rmd файлом TeX, но он не работал.

Есть ли способ исправить это? Я не знаю, нужно ли after_body отрегулировать или что делать.

1 Ответ

1 голос
/ 27 июня 2019

Итак, я действительно нашел решение, которое использует небольшой обман.

---
bibliography: bb.bib
fontsize: 11pt
nocite: '@*'
output:
  pdf_document:
      keep_tex: true
      includes:
        after_body: Demo2.tex
link-citations: true
---

```{r,include=FALSE}
library(tidyverse)
rmarkdown::render('Demo2.Rmd')
a <- readChar('Demo2.tex', file.size('Demo2.tex'))
a <- a %>% str_remove('[[:space:]]*\\\\hypertarget[[\\w\\W]]+\\z') %>%
  str_remove('\\A[[\\w\\W]]+begin.document.')
writeChar(a, 'Demo2.tex',eos = NULL)
```


\newpage

\section{Testing}\label{sec1}
```{r}
summary(cars)
```

\section{Demo}
This was done using @shiina and we will use some info from Section \ref{sec1} to do.
```{r}
summary(iris[,1:2])
```
\section{References} 

И ваш файл приложения:

---
bibliography: bb.bib
fontsize: 11pt
output:
  pdf_document:
      keep_tex: yes
link-citations: true
---


\appendix
\section*{Appendix}
\section{Additional info}
In this section we also follow @shiina to explain concepts.

# References

Результат:

enter image description here


Способ, которым он работает, заключается в рендеринге Demo2.Rmd - файла перед рендерингом фактического файла и сохранении связанного .tex - файла. Затем не включенные фрагменты R-фрагмента всех частей, которые мы не хотим иметь в конце основного файла, перезаписывают файл Demo2.tex. Остается точный tex -код, необходимый для работы ваших ссылок.

чувствует себя довольно грязно, но должно работать.

...