使用带有特殊乳胶字符和ggplot2的GNU R进行Tikz输出

问题描述

在GNU R中使用ggplot2创建绘图后,经常需要将绘图另存为TIKZ和PNG。

特殊的LaTeX字符必须在图例或轴标题中转义。如果我保存了两个图,那么我将在PNG输出中得到垃圾(示例1),或者如果不转义特殊字符(示例2),则不会输出TIKZ。

一种明显的解决方案是有一个条件来决定如何格式化(转义或不转义)字幕。如何在这里避免代码重复?

示例1:

attach(all)
p <- ggplot(data = all,aes(x = Time,y = Concentration,color = Status)) + geom_line() + geom_point()
p <- p + labs(subtitle="50\\% reduction")
ggsave(filename="test.png")
detach(all)

tikz(file=paste(sub('\\.[^\\.]*$','',outputname),".tex",sep=""))

示例2:

attach(all)
p <- ggplot(data = all,color = Status)) + geom_line() + geom_point()
p <- p + labs(subtitle="50% reduction")
ggsave(filename="test.png")
detach(all)

tikz(file=paste(sub('\\.[^\\.]*$',sep=""))

解决方法

您应该编写一个函数来处理此问题。您没有说如何确定是否输出TIKZ vs PNG,但我假设您可以产生一个布尔tikz来描述该决定。然后像这样添加字幕:

escapeIfTikz <- function(s,tikz = ...) {
  if (tikz)
    gsub("([$%])","\\\\\\1",s)  # add other necessary escapes
  else
    s # Do nothing for PNG
}

p <- p + labs(subtitle=escapeIfTikz("50% reduction"))