在 tabularx 中垂直居中,具有多种字体大小和 arraystretch

在 tabularx 中垂直居中,具有多种字体大小和 arraystretch

我想找到一种方法来制作具有彩色背景的框,该框占用整个可用宽度,具有可变的文本大小和可变的数组拉伸。

目前,我发现的最佳解决方案是使用 tabularx,但根据文本大小和 arraystretch 因子的组合,文本通常不会垂直对齐。

下面是具有 3 个文本大小和 2 个 arraystretch 因子的示例:

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{tabularx}


\begin{document}

\setlength{\arrayrulewidth}{0pt} \renewcommand{\tabularxcolumn}[1]{>{\centering\arraybackslash}m{#1}}

\section{Arraystretch == 1}

        \renewcommand{\arraystretch}{1}
        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{normalsize}Title\end{normalsize}  \end{tabularx} 

        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{Large}Title\end{Large}  \end{tabularx} 

        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{Huge}Title\end{Huge}  \end{tabularx} 

\section{Arraystretch == 1.5}

        \renewcommand{\arraystretch}{1.5}
        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{normalsize}Title\end{normalsize}  \end{tabularx} 

        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{Large}Title\end{Large}  \end{tabularx} 

        \begin{tabularx}{\linewidth}{X} \rowcolor{lightgray}  \begin{Huge}Title\end{Huge}  \end{tabularx} 

\end{document}

在此示例中,前 3 个 tabularx 未垂直对齐,文本触及顶部。将 arraystretch 因子设置为 1.5 后,根据字体的大小,文本将对齐或触及顶部。

我想要一个解决方案,无论字体大小和数组拉伸因子如何,始终使文本垂直居中。

答案1

对齐失败(您会收到箱子满箱警告),因为您已经进行了段落三个表格,它们以段落缩进开头,但节标题之后除外。放在\noindent它们之前。或者使用诸如 的声明\centering来避免段落缩进。您可以使用\extrarowheight来避免大写字母接触行的顶部。


也不要做这样的字体更改

 \begin{Huge}Title\end{Huge} 

如果您更改字体,则必须始终确保段落末尾、框末尾或表格单元格末尾在字体更改范围内。否则,您会在通常情况下间隔行。只需使用

 \Huge Title

您不需要任何额外的环境或括号组,因为在任何情况下字体更改都仅限于表格单元格。

答案2

每个表格都以新段落开始,每个表格都应用默认缩进,将表格推到右侧。但是您要求\linewidth表格,这会侵占右边距。

您必须取消缩进,可以\noindent在每个表格声明前添加,也可以通过以下方式更改段落缩进:

\setlength\parindent{0pt}

位于文档开头的某处。

相关内容