如何使特定列中的文本(水平和垂直)居中对齐?

如何使特定列中的文本(水平和垂直)居中对齐?

如何使前三列垂直居中,使得这些列中的所有值都位于中心?

\begin{center}
\begin{tabular}{|c| c |c| p{5cm}|}
\hline

\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline

Monday & 11C & 22C & A clear day with lots of sunshine. 
However, the strong breeze will bring down the temperatures \\ \hline 

Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. 
Clear spells across most of Scotland and Northern Ireland, but rain 
reaching the far northwest \\ \hline

Wednesday & 10C & 21C & Rain will still linger for the morning. 
Conditions will improve by early afternoon and continue throughout the evening.                        \\ \hline

\end{tabular}
\end{center}

在此处输入图片描述

它看起来应该是这样的:

在此处输入图片描述

编辑:

以下是我根据评论中粘贴的问题尝试的方法:

\begin{center}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{tabularx}{|m{1in}|c|c| p{5cm}|}
\hline

\rowcolor[gray]{.8}Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\ \hline

Monday                     & 11C                             & 22C                             & A clear day with lots of sunshine. However, the strong breeze will bring down the temperatures                                                 \\ \hline
Tuesday                    & 9C                              & 19C                             & Cloudy with rain, across many northern regions. Clear spells across most of Scotland and Northern Ireland, but rain reaching the far northwest \\ \hline
Wednesday                  & 10C                             & 21C                             & Rain will still linger for the morning. Conditions will improve by early afternoon and continue throughout the evening.                        \\ \hline
\end{tabularx}
\end{center}

它仍然不起作用。

答案1

欢迎来到 TeX.SE!

请考虑下次发布完整的 MWE。我在答案中添加了一些缺失的部分,但忽略了标题行中的灰色背景颜色。将此视为你的家庭作业 ;-)

LaTeX 基本上可以识别两种类型的列。一种是 LaTeX 自己计算列的宽度。字母lcr代表这种类型的列。每当作者向列中添加文本时,列的宽度就会“增加”。

另一方面,我们确实有列类型,其中作者定义了宽度。此列类型的标识符例如为p{<width>}。您已将其用于最后一列并p{5cm}在 MWE 中定义。此列应为 5 厘米宽。如果作者(即您!)添加更多文本,宽度超过 5 厘米,LaTeX 会中断文本并开始新行。结果列将格式化为两端对齐的文本,如您在示例中所见。

为了获得你想要的结果,你所要做的就是

  1. 加载array
  2. 使用m{<width>}列类型代替cp{<width>}

当然,这只是事实的一半。

array包为您提供mb列类型。它们的作用类似于p列,因为用户必须定义​​其宽度。然后 LaTeX 将换行并生成对齐的文本。这些列类型之间的区别在于垂直对齐。经验法则是:

  • p对齐于
  • m对齐于中间和
  • b对齐于奥托姆。

(请阅读数组手册,以了解确切的行为!)

因此,按照您的要求,使用m表中的某种类型的列将使所有行垂直居中对齐。

但我们还必须解决水平对齐问题。m列的行为与我们刚刚替换的列相同p。在最后一列中,这种行为是可以的。但在前几列中,我们希望文本也水平居中。

这是该包提供的下一个技巧array。您可以使用>{cmd}。将 可视>化为一个箭头,它将花括号内的 推cmd到旁边的列。如果您在表格中定义类似

\begin{tabular}{ l >{\raggedright}p{5cm} l }

您将p在两个常见l列之间获得一个宽度为 5 厘米的列,作为该表的第一列和最后一列。

但是每次您进入第二列时,都会>{\raggedright}将命令推\raggedright送到该m列。此命令将更改第二列的对齐方式,使其左侧齐平,右侧参差不齐。

除了上述定义,您还可以输入

