关于在huxtable中设置列宽的困惑

时间:2019-04-24 14:55:38

标签: r pdf word column-width

对于R包@ManyToOne中的表设置列宽的工作方式,我有些困惑。该文档说,在调用huxtable时,参数set_col_width(如果为数字)将列宽指定为总宽度的比例(由value设置)。但是,当我向Word写表时,set_width的数字矢量似乎改为指定绝对列宽(我实际上很喜欢),显然以英寸为单位,而与value中设置的值无关。对于pdf输出,列宽规范似乎根本没有任何影响。

请考虑以下示例。

set_width

如果我设置列宽,它们会在Word输出中反映出来,但不会在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=","))

以上代码更改了列宽(即使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) 中设置的宽度不变,也改变了表的整体宽度),但仅在Word中,而不是pdf输出。更改set_width中的参数在Word中无效,但会移动pdf表(尽管表本身的外观未更改),可能是因为“表绘制区域”较小,并且边缘是因此移动了,桌子的位置在这个“区域”中左对齐。

set_with

现在,当我尝试使用有效的(我认为)LaTex长度指定列宽时,它对pdf没有影响,也实际上没有为Word输出设置列宽。

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长度规范之后, did 成功设置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)                                

如果我在这里遗漏了一些明显的东西,我深表歉意,但是我似乎无法使此列宽规范按预期的方式工作。非常感谢任何可以为我解决此问题的人。

最重要的是,我希望能够显式设置列宽,而不管表的单元格内容如何(即,列宽不缩小到单元格内容的宽度),特别是对于写出或编织成pdf。

具有适用于Word的功能也很好,但顺便说一句,写至Word似乎不能保留表标题(但我以后总是可以在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) 4.5.0。

1 个答案:

答案 0 :(得分:0)

看来关键是要指定set_wrap(ht) <- TRUE,然后set_col_width才响应pdf输出。但并非完全一致。使用quick_pdf生成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 mm)。我虽然也许与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"))

生成一个在文本区域宽度一半的中心区域内左对齐的表(但表本身未完全居中)。

无论如何,我想我现在知道如何显式设置表格宽度,这正是我所追求的。