字体更改导致 \vbox 溢出

字体更改导致 \vbox 溢出

关于这个问题我想知道这是否是:

  • pdfTeX 中的一个错误(在这种情况下我会将其上报)
  • LaTeX 中的一个错误(以表格形式*)
  • 完全没有错误

以下 LaTeX 代码正确地创建此 PDF 输出:

在此处输入图片描述

但会出现以下消息(错误或警告):

在第 18 行检测到 \vbox 过满(高出 1.49998pt)

在第 21 行检测到 \vbox 过满(高出 1.49998pt)

TeX 代码:

\documentclass[10pt, twoside, a4paper]{report}
    \usepackage[utf8x]{inputenc}
    \usepackage[english]{babel}
    \usepackage{fontenc}
    \usepackage[ top=21mm, bottom=21mm, left=12mm, right=8mm]{geometry}
    \usepackage{multirow}
\begin{document}

\sffamily
\begin{scriptsize}
\begin{tabular*}{0.45\textwidth}[t]{@{\extracolsep{\fill}}|r|ccc|ccc|}
    \multicolumn{7}{c}{\normalsize{}} \\
    \hline
    \multicolumn{1}{|c|}{} & & & \multicolumn{1}{|c|}{} & \multicolumn{1}{c|}{} & & \multicolumn{1}{c|}{}\\[-2.0ex]
    \multicolumn{1}{|c|}{\multirow{2}{*}{\textbf{Lat.}}} & 
    \multicolumn{2}{c}{\multirow{1}{*}{\footnotesize{\textbf{Twilight}}}} & 
    \multicolumn{1}{|c|}{\multirow{2}{*}{\textbf{Sunrise}}} & 
    \multicolumn{1}{c|}{\multirow{2}{*}{\textbf{Sunset}}} & 
    \multicolumn{2}{c|}{\multirow{1}{*}{\footnotesize{\textbf{Twilight}}}} \\[0.6ex] 

    \multicolumn{1}{|c|}{} & 
    \multicolumn{1}{c}{Naut.} & 
    \multicolumn{1}{c}{Civil} & 
    \multicolumn{1}{|c|}{} & 
    \multicolumn{1}{c|}{} & 
    \multicolumn{1}{c}{Civil} & 
    \multicolumn{1}{c|}{Naut.}\\ 
    \hline
\end{tabular*}
\end{scriptsize}
\end{document}

但是如果我简单地删除“\footnotesize{...}“从上面的 LaTeX 代码(两个实例)来看,错误(或警告?)消息消失了!

以及以下(再次正确)PDF生成:

在此处输入图片描述

我无法理解插入我想要的字体大小“\脚注大小{}“应该是任何错误/警告消息的原因。(这些消息中有超过 350 条是由我的 Python 代码生成的,使其看起来非常不专业——因此我想解决这个问题。)

我的环境是:Windows 10,Python,MiKTeX 2.9.7269,发出的命令是:

pdflatex <filename.tex>

答案1

您已在基于 scriptsize 设置的行高(较小)的框中指定了脚注大小文本,因此文本不适合。所以这只是代码中的一个错误。

请注意,size 命令不带参数,应该不是\footnotesize\footnotesize{....}但这里没有区别)

这里的 的目的是什么\multirow{1}{*}?您可以简单地删除它,然后过满的框就会消失。事实上,几乎所有的\multicolumn\multirow都可以删除,但是:

\documentclass[10pt, twoside, a4paper]{report}
%    \usepackage[utf8x]{inputenc}
    \usepackage[english]{babel}
    \usepackage{fontenc}
    \usepackage[ top=21mm, bottom=21mm, left=12mm, right=8mm]{geometry}
    \usepackage{multirow}

\begin{document}

