【问题标题】:Replace accents in string vector with Latex code用 Latex 代码替换字符串向量中的重音符号
【发布时间】:2011-10-05 13:56:09
【问题描述】:

定义:

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}

这不是我们需要的。

【问题讨论】:

    标签: string r diacritics data-manipulation xtable


    【解决方案1】:

    使用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 因为只有元音有重音符号
    • 您的建议适用于提供的示例。但是我使用的是第三方提供的数据库,并且重音必须以不同的方式编码,因此它不会取代任何东西:-(知道如何确定编码并处理它吗?
    【解决方案2】:

    我认为问题在于这个案例要求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 标记,因此请注意这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2011-06-02
      • 2012-03-22
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多