Прекратить knitr от обнажать заполняющие пространства в Kable

голоса
0

У меня есть следующая таблица, которая генерируется из этого reprex:

---
output:
  pdf_document:
    keep_tex: true
---

```{r, include = FALSE}
library(tidyverse)
library(knitr)
library(kableExtra)
```

```{r}
df <- data_frame(
  level = c(Level 1, Level 2, Level 3, Level 4),     
  cat1_1 = c(39.5, 25.1, 28.9, 6.6),
  cat2_1 = c(37.7, 26.1, 30.0, 6.2),
  cat3_1 = c(30.3, 23.3, 29.7, 16.7),
  cat1_2 = c(58.7, 29.1, 9.9, 2.3),
  cat2_2 = c(56.4, 30.3, 10.7, 2.5),
  cat3_2 = c(43.6, 31.4, 16.8, 8.1)
)


kable(df, format = latex, align = c, booktabs = TRUE, escape = TRUE,
  col.names = c(Level, Cat1, Cat2, Cat3, Cat4, Cat5, Cat6),
  caption = Percentage of Respondents in Each Category by Level and Group) %>%
  kable_styling(latex_options = HOLD_position, full_width = TRUE) %>%
  column_spec(1, width = 12em) %>%
  row_spec(0, bold = TRUE, align = c) %>%
  add_header_above(c(  = 1, Group 1 (%) = 3,
    Group 2 (%) = 3), bold = TRUE)
```

введите

Что я хочу, чтобы иметь столбцы, сосредоточенные, но выравниваются по десятичной запятой. Я понимаю, отсюда и здесь, что выравнивание колонки «S» в настоящее время не поддерживается, это хорошо. В работе вокруг, я намеревался выпрямить выровнять, а затем добавить блокнот с дополнительными пробелами в конце концов, чтобы подтолкнуть номер обратно к центру:

---
output:
  pdf_document:
    keep_tex: true
---

```{r, include = FALSE}
library(tidyverse)
library(knitr)
library(kableExtra)
```

```{r}
df <- data_frame(
  level = c(Level 1, Level 2, Level 3, Level 4),     
  cat1_1 = c(39.5, 25.1, 28.9, 6.6),
  cat2_1 = c(37.7, 26.1, 30.0, 6.2),
  cat3_1 = c(30.3, 23.3, 29.7, 16.7),
  cat1_2 = c(58.7, 29.1, 9.9, 2.3),
  cat2_2 = c(56.4, 30.3, 10.7, 2.5),
  cat3_2 = c(43.6, 31.4, 16.8, 8.1)
) %>%
  mutate_at(vars(contains(_)), funs(paste0(., paste(rep( , 4), collapse = ))))
df
```

```{r}
kable(df, format = latex, align = c(l, rep(r, 6)), booktabs = TRUE,
  col.names = c(Level, Cat1, Cat2, Cat3, Cat4, Cat5, Cat6),
  caption = Percentage of Respondents in Each Category by Level and Group) %>%
  kable_styling(latex_options = HOLD_position, full_width = TRUE) %>%
  column_spec(1, width = 7em) %>%
  row_spec(0, bold = TRUE, align = c) %>%
  add_header_above(c(  = 1, Group 1 (%) = 3,
    Group 2 (%) = 3), bold = TRUE)
```

введите

Теперь столбцы успешно выровнены по правому краю, но они не скатывались обратно к центру. Глядя на сырье Латекс мы можем понять, почему:

\begin{table}[H]

\caption{\label{tab:unnamed-chunk-3}Percentage of Respondents in Each Category by Level and Group}
\centering
\begin{tabu} to \linewidth {>{\raggedright\arraybackslash}p{7em}>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X}
\toprule
\multicolumn{1}{c}{\textbf{ }} & \multicolumn{3}{c}{\textbf{Group 1 (\%)}} & \multicolumn{3}{c}{\textbf{Group 2 (\%)}} \\
\cmidrule(l{3pt}r{3pt}){2-4} \cmidrule(l{3pt}r{3pt}){5-7}
\multicolumn{1}{>{\centering\arraybackslash}p{7em}}{\textbf{Level}} & \multicolumn{1}{c}{\textbf{Cat1}} & \multicolumn{1}{c}{\textbf{Cat2}} & \multicolumn{1}{c}{\textbf{Cat3}} & \multicolumn{1}{c}{\textbf{Cat4}} & \multicolumn{1}{c}{\textbf{Cat5}} & \multicolumn{1}{c}{\textbf{Cat6}}\\
\midrule
Level 1 & 39.5 & 37.7 & 30.3 & 58.7 & 56.4 & 43.6\\
Level 2 & 25.1 & 26.1 & 23.3 & 29.1 & 30.3 & 31.4\\
Level 3 & 28.9 & 30.0 & 29.7 & 9.9 & 10.7 & 16.8\\
Level 4 & 6.6 & 6.2 & 16.7 & 2.3 & 2.5 & 8.1\\
\bottomrule
\end{tabu}
\end{table}

