Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'd like to create a PDF report with knitr with LaTeX-code in RStudio with biblatex for citations. However, the in-text-citations are always undefined and no bibliography is printed. The same bibliography works perfectly with a pure .tex-document stored in the same folder and containing the same citations, same path to the .bib-file etc. However, as for all references (also with hyperref) I have to compile twice. I thought this might be the problem with knitr (that the compilation is run only once), but the hyperref-references to figures work well. Any idea what might go wrong with the bibliography when using knitr and how I can solve the problem?

MWE:

\documentclass{article}

\usepackage[style=authoryear-comp, maxnames=1, bibencoding=utf8, backend=biber]{biblatex}
\bibliography{ZoteroOutput.bib}

\begin{document}

According to the literature \parencite{gonzalez2003} we can assume...

\printbibliography

\end{document}

From the log-file:

Package biblatex Warning: Please (re)run Biber on the file:
(biblatex)                mwe
(biblatex)                and rerun LaTeX afterwards.
share|improve this question

migrated from stackoverflow.com Sep 14 '12 at 17:41

This question came from our site for professional and enthusiast programmers.

    
Show us a reproducible example. Do you have use texi2dvi enabled? rstudio.org/docs/using/customizing –  Roman Luštrik Sep 13 '12 at 11:04
    
@RomanLuštrik I added an MWE. In the Rstudio options, I can only find Invoke compiler via texi2dvi script. I have now enabled it, but this doesn't solve the problem. –  AnjaM Sep 13 '12 at 11:44
    
The message seems to be very explicit. As a temp fix, you can run pdflatex on that .tex file again (outside Rstudio). –  Roman Luštrik Sep 13 '12 at 13:02
    
@RomanLuštrik So there is no way to get it with one click in knitr/RStudio? That's a bit disappointing. How does it create the within-text-figure references then? As far as I know, they also need a 2nd compilation. –  AnjaM Sep 13 '12 at 13:23
    
Try running the latex output file once in miktex or what ever after ward. For me after I run it once in miktex the citations show up using Rstudio. I think this is because the encessary files are created by miktex and then can be run later when using R studio. –  Tyler Rinker Sep 13 '12 at 14:33

4 Answers 4

RStudio allows you to use a custom LaTeX program with that

  • you can set up a script that does the proper processing
  • there are automatic solutions for this, e.g. latexmk

Another option is that RStudio allows to specify build tools for a project. This may be

  • either a Makefile
  • or again a custom script

In addition, you may want to tell the RStudio developers about the need to have a bibliography in Sweave documents. You can tell them that I'd need it, too :-)

share|improve this answer
    
Have you managed to get that to work? –  Dieter Menne Aug 21 '13 at 9:57
1  
Here's one way to make it work for a document that has biber + biblatex + XeLaTeX + embedded R in it: mkdoc <- function(fname){ require(knitr); res <- knit(fname); if (!is.null(res)) { system2('latexmk', args=c('-xelatex', res)) } } Then call mkdoc('myfile.Rnw') instead of pressing the compile button. After a few passes it generates myfile.pdf. Having this sort of thing built into RStudio would indeed be nicer. –  conjugateprior May 2 at 17:57

I think that the problem is in your backend, because Rstudio uses texi2dvi to write pdf and then it does not know about biber.

Try to change:

\usepackage[backend=biber]{biblatex}

with

\usepackage[backend=bibtex]{biblatex}

in the preamble.

Normally this work.

share|improve this answer
    
That seems to work for the built in biblatex styles but unfortunately the APA package now requires biber, so that can't be made to work this way. –  conjugateprior May 2 at 16:23

This kinda works when I press the compile button twice. It is just an ugly system call to biber.

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{Doe,author={John Doe},title={Title}}
\end{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}

Test \cite{Doe}

\printbibliography
\end{document}

<<>>=
system("biber mwe")
@
share|improve this answer

The standard procedure for getting citations to work properly is that you have to:

1) Run LaTeX

2) Run BibTex

3) Run LaTeX

4) Run LaTeX

One option is to use the command texify, others use a makefile. I am not entirely sure about what knitr runs, but probably it does not run the sequence enough. Personally, I use Emacs with ESS, combined with AuCTeX; it really works well for me.

P.S. I don't think you need to specify that it's a .bib file.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.