【发布时间】:2025-12-26 02:30:16
【问题描述】:
我正在使用 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")))
在~/.emacs 中,这已经适用于.tex 文件,甚至在包含master.tex 和章节chapter.tex 的多文件项目中。通过使用C-c C-v(或C-c C-c View)可以跳转到相应的行(此功能也称为前向搜索)。
我也想在.Rnw 文件中进行前向搜索,其中chapter.tex 被chapter.Rnw 替换(Sweave)。然而,通过上述设置,C-c C-c View(从chapter.Rnw 内部执行)给了我"Output file "chapter.pdf" does not exist."。显然,master.pdf 应该已经打开了。
我尝试在chapter.Rnw 中设置局部变量(这适用于C-c C-_ 上的纯.tex 文档),但对于.Rnw 文件似乎在两种意义上都被忽略了:首先,C-c C-_ 没有t 再插入任何东西,其次,在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 中的对应行。所以该命令基本上可以工作,但它没有从.Rnw 文件中找到正确的主文件。
这是一个最小的例子:
章节.Rnw:
% 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:
master.tex:
\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:
包装器.Rnw:
% patchDVI setup (see vignette)
<<echo=FALSE>>=
.SweaveFiles <- c("chapter.Rnw")
@
我使用Rscript -e "patchDVI::SweavePDF('chapter.Rnw', encoding='utf8')" 编译它(所以使用Duncan Murdoch 的R 包patchDVI 来与.Rnw 文件同步。也可以编译整个项目,只需将chapter.Rnw 替换为wrapper.Rnw。
【问题讨论】:
-
.Rnw文件是什么?您是否在latex-mode(来自 AucTeX 的那个)中编辑这些文件?如果是,您是否为这些文件设置了TeX-master变量(即通过文件局部变量)? -
.Rnw 文件是 .Snw 文件的 R 等价物(我相信);见?RweaveLatex。我在上面添加了一些更多信息以及一个最小示例。希望这可以帮助。稍后我会添加更多内容。
-
您是否尝试过
TeX-master: "master",即省略扩展名?只是一个疯狂的猜测,因为我手头没有 Emacs 来真正深入研究这个问题。 -
我试过了,但它并没有改变问题的行为。
-
您确认
TeX-master的值正确吗?将光标移动到chapter.Rnw缓冲区,然后按C-h v TeX-master。这是否将"master"显示为当前缓冲区本地值?顺便说一句,我需要什么工具来构建.Rnw文件?我想尝试使用您的文件构建自己……