使用修改后的 arraystretch 垂直对齐表格单元格中的文本

使用修改后的 arraystretch 垂直对齐表格单元格中的文本

我创建了简单的表格,其中除第一行和第一列之外的所有单元格都是空白的。

\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包的工作方式不同:它定义最小单元格与上下单元格之间的垂直间距:\cellspacetoplimitcellspacebottomlimit。您必须在相应的列说明符前加上字母前缀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

也许你最好使用tabutabularx这里。后者会让你变得\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}

相关内容