style - ¿Hay alguna manera de agregar bibliografías de capítulos usando bookdown?
references in r markdown (2)
Para obtener una solución específica para el látex, consulte esta publicación , es decir, use la opción natbib
para natbib
y cargue el paquete chapterbib
. Deberá editar la plantilla de bookdown para configurar las opciones requeridas para natbib
y decirle a bookdown que use su plantilla personalizada en el yaml. Ver esta publicación para obtener más información sobre la plantilla bookdown.
Juro que vi instrucciones en los documentos de Bookdown para hacer esto con el formato gitbook, pero parece que no puedo encontrarlo ...
EDITAR Fui y miré un viejo proyecto de bookdown mío. Para la salida de gitbook
, especifique lo siguiente en _output.yml
:
bookdown::gitbook:
split_by: chapter
split_bib: yes
Lo que (lo adivinaste) dividirá la bibliografía por capítulos. De hecho, me sorprende un poco que Bookdown no admita las opciones equivalentes para bookdown::pdf_book
yaml options, pero debería ser bastante fácil de hacer al configurar sectionbib
/ chapterbib
en el preámbulo de LaTeX .
Estoy tratando de escribir mi tesis doctoral con bookdown y estoy utilizando principalmente la salida pdf. He agregado fácilmente una bibliografía al final del documento, pero preferiría tener una bibliografía al final de cada capítulo. He intentado ajustar la salida de .tex con los paquetes de LaTeX que permiten esto, pero esto lucha con los valores predeterminados de libros. ¿Hay alguna forma de adaptar las opciones .yaml para habilitar esto?
Para la salida HTML, el valor predeterminado es utilizar bibliografías por capítulo. Para la salida de PDF, he encontrado que es mejor usar el paquete biblatex
LaTeX junto con biber
. Como RStudio no sabe acerca de biber, es mejor instalar una herramienta como latexmk
y configurar RStudio para usar eso a través de Sys.setenv(RSTUDIO_PDFLATEX = "latexmk")
. Es posible que estos programas deban instalarse por separado, por ejemplo, en Debian / Ubuntu / ...
sudo apt-get install texlive-bibtex-extra biber latexmk
Para configurar biblatex
la solución provista en https://tex.stackexchange.com/questions/199336/biblatex-reference-both-by-chapter-and-at-the-end-of-the-book es apropiada.
Al final, las siguientes configuraciones son necesarias en _output.yml
:
bookdown::pdf_book:
citation_package: biblatex
En Index.Rmd
:
biblio-style: authoryear
biblatexoptions: [refsegment=chapter]
Al final de cada capítulo:
/printbibliography[segment=/therefsegment,heading=subbibliography]
No hay necesidad de escapar de este comando crudo de LaTeX, ya que pandoc
ignora dichos comandos para otros formatos de salida.
Uno puede ver la solución completa en
- https://github.com/rstub/bookdown-chapterbib
- https://rstub.github.io/bookdown-chapterbib/
- https://rstub.github.io/bookdown-chapterbib/bookdown-chapterbib.pdf
Solución original
Logré obtener bibliografías de capítulos con salida de PDF usando los siguientes pasos:
- Comience con una copia de https://github.com/rstudio/bookdown-demo
- Copie
<R-library-path>/rmarkdown/rmd/latex/default-1.17.0.2.tex
comobook.tex
al directorio de trabajo - actualice
book.tex
para usar losbibunits
paquete LaTeX (dif. abajo) - actualice
_output.yml
para referirse abook.tex
comotemplate
(dif. abajo) - establece las opciones YAML en
index.Rmd
(dif abajo) - agregue código a algunos archivos
Rmd
para escribir el comando/putbib
(más abajo)
Después de estos cambios, se podría producir un archivo PDF, pero todas las referencias faltan, ya que bookdown
no conoce los archivos generados por bu?.aux
. Después de ejecutar bibtex bu1
y bibtex bu2
, la reproducción del archivo PDF a través de bookdown
produjo un PDF con bibliografías de capítulos. Probablemente sea mejor automatizar este paso con Makefile.
Aquí la diferencia entre las plantillas:
$ diff -u /usr/local/lib/R/site-library/rmarkdown/rmd/latex/default-1.17.0.2.tex book.tex
--- /usr/local/lib/R/site-library/rmarkdown/rmd/latex/default-1.17.0.2.tex 2017-12-11 19:14:54.643867696 +0100
+++ book.tex 2018-01-16 11:43:46.182542634 +0100
@@ -93,8 +93,11 @@
/fi
$endif$
$if(natbib)$
-/usepackage{natbib}
+/usepackage[$natbiboptions$]{natbib}
/bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
+/usepackage{bibunits}
+/defaultbibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
+/defaultbibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
$endif$
$if(biblatex)$
/usepackage$if(biblio-style)$[style=$biblio-style$]$endif${biblatex}
@@ -235,6 +238,7 @@
$endfor$
/begin{document}
+/bibliographyunit[/chapter]
$if(title)$
/maketitle
$endif$
Y la diferencia de los archivos de bookdown-sample
:
$ git diff
diff --git a/01-intro.Rmd b/01-intro.Rmd
index 6b16e73..1a5f9de 100644
--- a/01-intro.Rmd
+++ b/01-intro.Rmd
@@ -19,3 +19,5 @@ knitr::kable(
```
You can write citations, too. For example, we are using the **bookdown** package [@R-bookdown] in this sample book, which was built on top of R Markdown and **knitr** [@xie2015].
+
+`r if (knitr:::is_latex_output()) ''//putbib''`
diff --git a/02-literature.Rmd b/02-literature.Rmd
index 00745d0..983696e 100644
--- a/02-literature.Rmd
+++ b/02-literature.Rmd
@@ -1,3 +1,6 @@
# Literature
Here is a review of existing methods.
+[@R-knitr]
+
+`r if (knitr:::is_latex_output()) ''//putbib''`
diff --git a/_output.yml b/_output.yml
index 342a1d6..cc8afb1 100644
--- a/_output.yml
+++ b/_output.yml
@@ -14,4 +14,5 @@ bookdown::pdf_book:
latex_engine: xelatex
citation_package: natbib
keep_tex: yes
+ template: book.tex
bookdown::epub_book: default
diff --git a/index.Rmd b/index.Rmd
index 4e21b9d..2fdb813 100644
--- a/index.Rmd
+++ b/index.Rmd
@@ -7,6 +7,8 @@ output: bookdown::gitbook
documentclass: book
bibliography: [book.bib, packages.bib]
biblio-style: apalike
+natbiboptions: sectionbib
+graphics: yes
link-citations: yes
github-repo: rstudio/bookdown-demo
description: "This is a minimal example of using the bookdown package to write a book. The output format for this example is bookdown::gitbook."