\begin{tabular}{l p{5cm} l}
first cell & \raggedright lots of text in the second cell, which is flush left & third cell \\
next line, first cell & \raggedright again lots of text ... & third cell \\
new line first cell & \raggedright ... & ... \\
once again & \raggedright ... & end \\
\end{tabular}

\raggedright但在这种情况下,每次进入第二列时,您都必须输入命令,这可能会很快变得烦人。您不必每次进入该列时都输入命令,>{\raggedright}前一个定义中的技巧将自动为您执行此操作。这听起来很有希望。

为了获得真正干净的 LaTeX 代码,您应该添加\arraybackslash\hspace{0pt}上述示例。但是这个可怕的字符串会使您的输入代码无法读取。因此,我介绍下一个技巧。

array软件包还提供了\newcolumntype命令。您应该在文档的序言中(即之前\begin{document})使用它。只需选择一个字母作为新的列类型即可。您要求的是居中的列类型。因此我建议使用字母“C”,它之前没有定义过。

所以最简单的解决方案是

\newcolumntype{C}{>{\raggedright\arraybackslash\hspace{0pt}}m{5cm}}

并用这种全新的、闪亮的列类型替换所有列定义(c和) 。p{5cm}C

\begin{tabular}{|C|C|C|C|}

有时,这样一个简单的解决方案会有一些重大缺陷。在您的特定情况下,表格中的每一列现在都是 5 厘米宽。我想,这不是您想要的,对吧?前三列不需要 5 厘米宽。我们如何解决这个问题?

这是我的下一个增强功能。在第一行中,最宽的条目似乎是单词“wednesday”。因此,让 LaTeX 确定其宽度并将其用作第一列的宽度。为此,您可以使用命令\settowidth来测量单词的宽度。但我们还必须更改新的列定义C。我们必须以更灵活的方式定义它。通过仔细检查,应该意识到,C列应该具有可变的宽度,就像p{<width>}has 一样。p列有一对括号。所以让我们将它添加到我们的C列中。

\newcolumntype{C}[1]{>{\raggedright\arraybackslash\hspace{0pt}}m{#1}}

发现区别了吗?我[1]在定义的开头添加了。这意味着,该C列必须有一对括号。该对括号中给出的值在#1我的定义末尾用 表示。这为我们提供了所需的灵活性。

完整的 MWE 现在如下所示:

\documentclass{article}
\usepackage{array}                  % better control for tabular

%% Define the length of the longest day name
\newlength{\daylength}
\settowidth{\daylength}{Wednesday}

%% Create a new columntype, where the text is vertically and
%% horizontally centered.  The new identifier should be "C".
\newcolumntype{C}[1]{%
  >{\centering\arraybackslash\hspace{0pt}}m{#1}}


\begin{document}
\begin{center}
   \begin{tabular}{|C{\daylength}| C{2cm} | C{2cm} | m{5cm} |}
    \hline
    Day & Min Temp & Max Temp & \multicolumn{1}{c|}{ Summary} \\
    \hline
    Monday & 11C & 22C & A clear day with lots of sunshine. 
    However, the strong breeze will bring down the temperatures \\ 
    \hline 
    Tuesday & 9C & 19C & Cloudy with rain, across many northern regions. 
    Clear spells across most of Scotland and Northern Ireland, but rain 
    reaching the far northwest \\ 
    \hline
    Wednesday & 10C & 21C & Rain will still linger for the morning. 
    Conditions will improve by early afternoon and continue throughout the evening. \\ 
    \hline
  \end{tabular}
\end{center}
\end{document}

并产生以下输出

在此处输入图片描述

就我个人而言,我还会定义一种新R类型的列,以便于实现左对齐列,因为这些小列在对齐时看起来不太好看。我会把它添加到你的作业堆里。:-)


编辑

\arraybackslash再次使您能够使用 来\\结束表格线并开始新行。 \hspace{0pt}使 LaTeX 能够从第一个单词开始断行,这在非常小的列中很重要。

相关内容