Заменить акценты в строковом векторе латексным кодом - PullRequest
3 голосов
/ 14 июля 2011

Определение:

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, например ::11012*

> 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}

Это не то, что нужно.

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Используйте пакет stringr и заменяйте каждый тип акцентированного символа по одному.

library(stringr)
df$name <- str_replace_all(df$name, "é", "\\\\'{e}")  
df$name <- str_replace_all(df$name, "á", "\\\\'{a}")
df$name
1 голос
/ 15 июля 2011

Мне кажется, проблема в том, что в этом случае много 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 может быть нарушена при этом, поэтому имейте это в виду.

...