Skip to contents

Set table layout and table width. Default to fixed algorithm.

If layout is fixed, column widths will be used to display the table; width is ignored.

If layout is autofit, column widths will not be used; table width is used (as a percentage).


  layout = "fixed",
  width = 0,
  align = "center",
  opts_html = list(),
  opts_word = list(),
  opts_pdf = list(),
  word_title = NULL,
  word_description = NULL



flextable object


'autofit' or 'fixed' algorithm. Default to 'autofit'.


The parameter has a different effect depending on the output format. Users should consider it as a minimum width. In HTML, it is the minimum width of the space that the table should occupy. In Word, it is a preferred size and Word may decide not to strictly stick to it. It has no effect on PowerPoint and PDF output. Its default value is 0, as an effect, it only use necessary width to display all content. It is not used by the PDF output.


alignment in document (only Word, HTML and PDF), supported values are 'left', 'center' and 'right'.


html options as a list. Supported elements are:

  • 'shadow' TRUE or FALSE, use shadow dom, this option is existing to disable shadow dom (set to FALSE) for pagedown and Quarto that can not support it for now.

  • 'extra_css': extra css instructions to be integrated with the HTML code of the table.

  • 'scroll': NULL or a list if you want to add a scroll-box.

    • Use an empty list to add an horizontal scroll. The with is fixed, corresponding to the container's width.

    • If the list has a value named height it will be used as height and the scroll will happen also vertically. The height will be in pixel if numeric, if a string it should be a valid css measure.

    • If the list has a value named freeze_first_column set to TRUE, the first column is set as a sticky column.

    • If the list has a value named add_css it will be used as extra css to add, .i.e: border:1px solid red;.


Word options as a list. Supported elements are:

  • 'split': Word option 'Allow row to break across pages' can be activated when TRUE.

  • 'keep_with_next': Word option 'keep rows together' is activated when TRUE. It avoids page break within tables. This is handy for small tables, i.e. less than a page height.


PDF options as a list. Supported elements are:

  • 'tabcolsep': space between the text and the left/right border of its containing cell.

  • 'arraystretch': height of each row relative to its default height, the default value is 1.5.

  • 'float': type of floating placement in the PDF document, one of:

    • 'none' (the default value), table is placed after the preceding paragraph.

    • 'float', table can float to a place in the text where it fits best

    • 'wrap-r', wrap text around the table positioned to the right side of the text

    • 'wrap-l', wrap text around the table positioned to the left side of the text

    • 'wrap-i', wrap text around the table positioned inside edge-near the binding

    • 'wrap-o', wrap text around the table positioned outside edge-far from the binding

  • 'fonts_ignore': if TRUE, pdf-engine 'pdflatex' can be used instead of 'xelatex' or 'lualatex.' If pdflatex is used, fonts will be ignored because they are not supported by pdflatex, whereas with the xelatex and lualatex engines they are.

  • 'default_line_color': default line color, restored globally after the flextable is produced.


alternative text for Word table (used as title of the table)


alternative text for Word table (used as description of the table)


PowerPoint output ignore 'autofit layout'.

See also

Other flextable dimensions: autofit(), dim.flextable(), dim_pretty(), fit_to_width(), flextable_dim(), height(), hrule(), ncol_keys(), nrow_part(), width()


ft_1 <- flextable(head(cars))
ft_1 <- autofit(ft_1)
ft_2 <- set_table_properties(ft_1, width = .5, layout = "autofit")
ft_3 <- set_table_properties(ft_1, width = 1, layout = "autofit") # add scroll for HTML ---- set.seed(2) dat <- lapply(1:14, function(x) rnorm(n = 20)) dat <- setNames(dat, paste0("colname", 1:14)) dat <- ft_4 <- flextable(dat) ft_4 <- colformat_double(ft_4) ft_4 <- bg(ft_4, j = 1, bg = "#DDDDDD", part = "all") ft_4 <- bg(ft_4, i = 1, bg = "#DDDDDD", part = "header") ft_4 <- autofit(ft_4) ft_4 <- set_table_properties( x = ft_4, opts_html = list( shadow = FALSE, scroll = list( height = "500px", freeze_first_column = TRUE ) ) ) ft_4