使用 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。
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。