关于这个问题我想知道这是否是:
- 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}