tabularx 中的文本垂直居中

tabularx 中的文本垂直居中

这个问题已经有很多答案了,但似乎没有人能解决我的情况。我的表格用以下代码编写,如下所示:

\documentclass[a4paper,9pt]{extarticle}
\usepackage[a4paper,left=2.4cm,right=1.4cm,top=1.4cm,bottom=1.4cm,footskip=0cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[table]{xcolor}
\usepackage{xcolor}
  \definecolor{row_even}{cmyk}{0, 0, 0, 0.12} % define color
  \definecolor{row_uneven}{cmyk}{0, 0, 0, 0.24} % define color
\usepackage{helvet} % Helvetica font
  \renewcommand{\familydefault}{\sfdefault}
\usepackage{fancyhdr} % page numbering
\renewcommand{\headrulewidth}{0pt} % remove top line
\usepackage{colortbl}
\usepackage{float} % define table lines
  \makeatletter
  \newcommand{\thickhline}{\noalign {\hrule height 2pt}}
  \newcolumntype{'}{!{\color{white}\vrule width 2pt}}
  \newcolumntype{+}{!{\vrule width 0.2em}}
  \makeatother
\usepackage{tabularx}
  \newcolumntype{L}[1]{>{\hsize=#1\hsize\raggedright\arraybackslash}X}%
  \newcolumntype{R}[1]{>{\hsize=#1\hsize\raggedleft\arraybackslash}X}%
  \newcolumntype{C}[2]{>{\hsize=#1\hsize\columncolor{#2}\centering\arraybackslash}X}
  \newcolumntype{S}{>{\hsize=0pt}X}
\usepackage{array}
\usepackage{ctable} % different line thickness
\usepackage{multirow} % cell over multiple rows in table

\begin{document}
\renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
\begin{center}
\rowcolors{1}{row_uneven}{row_even}
  \begin{tabularx}{\textwidth}{ + L{0.7} ' C{0.15}{row_uneven} ' C{0.15}{row_uneven} + }
  \specialrule{.05em}{1em}{0em} 
  Swahili & yes & no \\[0.3cm]
  Swedish &  &  \\[0.3cm]
  Dutch &  &  \\[0.3cm]
  English &  &  \\[0.3cm]
  German  &  &  \\[0.3cm]
  \specialrule{.2em}{.0em}{.0em}
  \multicolumn{3}{+ l +}{\textbf{further languages:}} \\[0.8cm]
  \specialrule{.2em}{.0em}{.0em}
  \end{tabularx}
\end{center}
\end{document}

在此处输入图片描述

您可以看到前两列垂直居中,但第三列不是。此外,\multicolumn 命令中的文本未居中。我知道我可以通过仅使用宽度为零的第四列来解决第三列的问题。但我尝试过这种方法,但没有成功,因为行是彩色的。我是否可以定义自己的列类型,以便我必须使用\begin{tabularx}{\linewidth}{ + X ' X ' X + }?但我该怎么做呢?

答案1

如果最后一列使用了列类型,则会出现错误m。解决方法是使用另一个虚拟列作为最后一列,例如

@{\kern-\tabcolsep}L{0}@{\kern2\tabcolsep} +

\begin{tabularx}{\textwidth}{ + L{0.7} ' C{0.15}{row_uneven} ' C{0.15}
                        {row_uneven}@{\kern-\tabcolsep}L{0}@{\kern2\tabcolsep} + }

您必须&在所有行中添加一个额外内容。

\documentclass[a4paper,9pt]{extarticle}
\usepackage[a4paper,left=2.4cm,right=1.4cm,top=1.4cm,bottom=1.4cm,footskip=0cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[table]{xcolor}
\usepackage{xcolor}
  \definecolor{row_even}{cmyk}{0, 0, 0, 0.12} % define color
  \definecolor{row_uneven}{cmyk}{0, 0, 0, 0.24} % define color
\usepackage{helvet} % Helvetica font
  \renewcommand{\familydefault}{\sfdefault}
\usepackage{fancyhdr} % page numbering
\renewcommand{\headrulewidth}{0pt} % remove top line
\usepackage{colortbl}
\usepackage{float} % define table lines
  \makeatletter
  \newcommand{\thickhline}{\noalign {\hrule height 2pt}}
  \newcolumntype{'}{!{\color{white}\vrule width 2pt}}
  \newcolumntype{+}{!{\vrule width 0.2em}}
  \makeatother
\usepackage{tabularx}
  \newcolumntype{L}[1]{>{\hsize=#1\hsize\raggedright\arraybackslash}X}%
  \newcolumntype{R}[1]{>{\hsize=#1\hsize\raggedleft\arraybackslash}X}%
  \newcolumntype{C}[2]{>{\hsize=#1\hsize\columncolor{#2}\centering\arraybackslash}X}
  \newcolumntype{S}{>{\hsize=0pt}X}
\usepackage{array}
\usepackage{ctable} % different line thickness
\usepackage{multirow} % cell over multiple rows in table

\begin{document}
\renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
\begin{center}
\rowcolors{1}{row_uneven}{row_even}
  \begin{tabularx}{\textwidth}{ + L{0.7} ' C{0.15}{row_uneven} ' C{0.15}{row_uneven}@{\kern-\tabcolsep}L{0}@{\kern2\tabcolsep} + }
  \specialrule{.05em}{1em}{0em}
  Swahili & yes & no &  \\[0.3cm]
  Swedish &  & & \\[0.3cm]
  Dutch &  & & \\[0.3cm]
  English &  & & \\[0.3cm]
  German  &  & & \\[0.3cm]
  \specialrule{.2em}{.0em}{.0em}
  \multicolumn{4}{+ l +}{\textbf{further languages:}} \\[0.8cm]
  \specialrule{.2em}{.0em}{.0em}
  \end{tabularx}
\end{center}
\end{document}

在此处输入图片描述

相关内容