如何创建带有文本“raggedright/centered/raggedleft”的固定宽度表格列?

如何创建带有文本“raggedright/centered/raggedleft”的固定宽度表格列?

我想创建一个表格,其中指定了一些列的宽度,而这些列中的文本应该水平和垂直居中。我发现

\usepackage{array}
\begin{tabular}{| c | c | m{5cm} |}

将文本垂直居中于最后一列,但水平对齐(如同普通段落中的文本)。

更新:使用 Jake 的方法,似乎\\\hline导致错误。如何修复?

答案1

全面的解决方案(基于这个答案)是定义新的列类型(例如,L,C 和 R),以其宽度作为参数并执行以下操作:

  • 发出\raggedright\centering\raggedleft以实现所需的水平对齐,

  • 声明\let\newline\\允许\newline在单元格内使用手动换行符(请注意,\centering& 朋友改变了含义\\- 这是 Jake 的解决方案的问题),

  • 发出\arraybackslash(即\let\\\tabularnewline)以允许(再次)用于\\结束行,

  • \hspace{0pt}允许单元格中的第一个单词用连字符连接的问题。

在下面的例子中,新的列类型基于(垂直居中)m 列,但也可以使用(顶部或底部对齐)p 列或 b 列。

\documentclass{article}

\usepackage{array}
\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}}

\begin{document}

\begin{tabular}{| c | L{3cm} | C{3cm} | R{3cm} |}
foo &
A cell with text that wraps around, is raggedright and allows \newline
    manual line breaks &
A cell with text that wraps around, is centered and allows \newline
    manual line breaks &
A cell with text that wraps around, is raggedleft and allows \newline
    manual line breaks \\
\end{tabular}

\end{document}

在此处输入图片描述

答案2

'm' 列类型仅使文本垂直居中;要使其水平居中,可以使用以下语法>{cmd},该语法在指定列中的每个单元格前添加一个命令:

\documentclass{article}
\usepackage{array}
\begin{document}
\begin{tabular}{| c | c | >{\centering}m{5cm} |}
Abc & Bcd & A long cell with text that wraps around and is centered
\end{tabular}
\end{document}

带有水平和垂直居中的列的表格

正如 Stefan Kottwitz 在他的评论中指出的那样,这也可以包装在一个新的列类型中,你可以使用它来定义

\newcolumntype{C}[1]{>{\centering}m{#1}}

然后你可以使用以下方式定义上表

begin{tabular}{| c | c | C{5cm} |}

答案3

tblr在新的 LaTeX3 包环境下,可以很容易地同时指定表格单元格的水平和垂直对齐方式tabularray

\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{|Q[l,t,3cm]|Q[c,m,3cm]|Q[r,b,3cm]|}
\hline
 {Top Baseline \\ Left Left} & Middle Center & {Right Right \\ Bottom Baseline} \\
\hline
\end{tblr}
\end{document}

在此处输入图片描述

您甚至可以删除列的宽度设置以使用自然宽度。

答案4

我发现了一种非常不同但同样有效的技术:

使用该包,您可以在环境之外ragged2e发出命令,并在表格环境的 p 或 m 列内进行操作。\RaggedRighttabular

以下是一个示例文档:

\documentclass{article}
\usepackage{array}
\usepackage{ragged2e}
\begin{document}
{\RaggedRight
    \begin{tabular}{| c | m{3cm}}
    foo &
A cell with text that wraps around, is raggedright and allows \newline
manual line breaks \\ 
\end{tabular}
}% end of \RaggedRight
\end{document}

使用 <code>ragged2e</code> 创建的示例

相关内容