I'm using GNU/Linux distro (Arch, if that's relevant), Emacs v23.2.1, ESS v5.9 and AucTeX v11.86.
I want to setup AucTeX to recognize .Rnw files, so I can run LaTeX on .Rnw files with Cc Cc
and get .dvi file automatically. I reckon it's quite manageable by editing .emacs file, but I still haven't got a firm grasp on Elisp .
Yet another problem is quite annoying - somehow, LaTeX is not recognizing \\usepackage{Sweave}
in preambule, so I actually need to copy Sweave.sty
file (in my case located in /usr/share/R/texmf/Sweave.sty
) to directory where .Rnw file is located (and I'm becoming more frustrated by the fact that this is common bug on Windows platforms!)
My question boils down to two problems:
\\usepackage{Sweave}
(without copying Sweave.sty
to "home" folder each time) [ Edit: managed to do this; see comment after Dirk's answer] That's two different questions.
For the first one, my Debian R packages make sure that there is a soft link from the $RHOME/share/texmf/
directory into the TeX file system tree, eg as /usr/share/texmf/tex/latex/R
.
For the second question: dunno. I tend to run Sweave via a small shell script I crafted years ago even though I do all the editing in Emacs.
Edit, a few months later: Use ESS, rather than AucTeX. Then Mn s
(ie Alt-n followed by s) runs the Sweave step and Mn P
runs the LaTeX compilation, with a call to Bibtex if needed.
After brief and efficient Googling, I've found this link , and at first glance, everything seems OK, but pdf file gets garbled after Sweaving... So I tackled this problem another way around: when in doubt, go bash ! I've shamelessly stolen error checking function from Dirk's Sweave bash script available here . Basically, this is a workaround: R CMD Sweave
gets executed on .Rnw file, hence latex comes in, and pdflatex after that...
I'll post a bash script that does the job for me. I must state that I'm not an advanced bash programmer, moreover I'm not even a programmer by vocation, so there's a great chance that this script can be optimized/written properly. Here goes:
#!/bin/bash
FILEBASE=${1%.*}
FILEXT=${1##*.}
FILEPATH=${1%/*}
TEXFILE=$FILEBASE.tex
PDFFILE=$FILEBASE.pdf
# errorexit
function errorexit () {
echo "Error: $1"
exit 1
}
# check if file exists
if [ ! -f $1 ]; then
errorexit "File $1 not found!"
else
# check for filename length
if [ ${#1} -lt 1 ]; then
errorexit "Need to specify argument file!"
else
# if filelength OK, check extension
if [ $FILEXT != "Rnw" ]; then
errorexit "You must pass Sweave (.Rnw) file!"
# finally, run Sweave
else
cd $FILEPATH && R CMD Sweave $1
# latex $TEXFILE
pdflatex $TEXFILE
# xdg-open $PDFFILE
fi
fi
fi
Then save/copy/move this script in any of echo $PATH
folders (I keep mine in /usr/bin/
), and make sure that it's named sweave , or choose whatever name you like, then put these lines in your .emacs file:
(global-set-key (kbd "C-c s")
(lambda ()
(interactive)
(shell-command (concat "sweave " buffer-file-name))))
Of course, you can change keybinding to suite your needs, and be sure to change sweave with script name placed in /usr/bin/
.
Bare in mind that this is not an answer, but a workaround. If you have found a way to deal with AucTeX/ESS/Sweave integration, post it, and I'll give it a checkmark.
Prior to this workaround, I had to do Mn s
to Sweave, followed by Cc Cc
which is default keybind in AucTeX for LaTeX file compilation. Produced file is erroneous, so I had to give it a try with bash. It works for me, if you have any suggestions, please let me know.
Kind regards,
aL3xa
EDIT:
Inserted cd $FILEPATH
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.