定义:
df <- data.frame(name=c("México","Michoacán"),dat=c(1,2))
s.t。
> df
name dat
1 México 1
2 Michoacán 2
当我使用.tex
将此表格打印到xtable
文件时,重音字符会出现乱码,这并不奇怪。
我想用正确的Latex
格式替换重音符号,例如:
> df
name dat
1 M\'{e}xico 1
2 Michoac\'{a}n 2
请注意,在真实数据集中,有许多不同的名称,不同的重音字母,但都具有相同的重音类型(即foward-slash),因此\'{.}
中唯一需要更改的是字母到位点。
在尝试一位读者的建议时,我做了以下事情:
> df <- data.frame(name=c("México","Michoacán"),dat=c(1,2))
> df
name dat
1 México 1
2 Michoacán 2
> df$name <- sub("é", "\\\\'{e}", df$name,)
> df
name dat
1 M\\'{e}xico 1
2 Michoacán 2
> capture.output(
+ print(xtable(df)),
+ file = "../paper/rTables.tex", append = FALSE)
当我在记事本中打开 rTables.tex 文件时:
% latex table generated in R 2.13.1 by xtable 1.5-6 package
% Fri Jul 15 13:19:17 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlr}
\hline
& name & dat \\
\hline
1 & M$\backslash$'\{e\}xico & 1.00 \\
2 & Michoacán & 2.00 \\
\hline
\end{tabular}
\end{center}
\end{table}
这不是我们所需要的。
答案 0 :(得分:2)
使用stringr
包,并逐个替换每种类型的重音字符。
library(stringr)
df$name <- str_replace_all(df$name, "é", "\\\\'{e}")
df$name <- str_replace_all(df$name, "á", "\\\\'{a}")
df$name
答案 1 :(得分:1)
我认为问题是这个案例要求很多xtable
尝试将奇怪的字符转换为LaTeX
。尝试覆盖sanitize.text.function
,如下所示:
print(xtable(df),sanitize.text.function=function(x){x})
在我的系统上输出:
% latex table generated in R 2.13.0 by xtable 1.5-6 package
% Fri Jul 15 10:30:00 2011
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlr}
\hline
& name & dat \\
\hline
1 & M\'{e}xico & 1.00 \\
2 & Michoacán & 2.00 \\
\hline
\end{tabular}
\end{center}
\end{table}
但是,可能会因为这样做而打破其他LaTeX
标记,所以要注意这一点。