Решение проблемы «overfull \vbox» в таблице с несколькими строками

Решение проблемы «overfull \vbox» в таблице с несколькими строками

Эта таблица не доставляла мне ничего, кроме проблем. Сейчас она выглядит нормально:

введите описание изображения здесь

Но очевидно, что вертикальный интервал не так уж хорош. "Region" слишком велик (что я пытался исправить с помощью параметра [fixup]multirow: [-0.5em]). Раньше я \parboxполучал перенос строк и центрирование средних столбцов должным образом. Чтобы соответствовать ширине моей страницы, эти столбцы должны переноситься на три строки.

При запуске я получаю две ошибки для этих двух столбцов:

Overfull \vbox (5.89192pt too high) detected 
Overfull \vbox (6.57993pt too high) detected

Как я уже сказал, все выглядит нормально, но я хотел бы понять, что происходит (даже если бы я мог просто изменить содержимое таблицы, чтобы исправить проблему, это не скажет мнепочемуэто была проблема). Возможно, я любитель наказаний, но после нескольких часов работы над диссертацией мне нравится делать перерыв и отлаживать \LaTeXошибки/предупреждения.

Я прочитал несколько вопросов/ответов здесь и попытался вставитьневидимые правила (из комментария), \smash(что нарушало перенос строк), \vphantom(что заставляло текст исчезать), добавление [1em]в разных местах текста разного размера и несколько других методов.


МВЭ:

\documentclass{article} % The class file specifying the document structure

\usepackage{palatino} % Use the Palatino font by default
\usepackage{siunitx}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{array}
\usepackage[referable]{threeparttablex}
\usepackage{multirow}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}

\geometry{
    paper=letterpaper, % Change to letterpaper for US letter
    inner=2.5cm, % Inner margin
    outer=3.8cm, % Outer margin
    bindingoffset=.5cm, % Binding offset
    top=1.5cm, % Top margin
    bottom=1.5cm, % Bottom margin
}

\begin{document}

\begin{table}[!htb]
    \sisetup{input-decimal-markers = .,group-separator={,}, group-four-digits = true}
    \captionsetup{skip=0.5\baselineskip,size=footnotesize}
    \footnotesize
    \centering
    \begin{threeparttable}
        \begin{tabular}{L{2.8cm}*4{S[table-format=2.1]}}
            \toprule
            \multicolumn{1}{c}{\multirow{2}{*}[-0.5em]{\parbox[c]{2.7cm}{\centering \textbf{Region}}}} & 
            \multicolumn{1}{c}{\multirow{2}{*}{\parbox[c]{1.8cm}{\centering \textbf{Electric outages per month}\tnote{a}}}} &
            \multicolumn{1}{c}{\multirow{2}{*}{\parbox[c]{2.0cm}{\centering \textbf{Typical outage duration (hours)}\tnote{a}}}} & 
            \multicolumn{2}{c}{\centering\textbf{Population with electricity access}\tnote{b}}         \\  \cmidrule{4-5}
            & ~ & ~ & \multicolumn{1}{c}{\parbox[c]{1.7cm}{\centering \textbf{~~Total [\si{\percent}]}}} & \multicolumn{1}{c}{\parbox[c]{1.7cm}{\centering\textbf{~~Rural [\si{\percent}]}}} \\ [0.2cm]
            \midrule
            South Asia & 25.4 & 3.1 & 78. & 69.3 \\%
            Sub-Saharan Africa & 9.0 & 4.2 & 35.3 & 15.3 \\%
            OECD countries & 0.4 & 0.4 & 99.9 & 99.7 \\%
            \bottomrule
        \end{tabular} 
        \begin{tablenotes}
        \item[a] For commercial users only
        \item[b] For residential users only
        \end{tablenotes}
    \end{threeparttable}
    \caption[Grid statistics for selected regions]{Grid statistics for selected regions.}
    \label{tab:grid}
\end{table}

\end{document}

Обратите внимание, что на снимке экрана и в MWE используется articleкласс, но для своего документа я использую слегка измененную версию пользовательского класса MastersDoctoralThesis(но ошибки в любом случае идентичны):

\documentclass[11pt,oneside,english,singlespacing,
               headsepline,chapterinoneline]
              {MastersDoctoralThesis}

решение1

Первый аргумент \multirowна самом деле не является числом rowsзамененных одной ячейкой, а числом lines— или эквивалентом — которые заменяются. Принятие значения 4делает всю работу.

Я воспользовался возможностью упростить ваш код с помощью makecellпакета и его \multirowtheadкоманды, которая позволяет переносить строки в ячейках и использовать общее форматирование. Также я предлагаю выровнять заголовок самого левого столбца по левому краю, но это легко изменить (по умолчанию для всех makecellкоманд центрирование выполняется как по вертикали, так и по горизонтали).

Последний пункт: palatinoустарел и не поддерживает математику. Я заменил этот пакет на newpx, основанный на клоне palatino TeX Gyre Pagella.

\documentclass{article} % The class file specifying the document structure
\usepackage{newpxtext, newpxmath} %
\usepackage{siunitx}
\usepackage{geometry}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{array}
\usepackage[referable]{threeparttablex}
\usepackage{multirow, makecell}
\renewcommand\theadfont{\bfseries}

\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}

\geometry{
    paper=letterpaper, % Change to letterpaper for US letter
    inner=2.5cm, % Inner margin
    outer=3.8cm, % Outer margin
    bindingoffset=.5cm, % Binding offset
    top=1.5cm, % Top margin
    bottom=1.5cm, % Bottom margin
}

\begin{document}

\begin{table}[!htb]
    \sisetup{input-decimal-markers = .,group-separator={,}, group-four-digits = true}
    \captionsetup{skip=0.5\baselineskip,size=footnotesize}
    \footnotesize
    \centering
    \begin{threeparttable}
        \begin{tabular}{L{2.8cm}*4{S[table-format=2.1]}}
            \toprule
            \renewcommand\theadalign{lc}\multirowthead{3}{Region}&
           {\multirowthead{4}[1.3ex]{Electric\\ outages\\ per month\tnote{a}}} &
            {\multirowthead{4}[1.3ex]{Typical outage\\ duration\\ (hours)\tnote{a}}} &
            \multicolumn{2}{c}{\centering\textbf{Population with electricity access}\tnote{b}} \\%
            \addlinespace[0.5ex] \cmidrule(lr){4-5}
            & ~ & ~ & {\quad\textbf{Total [\si{\percent}]}\quad} & {\textbf{Rural [\si{\percent}]}}\\%
            \addlinespace[0.8ex]
            \midrule
            South Asia & 25.4 & 3.1 & 78. & 69.3 \\%
            Sub-Saharan Africa & 9.0 & 4.2 & 35.3 & 15.3 \\%
            OECD countries & 0.4 & 0.4 & 99.9 & 99.7 \\%
            \bottomrule
        \end{tabular}
        \begin{tablenotes}
        \item[a] For commercial users only
        \item[b] For residential users only
        \end{tablenotes}
    \end{threeparttable}
    \caption[Grid statistics for selected regions]{Grid statistics for selected regions.}
    \label{tab:grid}
\end{table}

\end{document} 

введите описание изображения здесь

Связанный контент