Изменить ориентацию вывода RTF с помощью пакета R Huxtable - PullRequest
0 голосов
/ 04 февраля 2020

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 градусов, но это не совсем то, что я ищу. У кого-нибудь есть способ сделать это? Или я что-то упускаю из виду в документации?

Я рассматривал возможность пост-обработки текста из to_rtf. Я ссылался на спецификацию RTF здесь , и я вижу варианты форматирования для того, как установить ориентацию, но я не совсем понимаю, как применить его к документу. Есть идеи?

1 Ответ

1 голос
/ 03 марта 2020

С тех пор я нашел решение этой проблемы. Как указывает @ dash2 выше, это не та возможность, которая встроена в сам huxtable - но с некоторыми незначительными изменениями она достижима.

Один из способов - настроить встроенные функции quick_rtf Huxtables (расположенные в R / quick-functions.R в упаковке). Эта функция дополнительно записывает код, окружающий таблицу RTF, включая таблицы шрифтов и цветов. Сразу после этих таблиц вы можете вставить код RTF для управления некоторыми свойствами документа.

Фактическое ключевое слово (ссылающееся на спецификацию RTF ), которое вы хотите использовать для альбомной ориентации: \ lndscpsxn.

  • \ marglN - левый край (где N - твипс - 1440 твипов = 1 дюйм)
  • \ margr - правый
  • \ margt is top
  • \ margb - снизу
  • \ paperw - ширина
  • \ paperh - высота
  • \ headery - высота заголовка
  • \ footery - это высота нижнего колонтитула

Так что, если вы соберете все это вместе (с несколькими другими вещами), если вы хотите документ с 1 "полями, .5" в верхнем и нижнем колонтитулах, 8.5 "X Для 11-дюймового документа в альбомной ориентации вам понадобится строка после таблиц шрифтов и цветов, которая выглядит следующим образом:

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

Эта строка следует после таблицы шрифтов и цветов, но до начала кода таблицы. , Так что в quick_rtf вы можете добавить опцию для ориентации. Если для параметра задано значение landscape, вы сохраняете указанную выше строку (вы можете исключить информацию о полях и нижнем колонтитуле, чтобы сохранить ее простоту, но это другие свойства, которыми вы можете управлять), и добавить ее в раздел, записывая файл:

  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()}
  )
...