多行封装的中心对齐

多行封装的中心对齐

我有一个多行环境,但它没有在中心环境中居中对齐。可能是什么问题?

在此处输入图片描述

\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\belowcaptionskipcenter\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} 

在此处输入图片描述

相关内容