下面的代码
\documentclass[12pt,a4paper]{article}
\usepackage{array}
\usepackage{calc}
\begin{document}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{\textwidth * \real{0.8}}}
\hline
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\hline
Chats & bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla \\
\hline
Programming & C, Java, OCaml, Bash, Fortran. Currently learning Python and R. \\
\hline
\end{tabular*}
\end{document}
产生这个:
如果我添加
\renewcommand{\arraystretch}{4}
在表格代码之前,输出如下:
L
另外,如果我将使用该列的定义更改p
为如下方式
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
然后我得到这个:
这些都不是我想要的输出。我想每一个细胞垂直居中。为什么会发生这种情况?我该如何解决?我尝试使用不同的解决方案(例如\setlength{\extrarowheight}{4pt}
),但它们都受到同一问题的影响。
答案1
您使用的工具错误:
\documentclass[12pt,a4paper]{article}
\usepackage{tabularx,booktabs}
\setlength{\heavyrulewidth}{\lightrulewidth}
\setlength{\aboverulesep}{12pt}% choose
\setlength{\belowrulesep}{12pt}% choose
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{} r X @{}}
\toprule
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\midrule
Chats & bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla \\
\midrule
Programming & C, Java, OCaml, Bash, Fortran. Currently learning Python and R. \\
\bottomrule
\end{tabularx}
\end{document}
如果您希望标签相对于主体垂直居中(但我不会这么做),您可以将列的类型设置X
为m
:
\documentclass[12pt,a4paper]{article}
\usepackage{tabularx,booktabs,array}
\setlength{\heavyrulewidth}{\lightrulewidth}
\setlength{\aboverulesep}{12pt}% choose
\setlength{\belowrulesep}{12pt}% choose
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{} r X @{}}
\toprule
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\midrule
Chats & bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla \\
\midrule
Programming & C, Java, OCaml, Bash, Fortran. Currently learning Python and R. \\
\bottomrule
\end{tabularx}
\end{document}
答案2
m
David Carlisle 的回答解释了列类型的问题。不幸的是,使用\arraystreatch
和列类型p
不会在hline
s 和单元格内容之间提供相等的垂直空间。解决方案似乎是不使用 \arraystreatch
和以不同的方式获得所需的垂直空间,例如使用包提供的规则booktabs
:
Eddit:对于第一列文本的垂直居中,您应该添加
\renewcommand\tabularxcolumn[1]{m{#1}}
确定垂直空间埃格尔在他的回答中,MWE 是:
\documentclass{article}
\usepackage{booktabs,tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{L}{>{\raggedright\let\newline\\\arraybackslash}X}
\setlength{\aboverulesep}{2ex}% choose
\setlength{\belowrulesep}{2ex}% choose
\usepackage[active,floats,tightpage]{preview}
\setlength\PreviewBorder{2ex}
\begin{document}
\begin{table}[htb]% <-- added for preview
\begin{tabularx}{\textwidth}{rX}
\midrule
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\midrule
Chats & bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla \\
\midrule
\end{tabularx}
\end{table}
\end{document}
在上述 MWE 中,使用的是tabular
环境tabularx
。它给出的列宽与你(错误地)使用的列间距确定值相等。
答案3
列m
类型将参考点置于其内容的垂直中心,而不考虑内部基线。因此,列中文本m
与周围列中文本的任何对齐本质上都是偶然的。(如果您稍微缩小列,使文本跨越两行,那么在这种情况下它将重新对齐)
p
或b
列做将参考点设置为内部基线(分别是顶线或底线),然后p
再次进行对齐,如下所示。
\documentclass[a4paper]{article}
\addtolength\textwidth{2cm}
\usepackage{array}
\renewcommand{\arraystretch}{4}
\begin{document}
\newcolumntype{L}[1]{%
>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\centering
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{0.8\textwidth}}
\hline
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\hline
Programming & C, Java, OCaml, Bash, Fortran. Currently learning Python and R. \\
\end{tabular*}
\newcolumntype{L}[1]{%
>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\centering
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{0.8\textwidth}}
\hline
Languages & Italian (native tongue), English (very fluent), German (beginner). \\
\hline
Programming & C, Java, OCaml, Bash, Fortran. Currently learning Python and R. \\
\end{tabular*}
\end{document}