我有一个跨两列文档的表格。问题是表格没有按照我的\centering
命令居中对齐。此外,表格不适合使用 10pt 字体的文档。
如何解决这些问题?
\documentclass[10pt, twocolumn]{article}
\usepackage{lipsum}
\usepackage{tabularx, multirow, booktabs}
\begin{document}
\lipsum
{\centering
\begin{table*}[!hbt]
\caption{hello core APIs}\label{tab:apis}
{\small\centering
\begin{tabular}{llll}
\toprule
{\bf API group} & {\bf Name} & {\bf Parameters} & {\bf output} \\
\midrule\midrule[.1em]
\multirow{2}{3.5cm}{Creation}
& {\tt createFBFSummary}
& {\tt summary}, {\tt tableWidth}%, {\tt schema} (optional)
& FBF summary \\
\cmidrule(lr){2-4}
& {\tt createLabeledSummary}
& {\tt summary}
& Labeled summary \\
\midrule[.1em]
\multirow{2}{3.5cm}{Query}
& {\tt query}
& {\tt summary}, {\tt label}
& value \\
\cmidrule(lr){2-4}
& {\tt search}
& {\tt directory}, {\tt label}
& (summary, value) pairs \\
\bottomrule
\end{tabular}
}
\end{table*}
}
\lipsum
\end{document}
答案1
这转变 \centering
仅在找到段落结尾(明确的行\par
或空白行)时才会执行。由于您是\centering
在组内换行,并且组关闭前没有这样的“段落结尾”信号,因此\centering
永远不会执行的效果。
解决方案是删除范围括号{
... ,}
因为这里不需要它们(尽管\small
也使用了)。或者,使用\begin{center}
... \end{center}
,这将在 上方/下方插入额外的间距tabular
。
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{multirow, booktabs}
\begin{document}
\lipsum
\begin{table*}[t]
\caption{hello core APIs}
\small\centering
\begin{tabular}{llll}
\toprule
{\bfseries API group} & {\bfseries Name} & {\bfseries Parameters} & {\bfseries output} \\
\midrule\midrule[.1em]
\multirow{2}{3.5cm}{Creation}
& {\ttfamily createFBFSummary}
& {\ttfamily summary}, {\ttfamily tableWidth}%, {\ttfamily schema} (optional)
& FBF summary \\
\cmidrule(lr){2-4}
& {\ttfamily createLabeledSummary}
& {\ttfamily summary}
& Labeled summary \\
\midrule[.1em]
\multirow{2}{3.5cm}{Query}
& {\ttfamily query}
& {\ttfamily summary}, {\ttfamily label}
& value \\
\cmidrule(lr){2-4}
& {\ttfamily search}
& {\ttfamily directory}, {\ttfamily label}
& (summary, value) pairs \\
\bottomrule
\end{tabular}
\end{table*}
\lipsum
\end{document}
在上面的例子中,环境的结束table*
构成了“段落结束”信号。
答案2
一些额外的建议(除了删除限制范围的花括号之外),没有特定的顺序:
使用
p
列类型(宽度为 3.5 厘米);删除\multicolumn
语句为第 2 列和第 3 列中的固定宽度字体材料设置新的列类型(
t
在下面的代码中调用);摆脱单独的\tt
指令无需调用
\small
;只需以正常文档字体大小排版表格即可由于您使用的是软件包的宏
booktabs
,因此也请采用软件包的整体表格设计方法。例如,谨慎使用水平线,而改用空格。结果将是一个看起来更“开放”的表格。不要使用已弃用的字体切换宏
\tt
和\bf
;而是使用\ttfamily
和\bfseries
。放置指令中的元素
h
和对环境完全没有影响。省略元素可能会造成问题,因为它会阻止创建整页浮动,从而增加浮动最终位于文档末尾的可能性。我的建议是完全省略该指令。b
[!hbt]
table*
p
[!hbt]
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{booktabs, array}
\newcolumntype{t}{>{\ttfamily}l} % automatic-ttfamily "l" column
\begin{document}
\lipsum[1-3]
\begin{table*}
\caption[hello core APIs]{hello core APIs\strut}\label{tab:apis}
\centering
\renewcommand\arraystretch{1.2}
\begin{tabular}{@{} p{3.5cm} t t l @{}}
\toprule
\bfseries API group & \bfseries\rmfamily Name & \bfseries\rmfamily Parameters & \bfseries output \\
\midrule
Creation
& createFBFSummary & summary, tableWidth & FBF summary \\
& createLabeledSummary & summary & Labeled summary \\
\addlinespace
Query & query & summary, label & value \\
& search & directory, label & (summary, value) pairs \\
\bottomrule
\end{tabular}
\end{table*}
\lipsum[4-13]
\end{document}
答案3
到目前为止给出的答案解决了问题,但在建议“改进”方面却出了问题。
关于主要问题,只是为了完整性:
\centering
外部table
环境根本不影响环境{\centering...}
没有效果,因为段落在}
扫描后结束,所以\centering
已经结束其作用。
所以格式应该是
\lipsum
\begin{table*}[t]
\centering\small
\caption{hello core APIs}\label{tab:apis}
\begin{tabular}{llll}
[...]
\end{tabular}
\end{table*}
\lipsum
我更喜欢将格式说明放在顶部;无论如何它们都不会影响标题。
现在,让我们考虑表格以及如何改进它。
\documentclass[10pt, twocolumn]{article}
\usepackage{lipsum}
\usepackage{booktabs}
\newcommand{\keyw}[1]{\texttt{#1}}
\begin{document}
\lipsum
\begin{table*}
\small\centering
\caption{hello core APIs}\label{tab:apis}
\medskip % not necessary if you load caption
\begin{tabular}{llll}
\toprule
% header
\bfseries API group & \bfseries Name & \bfseries Parameters & \bfseries output \\
% table data
\midrule
Creation
& \keyw{createFBFSummary}
& \keyw{summary}, \keyw{tableWidth}%, \keyw{schema} (optional)
& FBF summary \\
\cmidrule(lr){2-4}
& \keyw{createLabeledSummary}
& \keyw{summary}
& Labeled summary \\
\midrule
Query
& \keyw{query}
& \keyw{summary}, \keyw{label}
& value \\
\cmidrule(lr){2-4}
& \keyw{search}
& \keyw{directory}, \keyw{label}
& (summary, value) pairs \\
\bottomrule
\end{tabular}
\end{table*}
\lipsum
\end{document}
请注意,在打字机类型中排版特殊单词的个人命令;也绝不应使用\bf
和\tt
。也不要使用双水平线。也没有必要\multirow
:单词“Creation”自动引用其下方的空白单元格。
答案4
使用center
环境而不是居中;但我不知道为什么
\documentclass[10pt, twocolumn]{article}
\usepackage{lipsum}
\usepackage{tabularx, multirow, booktabs}
\begin{document}
\lipsum
\begin{table*}[!hbt]
\caption{hello core APIs}\label{tab:apis}
\small
\begin{center}
\begin{tabular}{llll}
\toprule
{\bf API group} & {\bf Name} & {\bf Parameters} & {\bf output} \\
\midrule\midrule[.1em]
\multirow{2}{3.5cm}{Creation}
& {\tt createFBFSummary}
& {\tt summary}, {\tt tableWidth}%, {\tt schema} (optional)
& FBF summary \\
\cmidrule(lr){2-4}
& {\tt createLabeledSummary}
& {\tt summary}
& Labeled summary \\
\midrule[.1em]
\multirow{2}{3.5cm}{Query}
& {\tt query}
& {\tt summary}, {\tt label}
& value \\
\cmidrule(lr){2-4}
& {\tt search}
& {\tt directory}, {\tt label}
& (summary, value) pairs \\
\bottomrule
\end{tabular}
\end{center}
\end{table*}
\lipsum
\end{document}