使用 Tabularx 的多行和多列的居中和换行问题

使用 Tabularx 的多行和多列的居中和换行问题

作为一个新手,我在设置此表中的多行/多列时遇到了一些麻烦。我试图让所有单元格的文本居中并自动换行,但是我无法让这些功能在多行单元格中工作。如您所见,多行中的文本目前已正确居中,但我实现此目的的方式似乎相当“笨拙”。\centering此行中应使用正确的解决方案吗?还是有更优雅的解决方案(例如使用列类型的等效项)?

接下来是多列问题。x 和 y 应该等距,并且垂直线应位于它们各自的侧面。我尝试了几种使用不同列类型来实现此目的的方法,但结果要么是字母间距不正确,要么是字母间距正确但垂直线位置不正确(例如使用\multicolumn{3}{c|}{\hfill x \hfill y } \hfill)。

如果可能的话,我想大致保留行的当前间距。另外,我不明白为什么如果我将第一行设置为C{.3\textwidth}整个表格,它不会达到文本宽度的 100%,而是超出右边距。我目前只使用 Y 列类型,因为它使表格的垂直边框适合...

\documentclass[12pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}


\usepackage{geometry}
\geometry{a4paper,left=25mm,right=25mm}


\usepackage{tabularx}
\usepackage{multirow}


\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}

\begin{document}

\noindent
\begin{tabularx}{\textwidth}{ | Y | C{.25\textwidth} | C{.15\textwidth} | C{.15\textwidth} | C{.15\textwidth} | }
\hline
Some centered text here & A bunch of words too long for one line & A bunch of words too long for one line & A bunch of words too long for one line & A bunch of words too long for one line \\
\hline
\multirow{2}{\hsize}{\centering this should be centered} & a line of words & a & b & c \\ 
\cline{2-5}
 & a line of words & a & b & c \\
\hline
\hline
a line of words & a line of words & \multicolumn{3}{l|}{\hfill x \hfill y \hfill} \\
\hline
\end{tabularx}
\end{document}

答案1

对于多行问题,您可以重新定义\multirowsetup\raggedright默认情况下是。对于多列问题,我提出了一个解决方案,但我不确定我是否完全理解了你想要什么。

    \documentclass[12pt]{article}

    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}

    \usepackage{geometry}
    \geometry{a4paper,left=25mm,right=25mm, showframe}
    \usepackage{tabularx}
    \usepackage{multirow}

    \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
    \newcolumntype{Y}{>{\centering\arraybackslash}X}

    \begin{document}

   {\centering\setlength{\extrarowheight}{2pt}\small
    \renewcommand{\multirowsetup}{\centering}
    \begin{tabularx}{\textwidth}{ | Y | C{.25\textwidth} | C{.15\textwidth} | C{.15\textwidth} | C{.15\textwidth} | }
    \hline
    Some centered text here & A bunch of words too long for one line & A bunch of words too long for one line & A bunch of words too long for one line & A bunch of words too long for one line \\
    \hline
    \multirow{2}{=}{ this text is centered} & a line of words & a & b & c \\
    \cline{2-5}
     & a line of words & a & b & c \\
    \hline
    \hline
    a line of words & a line of words & \multicolumn{1}{c}{} & \multicolumn{1}{!{\makebox[0pt]{x}}c!{\makebox[0pt]{y}}}{} & \\
    \hline
    \end{tabularx}}
    \end{document} 

在此处输入图片描述

相关内容