Другое

Как разделить таблицы modelsummary на несколько страниц в LaTeX

Узнайте, как разделить таблицы modelsummary на несколько страниц в LaTeX вместо их усечения. Полное руководство по использованию бэкенда tinytable с функциональностью мультистраничности для профессионального экспорта таблиц из R в LaTeX.

Как разбить таблицы modelsummary на несколько страниц в LaTeX?

Я использую пакет modelsummary в R для экспорта регрессионных таблиц в LaTeX. Мой типичный рабочий процесс выглядит так:

r
data("mtcars")
library(modelsummary)

modelsummary(lm(mpg~factor(disp)+factor(gear), output="latex_tabular", data = mtcars), stars = TRUE) %>% 
  save_tt("./smth.tex", overwrite = TRUE)

Это хорошо работает для небольших таблиц, но когда я включаю много факторов, таблица выходит за пределы одной страницы и обрезается. Как настроить modelsummary так, чтобы таблица разбивалась на несколько страниц вместо того, чтобы обрезаться?

Пакет modelsummary в R может разделять таблицы на несколько страниц в LaTeX с помощью бэкенда tinytable и функции темы multipage. Начиная с версии 2.0.0, modelsummary использует tinytable в качестве бэкенда для отрисовки таблиц по умолчанию, который включает встроенную поддержку разделения длинных таблиц на несколько страниц с опционально повторяющимися заголовками.

Содержание

Понимание функциональности multipage

Пакет tinytable, который управляет modelsummary с версии 2.0.0, специально включает поддержку multipage для LaTeX-таблиц. Согласно документации tinytable, эта функциональность позволяет разделять длинные таблицы на несколько страниц с опционально повторяющимися заголовками и подвалами.

Ключевое понимание заключается в том, что вам нужно применить конкретную LaTeX-тему для включения поведения multipage. Поведение по умолчанию не автоматически разделяет таблицы на страницы, что объясняет, почему ваш текущий рабочий процесс приводит к усеченным таблицам.

Использование theme_latex с опцией multipage

Чтобы разделить ваши таблицы modelsummary на несколько страниц, вам нужно применить функцию theme_latex() с аргументом multipage = TRUE. Вот как изменить ваш рабочий процесс:

r
data("mtcars")
library(modelsummary)

modelsummary(lm(mpg~factor(disp)+factor(gear), data = mtcars), stars = TRUE) %>% 
  theme_latex(multipage = TRUE) %>% 
  save_tt("./smth.tex", overwrite = TRUE)

Этот подход использует функцию theme_latex() для применения специфичных для LaTeX стилей, включая функциональность multipage. Документация tinytable подтверждает, что это правильный метод для включения многостраничных таблиц.


Важное замечание: Функция theme_latex() должна применяться к выводу modelsummary перед сохранением. Это добавляет необходимые LaTeX-команды для включения окружения longtable.

Необходимые LaTeX-пакеты

Чтобы многостраничные таблицы работали правильно, убедитесь, что ваш LaTeX-документ включает необходимые пакеты. Согласно документации modelsummary, в преамбуле документа должны быть включены следующие пакеты:

latex
\usepackage{tabularray}
\usepackage{float}
\usepackage{graphicx}
\usepackage{codehigh}
\usepackage[normalem]{ulem}
\UseTblrLibrary{booktabs}
\UseTblrLibrary{siunitx}

Кроме того, могут потребоваться пользовательские команды:

