带有GNU R的Tikz输出,带有特殊字符和ggplot2

带有GNU R的Tikz输出,带有特殊字符和ggplot2,r,ggplot2,latex,tex,tikz,R,Ggplot2,Latex,Tex,Tikz,在GNU R中使用ggplot2创建绘图后,我经常需要将绘图保存为TIKZ和PNG 特殊的乳胶字符必须在图例或轴标题中转义。如果我保存了两个绘图,那么在PNG输出中会出现垃圾(示例1),或者如果没有转义特殊字符(示例2),则不会输出TIKZ 显而易见的解决方案是有一个条件来决定如何格式化(转义或不转义)字幕。这里如何避免代码重复 例1: attach(all) p <- ggplot(data = all, aes(x = Time, y = Concentration, color =

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

特殊的乳胶字符必须在图例或轴标题中转义。如果我保存了两个绘图,那么在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=""))
附加(全部)

p您应该编写一个函数来处理这个问题。您没有说明如何决定是否输出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"))

escapeIfTikz是的,我可以这样做,但这需要多个
escapeIfTikz(…)
语句-是否存在整体可能性?说明你想做什么有什么不是“整体性”的?如果您反对键入的数量,您可以缩短名称,或者使用自动完成的编辑器,或者编写一个包装函数来代替
labs()
。这是一个很好的观点。我现在找不到比这更好的方法了。
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"))