2

我对 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}

这个问题出自哪里,我该如何解决?

4

3 回答 3

4

您需要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因此您必须在选项中手动指定它(as \textgreater{}):

<<setup, include=FALSE>>=
options(
  tikzSanitizeCharacters = c("%", "$", "}", "{", "^", "_", "#", "&", "~", ">"),
  tikzReplacementCharacters = c("\\%", "\\$", "\\}", "\\{", "\\^{}", "\\_{}", "\\#", "\\&", "\\char`\\~", "\\textgreater{}")
)
@
于 2012-10-20T19:18:49.577 回答
3

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

于 2012-10-01T15:04:36.170 回答
0

您应该T1在这里真正使用编码,请参阅以下对 TeX.SX 相关问题的回答:https ://tex.stackexchange.com/a/2376/8057

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

于 2013-11-08T03:45:07.190 回答