居中表格中的标题位置

居中表格中的标题位置

我希望将表格置于中央并且标题从表格的开始位置开始(参见所附屏幕截图中的红线)。

梅威瑟:

\documentclass[12pt,a4paper]{article}
\usepackage{float}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{table}[H]\centering
\caption{Q\&A} \label{tab:mzdcq19}
\begin{tabular*}{.8\linewidth}{ll}
Question&Answer\\\hline
1+1
&2\\
1+2
&3\\
\end{tabular*}
\end{table} 
\lipsum[1]
\end{document}

在此处输入图片描述

答案1

为了实现列之间所需的分隔,需要@{\extracolsep{\fill}}在两列之间插入一条指令。

相反,如果你这样做不是需要表格占据的宽度,0.8\textwidth并且可以使用自然列宽,则不应该使用环境tabular*>tabular而是使用环境。

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{float}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{table}[H]
\centering
\caption{OP's original form}
\begin{tabular*}{.8\linewidth}{ll}
Question&Answer\\\hline
1+1
&2\\
1+2
&3\\
\end{tabular*}

\vspace{5mm}
\caption{With \texttt{@\{\string\extracolsep\{\string\fill\}\}}}
\begin{tabular*}{.8\linewidth}{l@{\extracolsep{\fill}}l}
Question&Answer\\
\hline
1+1
&2\\
1+2
&3\\
\end{tabular*}

\vspace{5mm}
\caption{With \texttt{tabular} instead of \texttt{tabular*}}

\smallskip
\begin{tabular}{ll}
Question&Answer\\
\hline
1+1
&2\\
1+2
&3\\
\end{tabular}
\end{table} 
\lipsum[1]
\end{document}

针对原始发帖人的后续评论的附录

事实证明,我最初的回答未能解决 OP 的目标。(这种失败可能是因为我被我认为@{\extracolsep{\fill}}在某种tabular*情况下不寻常且无法解释的指令缺失所困扰……)

虽然它可能的去利用threeparttable环境来实现 OP 的目标,我认为这样做有点矫枉过正,因为主要能力该包的\tnote宏和tablenotes环境永远不会被使用。作为替代方案,为了避免不寻常的使用tabular*,我建议 (a) 使用tabularx环境,(b) 将标题和tabularx环境嵌入minipage宽度为 的中0.8\linewidth,以及 (c) 使用包的功能caption在 内左对齐标题minipage

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{lipsum} % for filler text
\usepackage{tabularx,caption}
\begin{document}
\lipsum[1]
\begin{table}[ht!]
\captionsetup{singlelinecheck=false,skip=0.333\baselineskip}
\centering
\begin{minipage}{0.8\linewidth}
\caption{Q\&A} \label{tab:mzdcq19}
\begin{tabularx}{\textwidth}{@{}lX} % use 'X' for the 2nd column
   Question&Answer\\ \hline
   1+1 &2 \\
   1+2 &3 \\
\end{tabularx}
\end{minipage}
\end{table} 
\lipsum[1]
\end{document}

答案2

您可以使用 和 来实现这一点captionthreeparttable使用 键singlelinecheck=false会生成一个从当前行开头开始的标题,就像一个普通段落;threeparttable测量表格宽度,因此当前行与此宽度相对应。此外,如果您愿意,使用 键margin=\tabcolsep,标题将从表格内容开始的位置开始:

\documentclass[12pt,a4paper]{article}
\usepackage{float, caption, threeparttable}
\usepackage{lipsum}

\begin{document}

\lipsum[11]
\begin{table}[H]
\centering
\begin{threeparttable}
\captionsetup{singlelinecheck=false, skip = 4pt}
\caption{Q\&A} \label{tab:mzdcq19}
\begin{tabular*}{.8\linewidth}{ll}
Question&Answer\\\hline
1+1
&2\\
1+2
&3\\
\end{tabular*}
\end{threeparttable}
\end{table}
\lipsum[11]
\begin{table}[H]
\centering
\begin{threeparttable}
\captionsetup{singlelinecheck=false, skip=4pt, margin=\tabcolsep}
\caption{Q\&A} \label{tab:mzdcq19}
\begin{tabular*}{.8\linewidth}{ll}
Question&Answer\\\hline
1+1
&2\\
1+2
&3\\
\end{tabular*}
\end{threeparttable}
\end{table}

\end{document} 

在此处输入图片描述

相关内容