使用 R 包 Huxtable 更改 RTF 输出的方向

Change orientation of RTF output using R package Huxtable

Huxtable 是为数不多的支持将格式化表格写入 RTF 的软件包之一,这是我正在尝试做的事情所必需的(相信我,如果我可以避免 RTF,我会的)。但是我无法在 to_rtf 的输出函数中或任何小插图中找到任何选项。

理想情况下会有一个简单的方法来做到这一点,比如 quick_rtf 上的一个选项来做类似的事情:

ht <- as_hux(mtcars, add_colnames = TRUE)
bottom_border(ht)[1, ] <- 1
bold(ht)[1, ] <- TRUE
caption(ht) <- 'Cars'
width(ht) <- 1
quick_rtf(ht, file='test.rtf', orientation='landscape)

而且我可以强制所有单元格旋转 90 度,但这并不是我想要的。有没有人有这样做的方法?还是我忽略了文档中的某些内容?

我正在考虑 post 处理来自 to_rtf 的文本。我参考了 RTF 规范 here,我可以看到有关如何设置方向的格式选项,但我不太了解如何将其应用于文档。有什么想法吗?

我已经想出了解决办法。正如 @dash2 在上面指出的那样,这不是 huxtable 本身内置的功能 - 但通过一些小的修改,它是可以实现的。

一种方法是调整 quick_rtf 函数中内置的 Huxtables(位于包中的 R/quick-functions.R 中)。此函数另外编写围绕 RTF table 的代码,包括字体和颜色 table。在那些 table 之后,您可以插入一些 RTF 代码来控制某些文档属性。

您想要用于横向的实际关键字(引用 RTF specification)是 \lndscpsxn。

  • \marglN 是左边距(其中 N 是缇 - 1440 缇 = 1 英寸)
  • \margr 是对的
  • \margt 排名第一
  • \margb 是底部
  • \paperw 是宽度
  • \paperh 是高度
  • \headery 为表头高度
  • \footery 为页脚高度

因此,如果您将所有这些放在一起(以及其他一些东西),如果您想要一个页边距为 1"、页眉和页脚为 .5"、横向为 8.5" X 11" 的文档,您会在字体和颜色 table 之后需要一个字符串,如下所示:

\paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\linex0\lndscpsxn
\margl1440\margr1440\margt1440\margb1440
\headery720\footery720

此字符串出现在字体和颜色 table 之后,但在 table 代码主体开始之前。因此,在 quick_rtf 中,您可以添加一个方向选项。如果选项设置为横向,则存储上面的字符串(您可以删除边距和页脚信息以保持简单,但这些是您可能想要控制的其他属性),并将其添加到写出文件的部分:

  landscape_str <- "\paperw15840\paperh12240\widowctrl\ftnbj\fet0\sectd\lndscpsxn\linex0"

  sink(file)
  tryCatch({
    cat("{\rtf1\ansi\deff0\n")
    print(fc_tbls)
    # Write landscape orientation string if selected
    if (orientation == "landscape") cat(landscape_str)
    cat("\n\n\n")
    lapply(hts, print_rtf)
    cat("\n\n\n}")
  },
    error = identity,
    finally = {sink()}
  )

编辑(2020 年 5 月 28 日):我的团队整理了包 pharmaRTF,它在 huxtable 输出上添加了 RTF 文档 属性 格式选项- 包括分别在文档的页眉和页脚中插入 titles/footnotes。