设置:这是sessionInfo():
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
[3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
[5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] patchDVI_1.9 knitr_1.5
loaded via a namespace (and not attached):
[1] compiler_3.0.2 evaluate_0.5.1 formatR_0.9 highr_0.2.1 stringr_0.6.2
[6] tcltk_3.0.2 tools_3.0.2
我正在尝试使用emacs和AucTeX将我的.Rnw源文件与evince同步,以便从源代码返回到comiled文本。
我已经检查过.tex源和PDF之间的同步工作正常。
我的.Rnw文件以:
开头\documentclass[a4paper,twoside,12pt]{article}
\synctex=1 %% Should force concordance generation
\pdfcompresslevel=0 %% Should force avoidance of PDF compression, which patchDVI does
\pdfobjcompresslevel=0 %% not handle
<<include=FALSE>>= %% Modificaton of what Sweave2kinitr does
## opts_chunk$set(concordance=TRUE, self.contained=TRUE) ## No possible effect
opts_knit$set(concordance=TRUE, self.contained=TRUE) ## Seems reasonable
@
%% \SweaveOpts{concordance=TRUE} %% That's where inspiration came from
考虑以下日志(编辑不相关的部分):
> options("knitr.concordance")
$knitr.concordance
[1] TRUE
> opts_knit$get("concordance")
[1] TRUE
> knit("IntroStat.Rnw")
processing file: IntroStat.Rnw
|...................... | 33%
ordinary text without R code
|........................................... | 67%
label: unnamed-chunk-1 (with options)
List of 1
$ include: logi FALSE
|.................................................................| 100%
ordinary text without R code
output file: IntroStat.tex
[1] "IntroStat.tex"
> system("pdflatex -synctex=1 IntroStat.tex")
[编辑不相关]
SyncTeX written on IntroStat.synctex.gz.
注意:符号已 *已* 生成 !!! **
Transcript written on IntroStat.log.
让我们再次修复引用:
> system("pdflatex -synctex=1 IntroStat.tex")
[编辑不相关]
Output written on IntroStat.pdf (1 page, 136907 bytes).
SyncTeX written on IntroStat.synctex.gz.
注意:一致已 *已* * em>生成 * * * **
Transcript written on IntroStat.log.
> patchDVI("IntroStat.pdf")
[1] "0 patches made. Did you set \\SweaveOpts{concordance=TRUE}?"
*我不明白*
> patchSynctex("IntroStat.synctex.gz")
[1] "0 patches made. Did you set \\SweaveOpts{concordance=TRUE}?"
*同上*
似乎工具集中的某些内容无法像宣传的那样工作:dviPatch无法识别法律索引\ specials或pdflatex dfoes不生成它们。它 生成一些东西,但是......
我检查了生成的PDF使evince能够与.tex文件同步,但不能在.Rnw文件中同步。此外,当在emacs中打开.Rnw文件时,在AucTeX中使用“Cc Cv View”启动查看器确实启动了查看器(在请求打开我授权的服务器之后),但是查看器是空的,我得到了这个: “TeX-evince-sync-view:找不到文件的Evince实例:///home/charpent/Boulot/Cours/ODF/Chapitres/Ch3-StatMath/IntroStat.Rnw.pdf” 在“消息”缓冲区中。
所以我们在这里遇到了第二个问题。
第三个是将所有这些透明地集成到AucTeX生产链中,但这是另一个故事......
我真的希望将emacs作为我R / \ LaTeX / Sage工作的主要工具,而不是切换到RStudio,这可能不会像我每天/每周所需的SageTeX和其他工具那样多...
有什么想法吗?
答案 0 :(得分:2)
也许这https://github.com/jan-glx/patchKnitrSynctex会有所帮助。我在一个简单的文件上尝试过它,它确实有效。
关于第二个和第三个问题,我有这个脚本(注意我从jan-glx中获取上面的代码;相应地修改路径):
#!/bin/bash
FILE=$1
BASENAME=$(basename $FILE .Rnw)
Rscript -e 'library(knitr); opts_knit$set("concordance" = TRUE); knit("'$1'")'
pdflatex --synctex=1 --file-line-error --shell-escape "${1%.*}"
Rscript -e "source('~/Sources/patchKnitrSynctex.R'); patchKnitrSynctex('${1%.*}.tex')"
ln -s $BASENAME.synctex.gz $BASENAME.Rnw.synctex.gz
ln -s $BASENAME.pdf $BASENAME.Rnw.pdf
这些链接是解决“无法找到实例(...)”的愚蠢方式。
如果你的.Rnw在Emacs缓冲区中,请转到shell缓冲区,然后调用该脚本。完成后,来自Emacs的C-c C-v将打开您配置的PDF查看器(在我的情况下为okular)。在PDF中,shift +鼠标左键单击(至少是okular)会将您带到Emacs .Rnw缓冲区中的正确位置。
这并不理想:如果你跳转到错误,它会转到.tex,而不是.Rnw。而且我希望能够通过C-c C-c或类似方式调用它(但我不知道如何--- elisp无知)。