将文本在表格单元格中垂直居中对齐

将文本在表格单元格中垂直居中对齐

我是 Latex 新手。我试图制作一个表格,使单元格中的文本垂直居中。

\documentclass[12pt, a4paper]{article}
\usepackage[a4paper,
            bindingoffset=0.2in,
            left=1in,
            right=1in,
            top=1in,
            bottom=1in,
            footskip=.25in]{geometry}
            
\usepackage[table,xcdraw]{xcolor}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{mathtools}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{titling}
\usepackage{colortbl}
\usepackage{multirow}
\usepackage[breaklinks]{hyperref}
\definecolor{ballblue}{rgb}{0.13, 0.67, 0.8}
\usepackage{makecell}


\begin{document}
\definecolor{ballblue}{rgb}{0.13, 0.67, 0.8}
\begin{tabular}{|m{2cm} |m{2.5cm}|m{5cm}|}
  \hline
  \rowcolor{ballblue}\textbf{Range}&\textbf{lorem ipsum}&\textbf{lorem ipsum}    \\ [20pt]
  \textbf{lorems} &\textbf{454}  &\multirow{3}{1cm}{\parbox{5cm}{"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor"}}   \\[40pt] 
  \cline{1-2}
  \textbf{loremsas}&\textbf{456}  &   \\[40pt] 
  \cline{1-2}
  \textbf{loremsd}&\textbf{232}  &  \\ [40pt] 
  \hline
\end{tabular}
\quad
\begin{tabular}{|c|}
  \hline
  \rowcolor{ballblue}
  \textbf{lorem ipsum}  \\[20pt]
  \hline
  \rowcolor{yellow} 280-560  \\[40pt]
  \hline
  \rowcolor{magenta} \> 280\\[40pt]
  \hline
  \rowcolor{green} \> 560  \\[40pt]
  \hline
\end{tabular}
\thispagestyle{fancy}
\newpage
\end{document}

我已附上代码的输出。如能提供任何帮助,我将不胜感激。谢谢!

在此处输入图片描述

答案1

这是使用较新软件包的建议tabularray。我忽略了右侧的第二个表格,因为它似乎与您的问题无关(请随时纠正我)。

\documentclass[12pt, a4paper]{article}
\usepackage{tabularray}
\usepackage[table,xcdraw]{xcolor}

\definecolor{ballblue}{rgb}{0.13, 0.67, 0.8}

\begin{document}

\begin{tblr}{
    width=10cm,
    colspec={ccX},
    hlines,
    vlines,
    cell{2}{3}={r=3}{halign},
    row{1}={ballblue},
    cell{1}{1-3}={cmd=\textbf},
    row{2-4}={10ex}}
Range & lorem ipsum & lorem ipsum\\
lorems & 454 & "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor"\\
loremsas & 456 & \\
loremsd & 232 & \\
\end{tblr}

\end{document}

得出以下结果: 结果

请注意,有关格式化的所有内容都已移至环境选项tblr。按顺序,您有:

  • width:表格的总宽度
  • colspec={ccX}:声明 3 列,c 表示居中,X 表示可调整宽度(同时考虑总宽度)
  • hlines:绘制所有水平线
  • vlines:绘制所有垂直线
  • cell{2}{3}={r=3}{halign}:第 2 行第 3 列的单元格宽度为 3 行,并且单元格内的文本对齐
  • row{1}={ballblue}:第一行都有一个蓝色背景的球
  • cell{1}{1-3}={cmd=\textbf}:在第 1 行,单元格 1 至 3 的内容经过处理\textbf
  • row{2-4}={10ex}:第 2 至第 4 行高度为 10ex

有一件事我不喜欢,那就是最后一个选项。最好指定所有行必须具有相同的高度,而不必指定任何值,但我不知道如何做到这一点(目前)。

答案2

  • 无关:你需要清理你的序言:
    • 有些包即使使用了不同的选项也会被加载两次
    • hyperref应该最后加载
    • 由于也hyperref加载url,因此您无需再次加载
  • 随着\\[40pt]您在行后插入空格,行高也随之改变。因此,行中的文本在其高度上垂直居中,但这看起来像是位于单元格的顶部。
  • 您可以在需要的行中插入一些 40 pt 高度的支柱来增加行高。
  • 两个表合并为一个空列是合理的
\documentclass[12pt, a4paper]{article}
\usepackage[a4paper,
            bindingoffset=0.2in,
            margin=1in,
            footskip=.25in]{geometry}

\usepackage[table,xcdraw]{xcolor}
\definecolor{ballblue}{rgb}{0.13, 0.67, 0.8}
%\usepackage{graphicx}
%\usepackage{mathtools}
%\usepackage{fancyhdr}
%\usepackage{titling}
\usepackage{array, makecell, multirow}
\usepackage[breaklinks]{hyperref}

\begin{document}
    \begin{table}[ht]
    \small
    \begin{tabular}{|c|c|p{5cm}| c |p{2.5cm}|}
    \cline{1-3}\cline{5-5}
  \rowcolor{ballblue}
\textbf{Range}       
            & \textbf{lorem ipsum}   
                    &   \textbf{lorem ipsum} 
                        & \cellcolor{white}{} 
                            &   \textbf{lorem ipsum}    \rule[-10pt]{0pt}{25pt} \\

\textbf{lorems}
    & \textbf{454}  
        &   \multirow{3}{=}[4ex]{
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor"}
            &   &   \cellcolor{yellow}{280-560} \rule[-20pt]{0pt}{50pt} \\
    \cline{1-2}\cline{5-5}
\textbf{loremsas}
    & \textbf{456}  
        &   &   &   \cellcolor{magenta}{280}    \rule[-20pt]{0pt}{50pt} \\
    \cline{1-2}\cline{5-5}
\textbf{loremsd}     
    & \textbf{232}   
        &   &   & \cellcolor{green}{560}        \rule[-20pt]{0pt}{50pt} \\
    \cline{1-3}\cline{5-5}
\end{tabular}
    \end{table}
\end{document}

在此处输入图片描述

但是,使用包编写的这个表格要简单得多\tabularray,类似于@Miyase 回答所建议的(+1):

\documentclass[12pt, a4paper]{article}
\usepackage[a4paper,
            bindingoffset=0.2in,
            margin=1in,
            footskip=.25in]{geometry}

\usepackage[table,xcdraw]{xcolor}
\definecolor{ballblue}{rgb}{0.13, 0.67, 0.8}
\usepackage{tabularray}
\NewTableCommand\SCC[1]{\SetCell{bg=#1}}

\begin{document}
    \begin{table}[ht]
    \centering
\begin{tblr}{hline{1-Z}={1-3,5-5}{solid},
             vlines,
             cell{1}{1-3,5} = {font=\bfseries, bg= ballblue},
             colspec = {*{2}{Q[l, m, wd=20mm, font=\bfseries]}
                             Q[j, wd=50mm]
                             Q[c]                             Q[c, m, wd=20mm]},
             vspan=even
             }
Range   
    &   lorem ipsum  
        &   lorem ipsum
            &   &   lorem ipsum     \\
lorems
    & \textbf{454}  
        &\SetCell[r=3]{j}
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor"
            &   &\SCC{yellow}   280-560         \\
loremsas
    & 456
        &   &   &\SCC{magenta}  280             \\
loremsd
    &232
        &   &   &\SCC{green}    560             \\
\end{tblr}
    \end{table}
\end{document}

在此处输入图片描述

相关内容