我创建了简单的表格,其中除第一行和第一列之外的所有单元格都是空白的。
\documentclass{book}
\usepackage{rotating}
\linespread{1.2}
\begin{document}
\thispagestyle{empty}
\begin{sideways}
\bgroup
\def\arraystretch{1.5}
\setlength\tabcolsep{10pt}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|}
\hline
Column 1 & Column 2 & Column 3 & Column 4 & Column 5 & Column 6 & Column 7 & Column 8 & Column 9 & Column 10 & Column 11 \\
\hline
Row 2 & & & & & & & & & & \\
\hline
Row 3 & & & & & & & & & & \\
\hline
Row 4 & & & & & & & & & & \\
\hline
Row 5 & & & & & & & & & & \\
\hline
Row 6 & & & & & & & & & & \\
\hline
\end{tabular}
\egroup
\end{sideways}
\thispagestyle{empty}
\end{document}
如您所见,我做了三个重要的更改:\linespread{1.2}
针对文档其余部分的行距(与 MWE 无关)、\def\arraystretch{1.5}
针对单元格内的垂直填充以及\setlength\tabcolsep{10pt}
针对单元格内的水平填充。
我希望单元格中的文本垂直和水平居中。如果没有上述三个命令,似乎可以实现。但是,一旦我添加这三个命令以获得更好的显示效果,它们似乎会将单元格中的文本移动到垂直中心以下。示例:
有什么方法可以保持这些间距/填充调整,但同时使单元格中的文本垂直和水平居中? 另外,为什么 MWE 代码会创建包含两页而不是一页的 PDF?
答案1
单元格内容垂直居中的两种解决方案:
- 该
makecell
包有用于单元格垂直填充的命令:\setcellgapes
定义填充的值(在前言中),并\makegapedcells
在给定的环境中使用它。 - 该
cellspace
包的工作方式不同:它定义最小单元格与上下单元格之间的垂直间距:\cellspacetoplimit
和cellspacebottomlimit
。您必须在相应的列说明符前加上字母前缀S
(或者C
如果您使用siunitx
包)。
以下是两种方式的代码:
\documentclass{book}
\usepackage[margin=2cm]{geometry}
\usepackage{rotating}
\usepackage{array, makecell}
\setcellgapes{7.5pt}
\usepackage{cellspace}
\setlength\cellspacetoplimit{7.5pt}
\setlength\cellspacebottomlimit{7.5pt}
\linespread{1.2}
\begin{document}
\pagestyle{empty}
\begin{sideways}
\bgroup
\makegapedcells
\setlength\tabcolsep{10pt}
\begin{tabular}{|*{11}{c|}}
\multicolumn{11}{l}{\texttt{With makecell: }}\\[2ex]
\hline
Column 1 & Column 2 & Column 3 & Column 4 & Column 5 & Column 6 & Column 7 & Column 8 & Column 9 & Column 10 & Column 11 \\
\hline
Row 2 & & & & & & & & & & \\
\hline
Row 3 & & & & & & & & & & \\
\hline
Row 4 & & & & & & & & & & \\
\hline
Row 5 & & & & & & & & & & \\
\hline
Row 6 & & & & & & & & & & \\
\hline
\end{tabular}
\egroup
\end{sideways}
\hskip1cm
\begin{sideways}
\bgroup
\setlength\tabcolsep{10pt}
\begin{tabular}{|*{11}{Sc|}}
\multicolumn{11}{c}{\texttt{With cellspace: }}\\[2ex]
\hline
Column 1 & Column 2 & Column 3 & Column 4 & Column 5 & Column 6 & Column 7 & Column 8 & Column 9 & Column 10 & Column 11 \\
\hline
Row 2 & & & & & & & & & & \\
\hline
Row 3 & & & & & & & & & & \\
\hline
Row 4 & & & & & & & & & & \\
\hline
Row 5 & & & & & & & & & & \\
\hline
Row 6 & & & & & & & & & & \\
\hline
\end{tabular}
\egroup
\end{sideways}
\end{document}
答案2
出现第二页是因为您的表格太大。您必须以某种方式缩小它。您的问题之前已经解决过几次。请阅读\arraystretch 和 m 列定义的垂直对齐问题,使 \addlinespace 全局适用于所有表格, 和https://tex.stackexchange.com/a/50337。
也许你最好使用tabu
或tabularx
这里。后者会让你变得\setlength\tabcolsep
没有必要。
我会做以下事情:
% arara: pdflatex
\documentclass{book}
\usepackage{showframe} % for demo
\usepackage{booktabs}
\usepackage{rotating}
\begin{document}
\begin{sidewaystable}
\footnotesize % smaller font in order to fit the table on the page
\centering
\setlength\tabcolsep{6.4pt} % this is the maximum in order to fit on the page
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{*{11}{l}}
\toprule
Column 1 & Column 2 & Column 3 & Column 4 & Column 5 & Column 6 & Column 7 & Column 8 & Column 9 & Column 10 & Column 11 \\\addlinespace[2pt]
\midrule
Row 2 & & & & & & & & & & \\
Row 3 & & & & & & & & & & \\
Row 4 & & & & & & & & & & \\
Row 5 & & & & & & & & & & \\
Row 6 & & & & & & & & & & \\\addlinespace[2pt]
\bottomrule
\end{tabular}
\end{sidewaystable}
\end{document}
解决方案tabu
可能是:
% arara: pdflatex
\documentclass{book}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{rotating}
\begin{document}
\begin{sidewaystable}
\tabulinesep = 3mm
\footnotesize % smaller font in order to fit the table on the page
\begin{tabu} to \textwidth {*{11}{X@{}}}
\toprule
Column 1 & Column 2 & Column 3 & Column 4 & Column 5 & Column 6 & Column 7 & Column 8 & Column 9 & Column 10 & Column 11 \\
\midrule
Row 2 & & & & & & & & & & \\
Row 3 & & & & & & & & & & \\
Row 4 & & & & & & & & & & \\
Row 5 & & & & & & & & & & \\
Row 6 & & & & & & & & & & \\
\bottomrule
\end{tabu}
\end{sidewaystable}
\end{document}