如何在使用ggplot2创建的PDF图中为标签,标题和类似内容使用Unicode字符?
请考虑以下示例:
library(ggplot2)
qplot(Sepal.Length, Petal.Length, data=iris, main="A?????????????????s????x??")
ggsave("t.pdf")
Run Code Online (Sandbox Code Playgroud)
图表的标题使用Unicode字符(小型大写字母),在输出中显示为....只有pdf图才会出现问题; 如果我用最后一行替换ggsave("t.png"),那么输出就是预期的.
我究竟做错了什么?我的R脚本是UTF-8编码.一些系统信息:
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Run Code Online (Sandbox Code Playgroud)
在寻找这个问题的解决方案时,我发现一些证据表明R使用单字节编码进行多字节编码,例如UTF-8用于PDF或postscript输出.我还发现了一些建议,例如,能够让欧元符号正常工作,但没有一般解决方案.
我有一组松散相关的组件,其中一些组件依赖于其他组件.为了具体,我们假设我们有"common","a"和"b"组件."common"没有任何依赖关系,但所有其他项目都使用"common".此外,"a"取决于"b".所有组件都是用Scala编写的,我想用sbt来构建它们.
以下属性很不错:
据我所知,有两种可能性在sbt中具有这种依赖性; 我们要么使用子项目,要么使用托管依赖项(在某处推送,例如在本地推送).但是,似乎这两个选项都没有提供上述(1)或(2).特别是
真的没有办法说某个sbt项目依赖于某个(相对)位置的另一个sbt项目,并且知道何时构建依赖项?
我们遇到了性能问题,我认为是Z3中处理非线性算术的部分.这是一个简单的具体Boogie示例,在使用Z3(版本4.1)验证时需要很长时间(大约3分钟)才能完成.
const D: int;
function f(n: int) returns (int) { n * D }
procedure test() returns ()
{
var a, b, c: int;
var M: [int]int;
var t: int;
assume 0 < a && 1000 * a < f(1);
assume 0 < c && 1000 * c < f(1);
assume f(100) * b == a * c;
assert M[t] > 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎问题是由函数的相互作用,整数变量的范围假设以及(未知)整数值的乘法引起的.最终的断言不应该是可证明的.似乎Z3有办法以某种方式实例化大量术语,因为它的内存消耗相当快地增长到大约300 MB,此时它放弃了,而不是快速失败.
我想知道这是否是一个错误,或者是否有可能改善启动时Z3应该停止搜索它正在尝试解决问题的特定方向.
一个有趣的事情是通过使用内联函数
function {:inline} f(n: int) returns (int) { n * D }
Run Code Online (Sandbox Code Playgroud)
使验证很快终止.
背景:这是我们在验证器Chalice中看到的问题的最小测试用例.在那里,Boogie程序可以使用更长的时间,可能有类似的多种假设.通常,验证似乎根本没有终止. …
/* ... */使用Scala解析器组合器(有效)解析C风格的多行注释(即)的最佳方法是什么?
在我参与的项目中,我们解析了类似C语言的编程语言,并希望支持多行注释.我们使用的子类StandardTokenParsers已经处理了这样的注释(通过StdLexical.但是,该类仅适用于相当短的多行注释,否则会耗尽堆栈空间.
我们还尝试提供我们自己的空白定义,以提高效率.我们使用了RegexParser(受StackOverflow上的另一个问题的启发)如下:
class Parser extends StandardTokenParsers {
override val lexical = new StdLexical {
def rp: RegexParsers = new RegexParsers {}
override val whitespace: Parser[Any] = rp.regex("""(\s|//.*|(?m)/\*(\*(?!/)|[^*])*\*/)*""".r).asInstanceOf[Parser[Any]]
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这略微改善了这种情况,但如果评论超过几十行,仍会导致堆栈溢出.任何想法如何改善这个?