перезапуск таблицы kable latex в другую табличную среду

#r #latex #kable

#r #Латекс #kable

Вопрос:

Я хотел бы сохранить только «внутренние» строки таблицы latex, созданной kable. Я знаю только громоздкие и уродливые способы сделать это … попытки создания более чистых версий не увенчались успехом. вот один чистый провал:

 kable.rewrap <- function( df, newname= "mytable" ) {
    kt <- kable( df, "latex", booktabs=T )
    notop <- strsplit(kt, "\midrule")[[1]][2]
    nosur <- strsplit(notop, "\bottomrule" )[[1]][1]  ## fails: doesn't like "\"!
    newkt <- paste0("\begin{", newname, "}", nosur, "n\end{",newname,"}n")
    ## attr(newkt, "format") <-  chr "latex"  # wrong
    newkt
}

print(kable.rewrap( data.frame( x=1:3, y=1:3 ), "mytable" ))
  

должно привести

 begin{mytable}
toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule
end{mytable}
  

очевидно, что мой код latex теперь должен определять среду mytable . Я также озадачен «bottomrule» в nosur строке работает, но «\ bottomrule» не удается.

(другой альтернативой является полный отказ от kable и просто работа с фреймом данных, разделяя каждую строку символом и каждый столбец символом amp;.)

совет приветствуется.

Ответ №1:

1) kable.envir Аргумент добавит mytable часть, но это все равно приведет к созданию таблиц, которые мы удаляем с помощью gsub :

 kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  gsub(".(begin|end){tabular.*}", "", ., perl = TRUE)
  

предоставление:

 begin{mytable}


toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule

end{mytable}
  

2) Еще одна возможность — определить свою собственную среду mytabular, а затем использовать:

 kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  kable_styling(latex_table_env = "mytabular")
  

что дает:

 begin{mytable}

begin{mytabular}{rr}
toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule
end{mytabular}
end{mytable}
  

Добавлено

В (2) вместо определения среды бездействия для замены табличного tex / latex фактически делает ее уже доступной, а именно @empty .

 kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
  kable_styling(latex_table_env = "@empty")
  

Примечание

Мы назвали фрейм данных, показанный в вопросе, следующим образом:

 test_data <- data.frame(x = 1:3, y = 1:3)
  

Комментарии:

1. Добавлено улучшение к (2) в разделе Добавлено.