Заменить акценты в строковом векторе латексным кодом
Определение:
df <- data.frame(name=c("México","Michoacán"),dat=c(1,2))
улица
> 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}
Это не то, что нужно.
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
Тем не менее, разметка может быть нарушена, поэтому имейте это в виду.
Использовать stringr
упаковать и заменить каждый тип акцентированного символа по одному.
library(stringr)
df$name <- str_replace_all(df$name, "é", "\\\\'{e}")
df$name <- str_replace_all(df$name, "á", "\\\\'{a}")
df$name