用Latex代码替换字符串向量中的重音符号

3

定义:

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

当我使用xtable将这个表打印到.tex文件时,重音符号会变得混乱无序,这并不奇怪。
我想用适当的Latex格式替换重音符号,例如:
> df
     name dat
1 M\'{e}xico   1
2 Michoac\'{a}n   2

请注意,在真实数据集中,有许多不同的名称带有不同的重音字母,但所有名称都具有相同类型的重音符号(即正斜杠),因此在\'{.}中需要更改的仅是点的位置上的字母。
尝试一个读者的建议,我进行了以下操作:
> 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}

这不是所需的内容。

2个回答

2
使用stringr包,逐个替换每种重音字符。
library(stringr)
df$name <- str_replace_all(df$name, "é", "\\\\'{e}")  
df$name <- str_replace_all(df$name, "á", "\\\\'{a}")
df$name

谢谢,可以循环遍历元音字母a、e、i、o、u,因为只有元音字母有重音。 - Fred
你提出的建议在提供的示例中是有效的。但是我正在使用第三方提供的数据库,重音符号必须以不同的方式编码,以便它不会替换任何内容 :-( 有什么办法可以确定编码并处理它吗? - Fred

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 标记,所以要注意。


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