latex
\newcommand{\tinytableTabularrayUnderline}[1]{\underline{#1}}
\newcommand{\tinytableTabularrayStrikeout}[1]{\sout{#1}}
\NewTableCommand{\tinytableDefineColor}[3]{\definecolor{#1}{#2}{#3}}

Если вы хотите предотвратить обертывание числовых записей в \num{}, вы можете установить:

r
options("modelsummary_format_numeric_latex" = "plain")

Альтернативные подходы

Использование бэкенда kableExtra

Если вы предпочитаете использовать бэкенд kableExtra, вы можете вернуться к старому рабочему процессу:

r
options(modelsummary_factory_latex = "kableExtra")

modelsummary(lm(mpg~factor(disp)+factor(gear), data = mtcars), 
             output = "kableExtra", 
             stars = TRUE) %>% 
  kableExtra::kable_styling(latex_options = "scale_down") %>% 
  save_tt("./smth.tex", overwrite = TRUE)

Опция scale_down помогает разместить большие таблицы на одной странице путем их масштабирования, но для действительно больших таблиц подход с multipage лучше.

Использование пакета gt

Пакет gt также поддерживает многостраничные таблицы:

r
modelsummary(lm(mpg~factor(disp)+factor(gear), data = mtcars), 
             output = "gt", 
             stars = TRUE) %>% 
  gt::gt_pltext()

Однако поддержка LaTeX в gt для функциональности multipage более ограничена по сравнению с tinytable.

Устранение распространенных проблем

Проблема: Таблица все равно не разделяется на страницы

Согласно GitHub issue #493, существуют случаи, когда даже с multipage = TRUE таблица не разделяется. Вот возможные решения:

  1. Проверьте конфликты с Quarto: Избегайте использования опций чанков Quarto, которые запускают постобработку, так как они могут конфликтовать с окружением longtblr, используемым для многостраничных таблиц.

  2. Ручная реализация longtable: Если автоматический метод не работает, вам может потребоваться вручную реализовать longtable:

r
modelsummary(lm(mpg~factor(disp)+factor(gear), data = mtcars), stars = TRUE) %>% 
  theme_latex(outer = "longtable") %>% 
  save_tt("./smth.tex", overwrite = TRUE)
  1. Использование пакета longtable: Как упоминается на TeX Stack Exchange, пакет longtable специально разработан для таблиц, занимающих несколько страниц.

Проблема: Ошибки компиляции

Если вы encountering ошибки компиляции, убедитесь:

  • Все необходимые LaTeX-пакеты установлены
  • Ваш LaTeX-документ использует правильный класс документа (например, article, report)
  • Нет конфликтов между пакетами таблиц

Полный пример рабочего процесса

Вот полный, рабочий пример, демонстрирующий весь рабочий процесс:

r
# Загрузка необходимых пакетов
library(modelsummary)

# Создание модели с множеством факторов для демонстрации функциональности multipage
data(mtcars)
model <- lm(mpg ~ factor(cyl) + factor(gear) + factor(vs) + factor(am) + 
              factor(carb) + disp + hp + drat + wt + qsec, data = mtcars)

# Генерация многостраничной LaTeX-таблицы
modelsummary(model, 
             title = "Комплексные результаты регрессионной модели",
             stars = TRUE,
             output = "tinytable") %>% 
  theme_latex(multipage = TRUE, 
              rowhead = 1,  # Повторять заголовок на каждой странице
              outer = "label={tbl:regression}") %>% 
  save_tt("./multipage_table.tex", overwrite = TRUE)

# Опционально: Сохранить как HTML для предпросмотра
modelsummary(model, 
             title = "Комплексные результаты регрессионной модели",
             stars = TRUE,
             output = "html") %>% 
  save_tt("./multipage_table.html", overwrite = TRUE)

В вашем LaTeX-документе вы можете затем сослаться на таблицу:

latex
Таблица \ref{tbl:regression} показывает комплексные результаты регрессии.

Сравнение с другими пакетами

Функция tinytable (modelsummary) kableExtra gt
Поддержка multipage Встроенная с theme_latex(multipage = TRUE) Ручная реализация Ограниченная
Повторение заголовков Автоматическое с параметром rowhead Ручное Не поддерживается
Интеграция с LaTeX Отличная Хорошая Умеренная
Настройка Высокая Очень высокая Высокая
Кривая обучения Низкая Умеренная Низкая

Документация tinytable подчеркивает, что он был разработан специально для удовлетворения потребностей пользователей modelsummary, что делает его наиболее интегрированным решением для этого рабочего процесса.

Заключение

Чтобы разделить таблицы modelsummary на несколько страниц в LaTeX, вы должны:

  1. Использовать функцию theme_latex(multipage = TRUE) для вывода вашей таблицы modelsummary
  2. Убедиться, что все необходимые LaTeX-пакеты включены в преамбулу вашего документа
  3. Быть в курсе потенциальных проблем совместимости с Quarto и другими инструментами обработки LaTeX
  4. Рассмотреть альтернативные подходы, если автоматический метод не работает для вашего конкретного случая

Функциональность multipage в tinytable предоставляет надежное решение для обработки больших регрессионных таблиц, которые в противном случае были бы усечены. Следуя правильной настройке и шагам устранения неполадок, вы можете создавать профессиональные многостраничные LaTeX-таблицы непосредственно из ваших выводов R modelsummary.

Источники

  1. Stack Overflow: Use kableExtra to manipulate and save tex file after modelsummary
  2. Документация по tinytable Tutorial
  3. tinytable NEWS - Поддержка multipage
  4. GitHub Issue #493 - Функциональность multipage
  5. Stack Overflow: What packages are required for functionality with latex output for modelsummary
  6. Документация по внешнему виду modelsummary
  7. Документация по советам tinytable
  8. Документация по пакету tinytable на CRAN
Авторы
Проверено модерацией
Модерация