通过makefile使用knitr的重音字符
在makefile中使用knitr将.Rnw文件编译成.tex文件时,我遇到了重音字符问题。令人惊讶的是,如果我直接在R中编译相同的文件,问题就会消失 在makefile的某个阶段,我可以使用knitr从.Rnw文件中获取.tex文件:通过makefile使用knitr的重音字符,r,makefile,knitr,non-ascii-characters,R,Makefile,Knitr,Non Ascii Characters,在makefile中使用knitr将.Rnw文件编译成.tex文件时,我遇到了重音字符问题。令人惊讶的是,如果我直接在R中编译相同的文件,问题就会消失 在makefile的某个阶段,我可以使用knitr从.Rnw文件中获取.tex文件: %.tex: %.Rnw Rscript \ -e "library(knitr)" \ -e "options(width=$(WIDTH))" \ -e "knitr::opts_chunk[['set']](fi
%.tex: %.Rnw
Rscript \
-e "library(knitr)" \
-e "options(width=$(WIDTH))" \
-e "knitr::opts_chunk[['set']](fig.width=5,fig.height=5,fig.align='center')" \
-e "knitr::opts_chunk[['set']](fig.path='$(CHKFIGSDIR)/$*-')" \
-e "knitr::opts_chunk[['set']](cache=TRUE,cache.path='$(CACHDIR)/$*-')" \
-e "knitr::knit('$<','$@',encoding = 'UTF-8')"
虽然这解决了问题,但它显然破坏了makefile的使用目的(我的设置涉及许多其他文件),因此如果有人能帮助我克服这一问题,我将不胜感激。您是否尝试了中间的情况,没有Make,
Rscript-e“library(knitr)”-e“knit('variaveis.Rnw','variaveis.tex',encoding='UTF-8')”
?现在就尝试。。。而且它是有效的。。。奇怪的是,它似乎与makefile有关。。。问题是我做了一些进一步的实验,现在我更困惑了。完整故事:variaveis.Rnw与其他文件在一个文件夹中,调用Rscript的makefile就在那里。如果我调用此文件夹中的make,则没有问题!但我在另一个文件夹中调用make,其中另一个makefile cd与第一个makefile一起发送到该文件夹,并在那里调用make。这是我得到错误的地方,如果我在variaveis.Rnw所在的原始文件夹中调用make,则不会出现错误,是的,有两个makefiles的原因,这是一个进步。现在最小化两个makefile。试试中间的例子,比如cd文件夹;在第二个makefile中创建一个规则,上面写着“cd folder;Rscript…”。操作系统的本机编码是UTF-8,因此您实际上不需要指定encoding
参数,除非您与使用不支持UTF-8的其他类型操作系统的用户共享此makefile和Rnw文档。我不明白Makefile如何影响此处的knitr
…是的,UTF-8不是必需的,这是在绝望状态下添加的;-)我同意,在尝试了Beta的建议之后,这个问题显然与knitr无关——这是一个makefile和/或shell问题,可能是因为我对这两个方面都不了解
<<>>=
preçoIVA <- 240 * (1 + iva)
@
...
label: unnamed-chunk-1
|............... | 23%
ordinary text without R code
|.................... | 31%
label: unnamed-chunk-2
Warning in block_exec(params) :
failed to tidy R code in chunk <unnamed-chunk-2>
reason: Error in parse(text = x, keep.source = TRUE) :
<text>:1:11: unexpected '>'
1: pre<U+00E7>
^
Quitting from lines 95-96 (variaveis.Rnw)
Error in parse(text = x, srcfile = src) : <text>:1:11: unexpected '>'
1: pre<U+00E7>
^
Calls: <Anonymous> ... evaluate -> parse_all -> parse_all.character -> parse
Execution halted
make[1]: *** [variaveis.tex] Error 1
> library(knitr)
> knit("variaveis.Rnw","variaveis.tex",encoding="UTF-8")
processing file: variaveis.Rnw
|..... | 8%
ordinary text without R code
|.......... | 15%
label: unnamed-chunk-1
|............... | 23%
ordinary text without R code
|.................... | 31%
label: unnamed-chunk-2
|......................... | 38%
ordinary text without R code
|.............................. | 46%
label: unnamed-chunk-3
...
...
...
output file: variaveis.tex
[1] "variaveis.tex"
> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=pt_PT.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=pt_PT.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=pt_PT.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=pt_PT.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.5
loaded via a namespace (and not attached):
[1] evaluate_0.5.1 formatR_0.10 highr_0.3 stringr_0.6.2 tools_3.0.2