knitr с xelatex и tikz: ошибка Ghostscript на минимальном примере

Я пытаюсь использовать XeLaTeX, knitr и tikz - и выдает ошибку ghostscript. Я пробовал много разных подходов, и ситуация следующая:

  1. XeLaTeX с knitr: работает
  2. PDFLaTeX с knitr: работает
  3. PDFLaTeX с knitr и tikz: работает
  4. XeLaTeX с knitr и tikz: не получается

Сделанный мной простой документ - это 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, что означало, что knit не сработает, поскольку я использую пакеты XeTeX), и это о единственной глобальной переменной или дополнительной настройке, которую я сделал; пути кажутся правильными, например:

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

На R я обновил пакеты и установил knitr и tikzDevice (последние версии через install.package).

Любые указатели будут оценены; комбинация XeLaTeX + knitr + tikz не кажется такой уж экзотической: tikz рекомендован в руководстве по работе с графикой knitr и необходим для использования тех же шрифтов, что и основной документ, а XeLaTeX - очень распространенный выбор движка - и мне нужен поддержка Unicode, которую он обеспечивает для использования символов Charis SIL, IPA и т. д.


person fsmunoz    schedule 31.03.2014    source источник


Ответы (1)


Я только что протестировал CRAN-версии knitr и tikzDevice с R 3.0.3 и TeXLive 2013 (в основном в той же среде, что и ваша, за исключением того, что я использую 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 с XeTeX и knitr

person Yihui Xie    schedule 08.04.2014
comment
Большое спасибо за вашу помощь! Дьявол действительно кроется в деталях, и я должен признаться, что к настоящему времени я смотрел на все более сложные решения; Думаю, я ранее добавил eval = FALSE, когда отлаживал другую проблему, а затем не только забыл об этом, но и стал для меня почти невидимым. - person fsmunoz; 08.04.2014