добавление \ label {} в вывод kable kableExtra latex

Я пытаюсь создать таблицу в латексном формате в R с параметром \ label {}.

Что-то подобное

library(tidyverse)
library(knitr)
library(kableExtra)

data_frame(a = 1:3, b = 2:4) %>% 
  kable(align = 'c', format = 'latex') %>% 
  kable_styling(full_width = FALSE)

итоговый результат приведен ниже, но я хотел бы добавить параметр \ label {label_value} в таблицу latex с label_value, который я могу определить

\begin{table}[H]
\centering
\begin{tabular}{c|c}
\hline
a & b\\
\hline
1 & 2\\
\hline
2 & 3\\
\hline
3 & 4\\
\hline
\end{tabular}
\end{table}

Я пытаюсь автоматически создавать таблицы в R, которые я могу сохранить, а затем включить в латексный документ.


person Steve Reno    schedule 07.01.2019    source источник
comment
где находится параметр \label? Вы можете вручную редактировать вывод kable как обычную строку. Вам просто нужно убедиться, что вы присвоили результирующим строкам атрибуты из исходного вывода.   -  person OganM    schedule 08.01.2019
comment
похоже, что gsub () может отлично работать для редактирования автоматической метки, созданной при использовании аргумента caption, и при этом сохранять атрибуты. Спасибо за предложения OganM   -  person Steve Reno    schedule 08.01.2019


Ответы (3)


Если вы поместите заголовок в вызов kable, вы автоматически получите метку, основанную на имени, которое вы даете фрагменту кода.
Если вы запускаете его на верхнем уровне, как в вашем примере, это своего рода неуклюже: вам нужно поместить метку в заголовок, и вы получите две метки, вашу и автоматически сгенерированную бесполезную. Например,

library(tidyverse)
library(knitr)
library(kableExtra)

data_frame(a = 1:3, b = 2:4) %>% 
  kable(align = 'c', format = 'latex', 
       caption = "Table caption \\label{tab:example}") %>% 
  kable_styling(full_width = FALSE)

который производит

\begin{table}[t]

\caption{\label{tab:}Table caption \label{tab:example}}
\centering
\begin{tabular}{c|c}
\hline
a & b\\
\hline
1 & 2\\
\hline
2 & 3\\
\hline
3 & 4\\
\hline
\end{tabular}
\end{table}

Я не уверен, но полагаю, что в некоторых случаях вам придется вручную отредактировать автоматически созданный ярлык \label{tab:}. Так что используйте вязальную ткань или R-уценку и избегайте проблем.

person user2554330    schedule 08.01.2019
comment
отличное решение user2554330. В настоящее время я пишу рукопись в Tex Shop с таблицами / графикой, созданными в R, поэтому я искал простой способ автоматизации включения таблицы и графики, и это хорошо работает. Не знаю, подойдет ли мне создание рукописи в R-markdown, но это тоже хорошее предложение. - person Steve Reno; 08.01.2019
comment
Вы можете использовать вязальщицу в стиле Sweave в TeXShop, если вы устанавливаете собственный движок. (Не используйте Sweave, используйте knitr.) Он автоматически сгенерирует этикетку. Если вы не можете найти или выяснить код для движка, задайте другой вопрос, но, возможно, не в Stackoverflow: tex.stackexchange.com будет более подходящим. - person user2554330; 08.01.2019

Вы можете использовать knitr::opts_current для управления автоматической меткой, созданной с заголовком:

> library(knitr)
> library(kableExtra)
> opts_current$set(label = "hello")
> data.frame(a = 1:3, b = 2:4) %>% 
+     kable(align = 'c', format = 'latex', 
+           caption = "Table caption") %>% 
+     kable_styling(full_width = FALSE)
\begin{table}

\caption{\label{tab:hello}Table caption}
\centering
\begin{tabular}[t]{c|c}
\hline
a & b\\
\hline
1 & 2\\
\hline
2 & 3\\
\hline
3 & 4\\
\hline
\end{tabular}
\end{table}
person Stéphane Laurent    schedule 08.01.2019
comment
Это интересно: на knitr::opts_current странице справки сказано, что opts_current$set ничего не делает. Я думаю, это верно только для knitr документа, а не для кода верхнего уровня. - person user2554330; 08.01.2019

Для этого есть встроенная опция.

kable(..., label = "something")

Дополнительная информация: https://github.com/haozhu233/kableExtra/issues/486

person Marco Antonio Faganello    schedule 07.10.2020
comment
Мне это нравится, но он не дает вам достаточного контроля, потому что он начинается с табуляции: текст. - person Galled; 31.01.2021