Unicode带下标字符

7

我想在R中的图例中添加一个具有两个小写字母下标的Unicode字符。

该字符是带有著重符号的r(ř),并且两个字母是i和j。

我已经查看了这个问题:Unicode character with superscript,并尝试根据答案调整我的问题。

以下是我尝试过的内容:

plot(1,pch=NA,ylab="",xlab="",axes=F)
legend("top",legend=paste("1-","\u{0159}"),bty ="n",bg = "white",cex=2)
legend("center",legend=paste("1-","\u{0159}","\u{0069}","\u{006A}"),bty="n",bg = "white",cex=2)
legend("bottomleft",legend=expression("1-"*"\u0159"["\u0069"*"\u006A"]),bty="n",bg = "white",cex=2)
legend("bottomright", legend = quote("1-" *"\u0159"["\u0069"*"\u006A"]),bty="n",bg = "white",cex=2)

下面是结果:

下面是生成的图

enter image description here

Unicode字母和下标分别使用时都可以正常工作,但是在一起就会出现问题。任何组合的[ ]与paste()一起使用都会返回错误,但我认为这是可以预料到的,因为paste不能处理下标的[ ]。

如果您正在使用Windows,则可能在CRAN的常见问题解答网站中找到提示,但我不确定如何实施:

3.6 我在R控制台中看不到带重音符号的字符,例如在?text中。

您需要在Rconsole中指定支持使用的编码的字体(参见Q5.2)。这在早期版本的Windows中曾是一个问题,但现在很难找到不支持的字体。

Rterm中对这些字符的支持取决于运行Rterm的环境(终端窗口和shell,包括语言环境和代码页设置),以及终端窗口使用的字体。那些通常是基于传统的DOS设置,需要进行修改。


1
使用您提供的答案,以下代码对我有效:plot.new(); text(0.5, 0.7, labels = quote("1 - " * '\u{0159}'[ij]))。您示例中的3和4也对我有效。 - rawr
@rawr 很抱歉,你的解决方案对我没有用。我正在使用RStudio,所以我也尝试了使用普通的R,但是在那里也没有任何一个版本起作用。 - Nadja Simons
Nadja,你使用的是哪个操作系统?因为你最后两个示例和rawr的代码在Ubuntu 14.04,Rv3.1.3上都能正常运行。 - user20650
@user20650 我正在使用Windows 7。 - Nadja Simons
嗨@konvas,感谢您的建议,但问题依旧。我想知道这是否是区域设置或编码问题,但如果是这种情况,那么带重音符号的字母应该会像预期的那样显示而不带下标。legend=quote("\u0159") 显示了带重音符号的字母,但添加下标 legend=quote("\u0159"[i] 却将其删除。与 OP 一样,在 W7、R3.1.1 上无法解决此问题。 - user20650
你正在使用哪个 R 版本?(在 R 中发布 sessioninfo() 的结果) - cmbarbu
1个回答

4
这与系统区域设置有关,例如,如果您尝试运行以下命令:
# intToUtf8(345)
# [1] "ř"
# iconv(intToUtf8(345), "utf-8", localeToCharset())
# [1] "r"

这应该可以解决问题(我使用了捷克语,但其他语言环境也可能适用):
Sys.setlocale("LC_CTYPE", "czech")
# [1] "Czech_Czech Republic.1250"
text(..., labels = quote("\u{0159}"[ij]))

太棒了,干杯。我尝试将语言环境设置为德语和法语,但都没有成功。捷克语才是答案! - user20650
@user20650 哈哈,是的,这是我想到的第一种具有此字符的语言,尽管我相信还会有很多。但是,你有没有想过为什么在没有下标的情况下(例如在 quote("\u{0159}") 中),它可以在不更改区域设置的情况下正常工作呢? - konvas
1
毫无头绪,我也觉得很奇怪。所以也许真正的答案是不要使用Windows - user20650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接