![多行封装的中心对齐](https://linux22.com/image/336341/%E5%A4%9A%E8%A1%8C%E5%B0%81%E8%A3%85%E7%9A%84%E4%B8%AD%E5%BF%83%E5%AF%B9%E9%BD%90.png)
我有一个多行环境,但它没有在中心环境中居中对齐。可能是什么问题?
\documentclass[12pt]{article}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{center}
\begin{table}[ht]
\caption{Virtual Machine Byte Code}\label{tab:vm}
\begin{tabular}{lll}
\toprule
{\bf Group} & {\bf Name} & {\bf Parameters} \\
\midrule\midrule[.1em]
\multirow{4}{2.5cm}{Stack}
& {\tt push}
& {\tt store} \\
\cmidrule(lr){2-3}
& {\tt pop}
& {\tt success} \\
\cmidrule(lr){2-3}
& {\tt load}
& {\tt success} \\
\cmidrule(lr){2-3}
& {\tt save}
& {\tt success} \\
\midrule[.1em]
\multirow{4}{2.5cm}{Stack}
& {\tt push}
& {\tt store} \\
\cmidrule(lr){2-3}
& {\tt pop}
& {\tt success} \\
\cmidrule(lr){2-3}
& {\tt load}
& {\tt success} \\
\cmidrule(lr){2-3}
& {\tt save}
& {\tt success} \\
\bottomrule
\end{tabular}
\end{table}
\end{center}
\end{document}
答案1
一些建议:
改成
\multirow{4}{2.5cm}{Stack}
\multirow{5}{2.5cm}{Stack}
将所有
\cmidrule
指令替换为\addlinespace
\midrule
在标题行后使用单个0.1em
对所有\toprule
、\midrule
和\bottomrule
语句使用通用的线宽(例如)。在表格环境的设置中提供更多结构,这样您不必
\tt
在表主体中输入所有这些指令。不要将
table
环境包含在center
环境中。相反,在 之后使用单个\centering
语句\begin{table}
。可选:不要使用大胆的对于标题行中的单词:它们位于表格顶部,已经足够突出了。:-)
\documentclass[12pt]{article}
\usepackage{booktabs,multirow,array,caption}
\begin{document}
\begin{table}[ht]
\centering
\caption{Virtual Machine Byte Code}\label{tab:vm}
\begin{tabular}{@{} p{2.5cm} *{2}{>{\ttfamily}l} @{}}
\toprule[.1em]
Group & \normalfont Name & \normalfont Parameters \\
\midrule[.1em]
\multirow{5}{*}{Stack} & push & store \\
\addlinespace
& pop & success \\
\addlinespace
& load& success \\
\addlinespace
& save& success \\
\midrule[.1em]
\multirow{5}{*}{Stack}
& push & store \\
\addlinespace
& pop & success \\
\addlinespace
& load & success \\
\addlinespace
& save & success \\
\bottomrule[.1em]
\end{tabular}
\end{table}
\end{document}
答案2
对于垂直定位遵循 Mico 注释,但是你在表格中使用 TeX 而不是 LaTeX 的命令,更好更简单的代码是:
\documentclass[12pt]{article}
\usepackage{booktabs,makecell,multirow}
\renewcommand\theadfont{\normalfont\bfseries}
\begin{document}
\begin{table}[ht]
\centering
\caption{Virtual Machine Byte Code}\label{tab:vm}
\begin{tabular}{p{25mm} >{\ttfamily}l >{\ttfamily}l}
\toprule
\thead{Group} & \thead{Name} & \thead{Parameters} \\
\midrule\midrule[.1em]
\multirow{5}*{Stack}
& push
& store \\
\cmidrule(lr){2-3}
& pop
& success \\
\cmidrule(lr){2-3}
& load
& success \\
\cmidrule(lr){2-3}
& save
& success \\
\midrule[.1em]
\multirow{5}*{Stack}
& push
& store \\
\cmidrule(lr){2-3}
& pop
& success \\
\cmidrule(lr){2-3}
& load
& success \\
\cmidrule(lr){2-3}
& save
& success \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
如您所见,我添加了makecell
使用宏格式化列标题的包\thead{...}
。结果是:
答案3
您可以\multirow
使用精确的方式将标识符移动到位\raisebox
:
\documentclass{article}
\usepackage{booktabs,array}
\begin{document}
\begin{tabular}{ l >{\ttfamily}l >{\ttfamily}l }
\toprule
\bfseries Group & \rmfamily\bfseries Name & \rmfamily\bfseries Parameters \\
\midrule\midrule[.1em]
& push
& store \\
\cmidrule(lr){2-3}
\raisebox{\dimexpr-.5\normalbaselineskip-.5\cmidrulewidth-.5\aboverulesep}[0pt][0pt]{Stack}
& pop
& success \\
\cmidrule(lr){2-3}
& load
& success \\
\cmidrule(lr){2-3}
& save
& success \\
\midrule[.1em]
& push
& store \\
\cmidrule(lr){2-3}
\raisebox{\dimexpr-.5\normalbaselineskip-.5\cmidrulewidth-.5\aboverulesep}[0pt][0pt]{Stack}
& pop
& success \\
\cmidrule(lr){2-3}
& load
& success \\
\cmidrule(lr){2-3}
& save
& success \\
\bottomrule
\end{tabular}
\end{document}
我还使用\bfseries
和一些简化了您的输入array
通过>{\ttfamily}
在最后两列之前进行插入。
答案4
一些改进:
加载以使标题和表格之间有适当的间距(当标题位于浮动上方时, LaTeX 不会交换和caption
的值)。不要使用带有浮动的环境,因为它会增加不必要的垂直间距。请改用,\abovecaptionskip
\belowcaptionskip
center
\centering
里面表格环境。不要使用\bf
、\tt
等,而是\bfseries
或\textbf
或\ttfamily
。\texttt
我添加了一个小的修正,\multirow
以使内容垂直居中。
\documentclass[12pt]{article}
\usepackage{caption} \usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{table}[ht]
\centering
\caption{Virtual Machine Byte Code}\label{tab:vm}
\begin{tabular}{lll}
\toprule
\textbf{Group} & \textbf{Name} & \textbf{Parameters} \\
\midrule\midrule[.1em]
\multirow{4}{2.5cm}[-1.5ex]{\centering Stack}
& \texttt{push}
& \texttt{store} \\
\cmidrule(lr){2-3}
& \texttt{pop}
& \texttt{success} \\
\cmidrule(lr){2-3}
& \texttt{load}
& \texttt{success} \\
\cmidrule(lr){2-3}
& \texttt{save}
& \texttt{success} \\
\midrule[.1em]
\multirow{4}{2.5cm}[-1.5ex]{\centering Stack}
& \texttt{push}
& \texttt{store} \\
\cmidrule(lr){2-3}
& \texttt{pop}
& \texttt{success} \\
\cmidrule(lr){2-3}
& \texttt{load}
& \texttt{success} \\
\cmidrule(lr){2-3}
& \texttt{save}
& \texttt{success} \\
\bottomrule
\end{tabular}
\end{table}
\end{document}