Как напечатать символы со скобками в латексе с помощью xtable и Sweave

Я пытаюсь создать таблицу текс с помощью xtable. В R таблица содержит:

>tvPre
        p\\_1              p\\_2                p\\_3
FV     "\\textuparrow M"     ""                 "\\textuparrow R"                
a      "\\textuparrow WH"  ""                 ""                               
b      "\\textuparrow H"   ""                 "\\textuparrow (H)"              
c      "\\textuparrow (WH)"  ""                 "\\textuparrow (H)"              
Oil    "\\textuparrow W"     "\\textuparrow R"  "\\textdownarrow R"  

Если я печатаю в консоли, используя функцию идентификации для дезинфекции, все в порядке: инструкция:

print(xtable(tvPre), rotate.colnames=T,  
      sanitize.text.function = getOption("xtable.sanitize.text.function", function(x)x))

Тогда я получаю:

 & \begin{sideways} p\_1 \end{sideways} & \begin{sideways} p\_2\end{sideways} & \begin{sideways} p\_3 \end{sideways} \\ 
  \hline
FV & \textuparrow M   &                & \textuparrow R \\ 
a  & \textuparrow WH  &                &   \\ 
b  & \textuparrow H   &                & \textuparrow (H)   \\ 
c  & \textuparrow (WH)  &                & \textuparrow (H) \\ 
O  & \textuparrow W   & \textuparrow R & "\\textdownarrow R" \\

Тем не менее, когда я помещаю код в файл Sweave (.Rnw), тогда в .tex я получаю:

& \begin{sideways} p\_1 \end{sideways} & \begin{sideways} p\_2\end{sideways} & \begin{sideways} p\_3 \end{sideways} \\ 
  \hline
FV & \textuparrow M &  & \textuparrow R \\
a  & \textuparrow W &  &  \\
b  & H              &  & H \\
c  & \textuparrow W &  & H \\
O  & \textuparrow W & \textuparrow R & \textdownarrow R \\

Затем все скобки и стрелка исчезнут. Я тоже пробовал использовать $\\uparrow$, но все равно не работает. Третья строка, второй столбец ("\\textuparrow WH") печатается без "H", но в следующей строке " \\textuparrow H" печатается только "H". Остальные ячейки со скобками печатаются без стрелок и скобок в файле .tex.

Мне нужно напечатать в .tex, как напечатано в консоли, какая-то подсказка ??


person user1686315    schedule 09.02.2015    source источник
comment
Не могли бы вы добавить воспроизводимый пример для своей таблицы (stackoverflow.com/a/5963610/2633645). Может случиться так, что вам нужно сделать двойную обратную косую черту для специальных символов, чтобы избежать их.   -  person r.bot    schedule 09.02.2015


Ответы (1)


Хорошо, у меня работает следующее. В вашем вопросе не было указано, загружен ли у вас пакет textcomp - он вам нужен. То же самое с боковым пакетом. Я также изменил функцию sanitize.text. на sanitize.text.function = function(x){x}.

Приведенный ниже сценарий сохраняется в виде файла .Rnw.

\documentclass{article}
\usepackage{textcomp}
\usepackage{rotating}

\begin{document}
\SweaveOpts{concordance=TRUE}

<<table, echo=FALSE, results=tex >>= 
require(xtable)

tvPre <- as.data.frame(structure(list(`p\\\\_1` = c("\\textuparrow M", "\\textuparrow WH", 
"\\textuparrow H", "\\textuparrow (WH)", "\\textuparrow W"), 
    `p\\\\_2` = c("", "", "", "", "\\textuparrow R"), `p\\\\_3` = c("\\textuparrow R", 
    "", "\\textuparrow (H)", "\\textuparrow (H)", "\\textdownarrow R"
    )), .Names = c("p\\_1", "p\\_2", "p\\_3"), row.names = c("FV", 
"a", "b", "c", "Oil"), class = "data.frame"))

print(xtable(tvPre), rotate.colnames = TRUE, sanitize.text.function = function(x){x})
@


\end{document}
person r.bot    schedule 09.02.2015
comment
Это работает! Наконец, я не смог найти проблему, но я почти уверен, что это проблема синхронизации между рабочими областями, что в одном режиме загружался старый код ... Я не мог найти причину, но я переустанавливал все и работал. - person user1686315; 16.02.2015
comment
Как ограничить дезинфекцию несколькими столбцами? - person skan; 30.04.2018