Sweave / tikZ生成R图中的倒置问题(¿)

时间:2012-10-01 10:21:28

标签: r sweave

我相对较新的Sweave和R一般而且在我的情节标签中尝试渲染基本数学符号时遇到了问题。我相信问题可能是由Sweave或tikzDevice包引起的,因为如果我使用png或pdf设备,我能够完美地渲染数学符号。

将此代码写入png或pdf设备会产生预期的输出 - >符号

qplot(factor(cyl), data=mtcars, geom="bar", colour=factor(cyl)) + scale_x_discrete(paste("",">","6k"))

在下面的文件中使用运行Sweave产生的.tex输出文件替换了>符号与¿符号

<<fig=FALSE, echo=FALSE>>=
require(tikzDevice)
require(ggplot2)
require(reshape2)
tikz('sweave-math-symbols.tex', width=5.9, height=2.7)

qplot(factor(cyl), data=mtcars, geom="bar", colour=factor(cyl)) + scale_x_discrete(paste("",">","6k"))
@

使用Sweave输出文件的LaTeX文档位于

之下
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

%opening
\title{Sweave Math Symbols}
\author{Phiri}

    \begin{document}

    \maketitle

    \begin{abstract}

    \end{abstract}

    \section{Illustration}
    \input{sweave-math-symbols.tex}

    \end{document}

这个问题源于何处以及如何解决?

3 个答案:

答案 0 :(得分:3)

您的Sweave文件在没有修改的情况下为我工作(在Ubuntu 10.04上),但您可以尝试将>包装在TeX数学分隔符($$中,即$>$);坦率地说,我很惊讶/不明白为什么它可以正常没有在某些情况下的分隔符。

答案 1 :(得分:3)

您需要tikz(..., sanitize = TRUE),以便tikzDevice可以转义特殊字符。有关详细信息,请参阅?tikz

正如我一直认为在代码块中手动打开设备一样尴尬,这里有knitr中的等效块来保持血腥细节:

<<sweave-math-symbols, dev='tikz', sanitize=TRUE, fig.width=5.9, fig.height=2.7>>=
library(ggplot2)
qplot(factor(cyl), data=mtcars, geom="bar", colour=factor(cyl)) +
  scale_x_discrete(paste("",">","6k"))
@

>中尚未考虑tikzDevice,因此您必须在选项中手动指定(\textgreater{}):

<<setup, include=FALSE>>=
options(
  tikzSanitizeCharacters = c("%", "$", "}", "{", "^", "_", "#", "&", "~", ">"),
  tikzReplacementCharacters = c("\\%", "\\$", "\\}", "\\{", "\\^{}", "\\_{}", "\\#", "\\&", "\\char`\\~", "\\textgreater{}")
)
@

答案 2 :(得分:0)

您应该在此处使用T1编码,请参阅TeX.SX上相关问题的以下答案:https://tex.stackexchange.com/a/2376/8057

对于tikzDevice,只需将\usepackage[T1]{fontenc}写入用于测量文本和生成最终输出的前导码(选项tikzDocumentDeclarationtikzMetricPackages)。