Путаница с настройкой ширины столбца в huxtable - PullRequest
0 голосов
/ 24 апреля 2019

Я немного озадачен тем, как работает установка ширины столбцов для таблиц в пакете R huxtable. В документации говорится, что при вызове set_col_width аргумент value, если он числовой, задает ширину столбцов в виде пропорций от общей ширины (которая устанавливается set_width). Но когда я записываю таблицу в Word, числовой вектор для value, кажется, вместо этого указывает абсолютную ширину столбца (которая мне действительно нравится), по-видимому, в дюймах, независимо от значения, установленного в set_width. Для вывода в формате PDF спецификации ширины столбца, кажется, не имеют никакого эффекта вообще.

Рассмотрим следующий пример.

library(dplyr)
library(huxtable)

test=data.frame(var1=1918:1925,var2=c(9009,1000:1006),var3 = 1100:1107)
HUX <- hux(test)

# add caption, borders, and colnames
HUX <- set_caption(HUX,"Example table") %>%
set_caption_pos("topleft") %>%
set_top_border(1,,1) %>%
set_bottom_border(final(1), , 1)    %>%
set_align(,,"left") %>%
add_colnames()
number_format(HUX)[,2:3] <- list(function(x) prettyNum(x, big.mark=","))

Если я установлю ширину столбцов, они будут отражены в выводе Word, но не в выводе pdf, а, очевидно, как абсолютные, а не пропорциональные ширины.

HUX <- set_width(HUX,1) %>%
    set_col_width(1:3, c(2,1,1))
quick_docx(HUX)  
quick_pdf(HUX)                                

file.remove(c("huxtable-output.pdf","huxtable-output.docx"))
HUX <- set_width(HUX,1) %>%
    set_col_width(1:3, c(2,3,1))
quick_docx(HUX)  
quick_pdf(HUX)                                

Приведенный выше код изменяет ширину столбцов (и общую ширину таблицы, даже если ширина, заданная в set_width, не изменяется), но только в Word, а не для вывода в формате PDF. Изменение аргумента в set_with не имеет никакого эффекта в Word, но смещает таблицу в pdf (хотя внешний вид самой таблицы не изменяется), вероятно, потому, что «область построения таблицы» меньше, и, таким образом, край сдвигается и положение таблицы выравнивается по левому краю в этой «области».

file.remove(c("huxtable-output.pdf","huxtable-output.docx"))
HUX <- set_width(HUX,0.5) %>%
    set_col_width(1:3, c(2,3,1))
quick_docx(HUX)  
quick_pdf(HUX)                                

Теперь, когда я пытаюсь указать ширину столбца, используя действительные (я думаю) длины LaTex, это не имеет значения для pdf, и при этом он фактически не устанавливает ширину столбцов для вывода Word.

file.remove(c("huxtable-output.pdf","huxtable-output.docx"))
HUX <- set_width(HUX,1) %>%
    set_col_width(1:3, paste0(c(2,3,1),"in"))
quick_docx(HUX)  
quick_pdf(HUX)                                

Более того, теперь, попробовав спецификации длины LaTex, предыдущий код (выше), который сделал успешно установил ширину столбцов для вывода Word, больше не делает этого.

file.remove(c("huxtable-output.pdf","huxtable-output.docx"))
HUX <- set_width(HUX,1) %>%
    set_col_width(1:3, c(2,3,1))
quick_docx(HUX)  
quick_pdf(HUX)                                

Я извиняюсь, если упускаю что-то очевидное здесь, но я просто не могу заставить эту спецификацию ширины столбца работать так, как я ожидал. Огромное спасибо всем, кто может это прояснить для меня.

Суть в том, что я хотел бы иметь возможность явно устанавливать ширину столбцов независимо от содержимого ячеек таблицы (т. Е. Ширина столбцов не уменьшается до ширины содержимого ячеек), особенно для записи или вязание в pdf.

Было бы неплохо, чтобы Word работал, но, кроме того, запись в Word, похоже, не сохраняет заголовок таблицы (но я всегда мог добавить заголовок позже в Word).

Я использую huxtable 4.5.0.

1 Ответ

0 голосов
/ 25 апреля 2019

Похоже, что ключ должен был указать set_wrap(ht) <- TRUE, тогда set_col_width отвечал на вывод PDF. Но не совсем последовательно. Когда pdf создавался с использованием quick_pdf, числовая спецификация, такая как set_col_width(1:3, c(0.6,0.2,0.2)), не выполнялась и выдавала ошибку:

! Illegal unit of measure (pt inserted).
<to be read again> 
                   !
l.108 \end{tabularx}
                    \end{threeparttable} 

Error: Failed to compile C:\Users\staufge\AppData\Local\Temp\Rtmp6p7GhF\file26983e8c25a6.tex. See https://yihui.name/tinytex/r/#debugging for debugging tips. See file26983e8c25a6.log for more info.

Та же спецификация работала при вязании от rmarkdown. В любом случае, спецификация, такая как set_col_width(1:3, paste0(c(3,2,4),"cm")), работала хорошо, за исключением того, что ширина столбцов была немного больше (примерно на 3-4 мм), чем указанная ширина. Я думал, что, возможно, игра с set_right_padding (или слева) может сделать спецификации ширины точными, но, похоже, это не имеет никакого эффекта.

Кроме того, похоже, что настройка position(ht) <- "center" (по умолчанию) явно не центрирует таблицу, а центрирует "ширину таблицы", указанную width(). Сама таблица, кажется, выровнена по левому краю в этой области. Так что спецификация как:

width(ht) <- 1
ht <- set_col_width(ht, 1:3, paste0(c(3,2,4),"cm"))

создает таблицу с выравниванием по левому краю на всю ширину текста, тогда как что-то вроде:

width(ht) <- 0.5
ht <- set_col_width(ht, 1:3, paste0(c(3,2,4),"cm"))

создает таблицу, выровненную по левому краю в пределах центрированной области, равной половине ширины текстовой области (но сама таблица не является точно центрированной).

В любом случае, я думаю, что теперь я знаю, как явно установить ширину таблицы, что и было после.

...