从.Rnw(Sweave)文件中的某一行(正向搜索)打开pdf查看器

时间:2012-09-08 16:37:25

标签: emacs sweave auctex

我正在使用Ubuntu 12.04,Emacs 24和(pdf)查看器Okular 0.14。我希望能够从.Rnw(Sweave)文件打开Okular(并跳转到特定行)。使用

(setq TeX-view-program-list
      '(("Okular" "okular --unique %o#src:%n`pwd`/./%b")))
<{1>}中的

,这已经适用于~/.emacs个文件,即使在包含.tex和章master.tex的多文件项目中也是如此。通过使用chapter.tex(或C-c C-v),可以跳转到相应的行(此功能也称为前向搜索)。

我希望在C-c C-c View个文件中进行前向搜索,.Rnw替换为chapter.tex(Sweave)。但是,通过上述设置,chapter.Rnw(在C-c C-c View内执行)会给我chapter.Rnw。显然,应该打开"Output file "chapter.pdf" does not exist."

我尝试在master.pdf中设置局部变量(这适用于chapter.Rnw上的纯.tex个文档,但在两种意义上似乎都忽略了C-c C-_个文件:首先,.Rnw不再插入任何内容,其次,在C-c C-_上,仍尝试打开错误的文件C-c C-c。在chapter.pdf,我看到实际调用C-c C-c View%o%n ...展开:

%b

如果我按okular --unique chapter.pdf#src:8`pwd`/./chapter.Rnw 手动替换chapter.pdf,那么我可以从master.pdf跳转到chapter.Rnw中的相应行。因此该命令基本上可以工作,但它找不到master.pdf文件中正确的主文件。

这是一个最小的例子:

chapter.Rnw:

.Rnw

master.tex:

% patchDVI setup (see vignette)
\SweaveOpts{concordance=TRUE}
<<echo=FALSE>>=
.TexRoot <- "master.tex" 
@

foo bar foo bar
\clearpage
<<hist, echo=TRUE, fig=true>>=
X <- rnorm(50, mean=20, sd = 3)
hist(X)
@
foo bar foo bar

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "master.tex"
%%% End:

wrapper.Rnw:

\documentclass{scrbook}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[american]{babel}
\usepackage{blindtext}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{fancyvrb}
\usepackage{Sweave}

\fvset{listparameters={\setlength{\topsep}{0pt}}}
\renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}}

\begin{document}

\input{chapter}

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

我使用% patchDVI setup (see vignette) <<echo=FALSE>>= .SweaveFiles <- c("chapter.Rnw") @ 编译它(因此使用Duncan Murdoch的R包patchDVI来获得与Rscript -e "patchDVI::SweavePDF('chapter.Rnw', encoding='utf8')"文件的同步。还可以编译整个项目,只需将.Rnw替换为{{1} }。

1 个答案:

答案 0 :(得分:1)

问题是TeX-normal-mode文件中.Rnw丢失,因此.tex文档的转发搜索不再有效。要保留TeX-normal-mode,请使用:

(add-hook 'noweb-select-doc-mode-hook
      '(lambda ()
         (unless (boundp 'in-noweb-select-doc-mode-hook)
           (let* ((in-noweb-select-doc-mode-hook t)
              (deactivate-mark))
         (TeX-normal-mode t)))))