Если данные введены, Обивка пространства были раздеты. Я пытался избежать хвостовых пробелов:

df <- data_frame(
  level = c(Level 1, Level 2, Level 3, Level 4),     
  cat1_1 = c(39.5, 25.1, 28.9, 6.6),
  cat2_1 = c(37.7, 26.1, 30.0, 6.2),
  cat3_1 = c(30.3, 23.3, 29.7, 16.7),
  cat1_2 = c(58.7, 29.1, 9.9, 2.3),
  cat2_2 = c(56.4, 30.3, 10.7, 2.5),
  cat3_2 = c(43.6, 31.4, 16.8, 8.1)
) %>%
  mutate_at(vars(contains(_)), funs(paste0(., paste(rep( , 4), collapse = )))) %>%
  mutate_at(vars(contains(_)), str_replace_all,  , fixed(\\\\ ))

df
#> # A tibble: 4 x 7
#>   level  cat1_1     cat2_1     cat3_1     cat1_2     cat2_2     cat3_2    
#>   <chr>  <chr>      <chr>      <chr>      <chr>      <chr>      <chr>     
#> 1 Level… 39.5\\ \… 37.7\\ \… 30.3\\ \… 58.7\\ \… 56.4\\ \… 43.6\\ \…
#> 2 Level… 25.1\\ \… 26.1\\ \… 23.3\\ \… 29.1\\ \… 30.3\\ \… 31.4\\ \…
#> 3 Level… 28.9\\ \… 30.0\\ \… 29.7\\ \… 9.9\\ \\… 10.7\\ \… 16.8\\ \…
#> 4 Level… 6.6\\ \\… 6.2\\ \\… 16.7\\ \… 2.3\\ \\… 2.5\\ \\… 8.1\\ \\…

Но я получаю эту ошибку при попытке связать документ:

! Misplaced \noalign.
\bottomrule ->\noalign 
                       {\ifnum 0=`}\fi \@aboverulesep =\aboverulesep \global...
l.202 \end{tabu}

Error: Failed to compile add_space.tex. See add_space.log for more info.

Опять же, глядя на сырье Латекс несколько информативный:

\begin{table}[H]

\caption{\label{tab:unnamed-chunk-3}Percentage of Respondents in Each Category by Level and Group}
\centering
\begin{tabu} to \linewidth {>{\raggedright\arraybackslash}p{7em}>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X>{\raggedleft}X}
\toprule
\multicolumn{1}{c}{\textbf{ }} & \multicolumn{3}{c}{\textbf{Group 1 (\%)}} & \multicolumn{3}{c}{\textbf{Group 2 (\%)}} \\
\cmidrule(l{3pt}r{3pt}){2-4} \cmidrule(l{3pt}r{3pt}){5-7}
\multicolumn{1}{>{\centering\arraybackslash}p{7em}}{\textbf{Level}} & \multicolumn{1}{c}{\textbf{Cat1}} & \multicolumn{1}{c}{\textbf{Cat2}} & \multicolumn{1}{c}{\textbf{Cat3}} & \multicolumn{1}{c}{\textbf{Cat4}} & \multicolumn{1}{c}{\textbf{Cat5}} & \multicolumn{1}{c}{\textbf{Cat6}}\\
\midrule
Level 1 & 39.5\ \ \ \ & 37.7\ \ \ \ & 30.3\ \ \ \ & 58.7\ \ \ \ & 56.4\ \ \ \ & 43.6\ \ \ \\\
Level 2 & 25.1\ \ \ \ & 26.1\ \ \ \ & 23.3\ \ \ \ & 29.1\ \ \ \ & 30.3\ \ \ \ & 31.4\ \ \ \\\
Level 3 & 28.9\ \ \ \ & 30.0\ \ \ \ & 29.7\ \ \ \ & 9.9\ \ \ \ & 10.7\ \ \ \ & 16.8\ \ \ \\\
Level 4 & 6.6\ \ \ \ & 6.2\ \ \ \ & 16.7\ \ \ \ & 2.3\ \ \ \ & 2.5\ \ \ \ & 8.1\ \ \ \\\
\bottomrule
\end{tabu}
\end{table}

Представляется , что окончательный завершающий пробел все еще усечен, что приводит к линии окончания \\\. Есть ли способ сохранить отступы пространство при вязании документов в формате PDF? Или есть лучший способ достичь центрированного, десятичного выровнен столбца?

Задан 27/11/2018 в 15:00
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more