我希望在具有两列纸质模板的表格中,将第一列和第二列的内容居中对齐到相应的单元格内,如下所示。
以下是代码:
\documentclass[journal]{IEEEtran}
\usepackage{caption}
\usepackage{tabularx}
\begin{document}
\begin{table}[h]
\captionof{table}{Table of $q$ and $z$}
\label{tab:table_q_and_z}
\noindent
\begin{tabularx}{\columnwidth} { | c | c | >{\raggedright\arraybackslash}X |}
\hline
\textbf{Steps} & \textbf{$q_i$} & \textbf{Definition of $z_i$} \\
\hline
\multirow{$i \leq (n-1)$} & $q_i$ = 0 & $z_i$ = number of \emph{emptied} chambers at the \emph{cleaning} place $i \leq (n-1)$ \\
\cline{2-3}
& \centering $q_i$ = 1 & $z_i$ = number of \emph{loaded} chambers at the \emph{processing} place $i \leq (n-1)$ \\
\hline
$i=n$ & $q_{n}$ = 0 & $z_n$ = number of \emph{loaded} chambers at the \emph{processing} place $n$ \\
\cline{2-3}
& $q_{n}$ = 1 & $z_{n}$ = number of \emph{emptied} chambers at the \emph{cleaning} place $n$ \\
\hline
\end{tabularx}
\end{table}
\end{document}
当前代码应该添加什么?
答案1
为了实现类型列中的材料的垂直居中c
,我建议您执行
\renewcommand\tabularxcolumn[1]{m{#1}}
该包的用户指南对此进行了更详细的解释tabularx
。
我还建议您完成\multirow
命令,并在标题行中分别更改\textbf{$q_i$}
为\boldmath$q_i$
和更改\textbf{Definition of $z_i$}
为\boldmath\bfseries Definition of $z_i$
。并且,请将第 2 列更改$q_i$ = 1
为$q_i = 1$
等。我还建议您删除似是而非的\centering
指令,并将其更改\captionof{table}{...}
为。(由于您正在使用环境\caption{...}
,因此没有必要。)最后但并非最不重要的是,考虑将指令添加到表格,这样表格的“外观”就不会那么压缩。\captionof
table
\setlength\extrarowheight{2pt}
\documentclass[journal]{IEEEtran}
\usepackage{caption}
\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}} % <-- new
\usepackage{multirow}
\begin{document}
\begin{table}[h]
\setlength\extrarowheight{2pt}
\caption{Table of $q$ and $z$}
\label{tab:table_q_and_z}
\noindent
\begin{tabularx}{\columnwidth} { | c | c | >{\raggedright\arraybackslash}X |}
\hline
\textbf{Steps} & \boldmath$q_i$ & \boldmath\bfseries Definition of $z_i$ \\
\hline
\multirow{3}{*}{$i \leq (n-1)$}
& $q_i=0$
& $z_i$ = number of \emph{emptied} chambers at the \emph{cleaning} place $i \leq (n-1)$ \\
\cline{2-3}
& $q_i=1$
& $z_i$ = number of \emph{loaded} chambers at the \emph{processing} place $i \leq (n-1)$ \\
\hline
\multirow{3}{*}{$i=n$}
& $q_n=0$
& $z_n$ = number of \emph{loaded} chambers at the \emph{processing} place $n$ \\
\cline{2-3}
& $q_n=1$
& $z_{n}$ = number of \emph{emptied} chambers at the \emph{cleaning} place $n$ \\
\hline
\end{tabularx}
\end{table}
\end{document}
附录解决表格中的一些其他问题:
IEEEtran 文档类与该包仅勉强兼容
caption
。除非您计划提交论文的期刊明确允许您使用该包,否则请不要使用该包。IEEEtran 类使用 Times Roman 作为默认文本字体,但使用 Computer Modern 作为默认数学字体。从视觉/美学角度来说,这两种字体并不完全匹配。我建议
\usepackage{newtxtext,newtxmath}
在序言中执行以将 Times Roman 用于文本和数学。考虑删除表格中的所有垂直线和大多数水平线,以便使表格看起来更加开放和吸引人。我建议您使用包的线条绘制宏来
booktabs
代替\hline
和\cline
。使用大胆的在标题行中,这样做不会起到多大作用,只会冒着让整个表格看起来笨拙且粗俗的风险。不要过度使用粗体;对于手头的表格,我认为任何需要加粗显示。
实施这些想法,取消第 1 列和第 2 列的垂直居中,并将第 1 列和第 2 列的内容左对齐,将创建以下外观。我希望你会同意我的观点,即该表格看起来比上面发布的表格更具吸引力和吸引力。
\documentclass[journal]{IEEEtran}
\usepackage{tabularx}
\usepackage{newtxtext,newtxmath}
\usepackage{booktabs} % for well-spaced horizontal rules
\usepackage{lipsum} % filler text
\begin{document}
\begin{table}[h]
\caption{Table of $q$ and $z$}
\label{tab:table_q_and_z}
\begin{tabularx}{\columnwidth} { @{}
lll
@{\hspace{\tabcolsep}}
>{\raggedright\arraybackslash}X
@{}}
\toprule
Steps & $q_i$
& \multicolumn{2}{l}{Definitions of $z_i$ and $z_n$}\\
\midrule
$i\leq n-1$ & $q_i=0$ & $z_i$
& number of \emph{emptied} chambers at the \emph{cleaning} place $i \leq (n-1)$ \\
& $q_i=1$ & $z_i$
& number of \emph{loaded} chambers at the \emph{processing} place $i \leq (n-1)$ \\
\addlinespace
$i=n$ & $q_n=0$ & $z_n$
& number of \emph{loaded} chambers at the \emph{processing} place $n$ \\
& $q_n=1$ & $z_n$
& number of \emph{emptied} chambers at the \emph{cleaning} place $n$ \\
\bottomrule
\end{tabularx}
\end{table}
\lipsum
\end{document}
答案2
该包nicematrix
提供了一个{NiceTabularX}
类似于{tabularx}
(包的tabularx
)环境的环境,但除了其他功能外,还具有向列添加选项的能力X
。使用X[l,m]
,您将拥有一个X
表现为m
左侧水平对齐的列。
\documentclass[journal]{IEEEtran}
\usepackage{caption}
\usepackage{nicematrix}
\begin{document}
\begin{table}[h]
\captionof{table}{Table of $q$ and $z$}
\label{tab:table_q_and_z}
\noindent
\begin{NiceTabularX}{\columnwidth} {|c|c|X[m,l]|}
\hline
\textbf{Steps} & \textbf{$q_i$} & \textbf{Definition of $z_i$} \\
\hline
\Block{2-1}{$i \leq (n-1)$} & $q_i$ = 0 & $z_i$ = number of \emph{emptied} chambers at the \emph{cleaning} place $i \leq (n-1)$ \\
\cline{2-3}
& \centering $q_i$ = 1 & $z_i$ = number of \emph{loaded} chambers at the \emph{processing} place $i \leq (n-1)$ \\
\hline
\Block{2-1}{$i=n$} & $q_{n}$ = 0 & $z_n$ = number of \emph{loaded} chambers at the \emph{processing} place $n$ \\
\cline{2-3}
& $q_{n}$ = 1 & $z_{n}$ = number of \emph{emptied} chambers at the \emph{cleaning} place $n$ \\
\hline
\end{NiceTabularX}
\end{table}
\end{document}
booktabs
不过,我建议使用符合以下精神的表格booktabs
(参见 Mico 的回答)。
答案3
作为对 @Mico 答案(+1)的补充,但使用了tabularray
和bm
包:
- 代码稍微短一点
tabularray
启用列规范的语法来定义数学列和单元格内容的简单垂直居中(选项m
)- 表格行在表格前言中定义
\documentclass[journal]{IEEEtran}
\usepackage{tabularray}
\usepackage{bm}
\begin{document}
\begin{table}[h]
\caption{Table of $q$ and $z$}
\label{tab:table_q_and_z}
\begin{tblr}{hlines, vlines,
colspec = { *{2}{Q[c, mode=math]} X[l, m]},
row{1} = {font=\bfseries, mode=text},
rowsep = 3pt,
}
Steps & $\bm{q_i}$ & Definition of $\bm{z_i}$ \\
\SetCell[r=2]{c} i \leq (n-1)
& q_i=0
& $z_i$: number of \emph{emptied} chambers at the \emph{cleaning} place $i \leq (n-1)$ \\
& q_i=1
& $z_i$: number of \emph{loaded} chambers at the \emph{processing} place $i \leq (n-1)$ \\
\SetCell[r=2]{c} i=n
& q_n=0
& $z_n$: number of \emph{loaded} chambers at the \emph{processing} place $n$ \\
& q_n=1
& $z_{n}$: number of \emph{emptied} chambers at the \emph{cleaning} place $n$ \\
\end{tblr}
\end{table}
\end{document}