\sffamily
\begin{scriptsize}
\begin{tabular*}{0.45\textwidth}[t]{@{\extracolsep{\fill}}|r|ccc|ccc|}
    \multicolumn{7}{c}{\normalsize{}} \\
    \hline
    \multicolumn{1}{|c|}{} & & & \multicolumn{1}{|c|}{} & \multicolumn{1}{c|}{} & & \multicolumn{1}{c|}{}\\[-2.0ex]
    \multicolumn{1}{|c|}{\multirow{2}{*}{\textbf{Lat.}}} & 
    \multicolumn{2}{c}{{\footnotesize{\textbf{Twilight}}}} & 
    \multicolumn{1}{|c|}{\multirow{2}{*}{\textbf{Sunrise}}} & 
    \multicolumn{1}{c|}{\multirow{2}{*}{\textbf{Sunset}}} & 
    \multicolumn{2}{c|}{{\footnotesize{\textbf{Twilight}}}} \\[0.6ex] 

    \multicolumn{1}{|c|}{} & 
    \multicolumn{1}{c}{Naut.} & 
    \multicolumn{1}{c}{Civil} & 
    \multicolumn{1}{|c|}{} & 
    \multicolumn{1}{c|}{} & 
    \multicolumn{1}{c}{Civil} & 
    \multicolumn{1}{c|}{Naut.}\\ 
    \hline
\end{tabular*}

\end{scriptsize}
\end{document}

我不能把它保留得像上面那样:-)我删除了大部分标记:

\documentclass[10pt, twoside, a4paper]{report}
% don't use utf8x, and you do not need utf8 in any reasonably
% current latex as it is the default
%    \usepackage[utf8x]{inputenc} 

    \usepackage[english]{babel}
    \usepackage{fontenc}
    \usepackage[ top=21mm, bottom=21mm, left=12mm, right=8mm]{geometry}
    \usepackage{multirow}
    \usepackage{array}
\begin{document}

\sffamily
\begin{scriptsize}
\setlength\extrarowheight{2pt}
\begin{tabular}[t]{@{}|c|cc|cc|cc|@{}}
    \hline
    \multirow{2}{*}{\textbf{Lat.}}& 
    \multicolumn{2}{c|}{\footnotesize \textbf{Twilight}} & 
    \multirow{2}{*}{\textbf{Sunrise}} & 
    \multirow{2}{*}{\textbf{Sunset}} & 
    \multicolumn{2}{c|}{\footnotesize\textbf{Twilight}}\\[0.6ex] 
      & 
    Naut. & 
   Civil & 
    &
     & 
   Civil & 
   Naut.\\ 
    \hline
\end{tabular}


% always leave a paragraph end before the end of a size change
\end{scriptsize}
\end{document}

答案2

今天我将使用tabularray包来处理您的表格。通过其语法,可以在表格前言中写入表格设置:

  • 分别设置第一行和其他行的字体大小,
  • 减少第一排与第二排之间的距离
\documentclass[10pt, twoside, a4paper]{report}
\usepackage[hmargin={12mm,8mm}, vmargin={21mm, 21mm}]{geometry}
\usepackage[english]{babel}
\usepackage{fontenc}
\usepackage{tabularray}

\begin{document}
\noindent%
\begin{tblr}{width   = 0.45\textwidth,
             colspec = {|r|*{2}{X[c]}|c | c| *{2}{X[c]}|},
             row{1}  = {font=\footnotesize\bfseries, belowsep=-3pt},
             row{2}  = {abovesep=0pt},
             row{2-Z} = {font=\scriptsize\sffamily},
             }
    \hline
\SetCell[r=2]{m}   Lat.     % multi row cell
    &   \SetCell[c=2]{c}    Twilight    % multi column cell
        &   &   \SetCell[r=2]{m}   Sunrise
                &   \SetCell[r=2]{m}   Sunset
                    &   \SetCell[c=2]{c}    Twilight
                        &       \\

    & Civil 
        &   Naut.  
            &   &   &   Civil 
                        & Naut. \\
    \hline
\end{tblr}

\end{document}

在此处输入图片描述

相关内容