我怎样才能使这些数字在行中居中对齐?
另外,如果您发现更好的改进方法,请提出建议。
(我还想知道垂直线是否好看,或者我是否应该将其删除)
编辑:很抱歉,我没有清楚地提到该论文是双列格式,但表格是在两列合并而不是一列上扩展的。
\documentclass[journal]{IEEEtran}
\usepackage{amsmath,amsfonts}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{array}
\usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
%\usepackage{textcomp}
\usepackage{stfloats}
\usepackage{url}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage{cite}
\usepackage{booktabs,capt-of}
\usepackage{newtxtext, newtxmath}
\usepackage{array}
\usepackage{parskip}
\usepackage{mathtools}
\begin{document}
\begin{table*}[!t]
\centering
\caption{}
\label{}
\begin{tabular}{c|c|c|c}
\toprule
\textbf{No} &\textbf{C1} &\textbf{C3}&\textbf{C4} \\\midrule
1 & \begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-a}
\label{fig:first}
\end{minipage}%
\hfill % maximize the horizontal separation
&\begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-b}
\label{fig:second}
\end{minipage}%
\hfill
&\begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-c}
\label{fig:third}
\end{minipage}\\\midrule
2 & \begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-a}
\label{fig:first}
\end{minipage}%
\hfill % maximize the horizontal separation
&\begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-b}
\label{fig:second}
\end{minipage}%
\hfill
&\begin{minipage}[t]{0.3\textwidth}
\includegraphics[width=\linewidth]{example-image-c}
\label{fig:third}
\end{minipage}\\\midrule
\end{tabular}
\end{table*}
\end{document}
答案1
您想删除[t]
,但有一种更简单的方法可以使用adjustbox
。
\documentclass[journal]{IEEEtran}
\usepackage{amsmath,amsfonts}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{array}
\usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
%\usepackage{textcomp}
\usepackage{stfloats}
\usepackage{url}
\usepackage{verbatim}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{cite}
\usepackage{booktabs,capt-of}
\usepackage{newtxtext, newtxmath}
\usepackage{array}
\usepackage{parskip}
\usepackage{mathtools}
\begin{document}
\begin{table*}
\centering
\caption{A caption}
\label{label}
% local settings for the particular table
\setlength{\tabcolsep}{0pt}% let TeX compute the horizontal space
\setlength{\aboverulesep}{\belowrulesep}
%%%
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}cccc}
\toprule
\textbf{No} &\textbf{C1} &\textbf{C3}&\textbf{C4} \\\midrule
1
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-a}
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-b}
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-c}
\\
%\addlinespace
\midrule
2
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-a}
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-b}
& \includegraphics[valign=c,width=0.3\textwidth]{example-image-c}
\\
\bottomrule
\end{tabular*}
\end{table*}
\end{document}
请注意,\label
您里面的命令minipage
除了引用相同的标题外,基本上什么也不做。最好只是一个全局命令。而且这些\hfill
命令什么也不做。
顺便说一句,表格中的垂直规则很糟糕。
答案2
我有时会使用以下宏\raisebox{}[][]{}
\raisebox{-0.5\totalheight}[0.5\totalheight][0.5\totalheight]{<image>}
但对于小图像可能需要进行一些调整。
解释。
latex 中的每个对象都在一个盒子,一个不可见的容器,包含图像。每个框都有三个属性:基线、高度(基线上方的垂直空间)和深度(基线下方的垂直空间)。据我所知,图像的基线始终设置在其底部。由于文本的基线也设置在底部,因此您将得到这种不想要的效果。
在上面的宏中,\raisebox{v-len}[new height][new depth]{content}
只需重新定义由 latex 创建的默认框,因此宏将每个图像的基线设置为其中心。如果仔细观察图像,您会看到每个图像的中心都在文本的底部;这是两个基线所在的位置。对于非常小的图像,宏可能需要调整。此外,[new height]
和[new depth]
不必添加到1\totalheight
,更大的因子将增加额外的垂直空间,因为总高度会增加。例如,下面的代码将使图像居中并增加一点垂直空间
\newcommand\RI[1]{\raisebox{-0.48\totalheight}[0.55\totalheight][0.52\totalheight]{#1}}
\documentclass[journal]{IEEEtran}
% \usepackage{amsmath,amsfonts}
% \usepackage{algorithmic}
% \usepackage{algorithm}
% \usepackage{array}
% \usepackage[caption=false,font=normalsize,labelfont=sf,textfont=sf]{subfig}
%\usepackage{textcomp}
% \usepackage{stfloats}
% \usepackage{url}
% \usepackage{verbatim}
\usepackage{graphicx}
% \usepackage{cite}
\usepackage{booktabs,capt-of}
% \usepackage{newtxtext, newtxmath}
% \usepackage{array}
% \usepackage{parskip}
% \usepackage{mathtools}
\newcommand\RI[1]{\raisebox{-0.5\totalheight}[0.5\totalheight][0.5\totalheight]{#1}}
\begin{document}
\begin{table*}[!t]
\centering
\caption{}
\label{}
\begin{tabular}{c|c|c|c}
\toprule
\textbf{No} &\textbf{C1} &\textbf{C3}&\textbf{C4} \\\midrule
1 & \begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-a}}
\label{fig:first}
\end{minipage}%
\hfill % maximize the horizontal separation
&\begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-b}}
\label{fig:second}
\end{minipage}%
\hfill
&\begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-c}}
\label{fig:third}
\end{minipage}\\\midrule
2 & \begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-a}}
\label{fig:first}
\end{minipage}%
\hfill % maximize the horizontal separation
&\begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-b}}
\label{fig:second}
\end{minipage}%
\hfill
&\begin{minipage}[t]{0.3\textwidth}
\RI{\includegraphics[width=\linewidth]{example-image-c}}
\label{fig:third}
\end{minipage}\\\midrule
\end{tabular}
\end{table*}
\end{document}
答案3
使用tabularray
(for X[c,m]
columns) 和 adjustbox
(for valign
and \adjincludegraphics
) 包,代码简短而简单:
\documentclass[journal]{IEEEtran}
\usepackage{newtxtext, newtxmath}
\usepackage[export]{adjustbox} % it load graphicx too
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\begin{document}
\begin{table*}[!t]
\caption{Table with images}
\label{tab:image}
\adjustboxset{width=\linewidth, valign=M}
\begin{tblr}{hlines, vlines,
colsep=3pt,
colspec= {c *{3}{X[c,m]} },
row{1} = {font=\bfseries},
rowsep = 3pt,
}
No & C1 & C3 & C4 \\
1 & \adjincludegraphics{example-image-a}
& \adjincludegraphics{example-image-b}
& \adjincludegraphics{example-image-c} \\
2 & \adjincludegraphics{example-image-a}
& \adjincludegraphics{example-image-b}
& \adjincludegraphics{example-image-c}
\end{tblr}
\end{table*}
\end{document}
- 通过
valign
可以移动图像的基线。使用 选项M
(或v
),您可以将基线移动到图像的垂直中心。 - 水平列
X[c,m]
(c
选项)和垂直列(m
选项)将其内容居中。 - 使用
\adjincludegraphics
指令可以设置图像选项的常用选项:valign=M
,和width=\linewidth
。-由于通过valign
将图像移动到基线到垂直中心,现在所有单元格的内容都垂直居中。