knitr with xelatex和tikz:Ghostscript错误的最小例子

时间:2014-03-31 09:37:41

标签: r knitr tikz xelatex

我正在尝试使用XeLaTeX,knitr和tikz - 并且因为ghostscript错误而失败。我尝试了很多不同的方法,情况如下:

  1. XeLaTeX与knitr:作品
  2. PDFLaTeX with knitr:works
  3. PDFLaTeX与knitr和tikz:作品
  4. XeLaTeX与knitr和tikz:失败
  5. 我制作的简单文件是http://paste.lisp.org/+31GJ,主要部分是:

    <<xetex-tikz, eval=FALSE, echo=FALSE>>=
    options(tikzDefaultEngine='xetex')
    @  
    A plot: 
    <<test, echo=FALSE,dev='tikz'>>=
    plot(10,10) 
    @
    

    错误信息也在那里注释,但我会在此处粘贴:

    GPL Ghostscript 9.14: Unrecoverable error, exit code 1
    
    ** WARNING ** Filtering file via command -->rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile='/tmp/xdvipdfmx.45a08580e905757a9f5e6fc456cb9f8b' '/dev/null' -c quit<-- failed.
    ** WARNING ** Image format conversion for "/dev/null" failed...
    ** WARNING ** Image width=0.0!
    ** WARNING ** Image height=0.0!
    ** ERROR ** pdf_ref_obj(): passed invalid object.
    

    为了避免旧软件包出现任何问题(例如,RHEL5有旧版本的texlive),我在本地安装了以下内容:

    TeXlive 2013:

    $ type xelatex
    xelatex is hashed (/usr/local/texlive/2013/bin/x86_64-linux/xelatex
    $ xelatex -version
    XeTeX 3.1415926-2.5-0.9999.3-2013060708 (TeX Live 2013)
    kpathsea version 6.1.1
    

    GNU R

    $ type R
    R is /usr/local/bin/R
    $ R --version
    R version 3.0.3 (2014-03-06) -- "Warm Puppy"
    Copyright (C) 2014 The R Foundation for Statistical Computing
    Platform: x86_64-unknown-linux-gnu (64-bit)
    

    Ghostscript的

    $ type ghostscript
    ghostscript is /usr/local/bin/ghostscript
    $ ghostscript --version
    9.14
    

    我将R_LATEXCMD设置为xelatex(在使用pdflatex之前,这意味着编织因为我使用XeTeX包而失败)并且这是我唯一的全局变量或其他设置;路径似乎是正确的,例如:

    $ kpsewhich tikz
    /usr/local/texlive/2013/texmf-dist/tex/plain/pgf/frontendlayer/tikz.tex
    

    On R我更新了软件包并安装了knitr和tikzDevice(最新版本,通过install.package)。

    任何指针都会受到赞赏; XeLaTeX + knitr + tikz组合不会特别奇怪:在knitr图形手册中推荐使用tikz,并且需要使用与主文档相同的字体,而XeLaTeX是一种非常常见的引擎选择 - 我需要它提供的unicode支持,以便使用Charis SIL,IPA字符等。

1 个答案:

答案 0 :(得分:3)

我刚刚使用R 3.0.3和TeXLive 2013测试了 knitr tikzDevice 的CRAN版本(除了我使用Ubuntu之外,基本上和你的环境相同)。这似乎是一个非常简单的问题:您在第一个块上使用了eval=FALSE,因此未对该块进行评估,并且基本上忽略了options(tikzDefaultEngine = 'xetex')。将eval=FALSE更改为TRUE后,一切正常(实际上它是默认值,因此您可以将其保留)。

\documentclass{article}
\usepackage{xltxtra} %used this to avoid pdflatex being used
\usepackage{tikz}
%\setmainfont{Charis SIL} %depends on xlxtra
\begin{document}
\title{Testing}
\maketitle

<<xetex-tikz, eval=TRUE, include=FALSE>>=
options(tikzDefaultEngine='xetex')
@

A plot:
<<test, echo=FALSE, dev='tikz'>>=
plot(10,10)
@
\end{document}

tikzDevice with XeTeX and knitr