latex表格手把手超详细教程(table, tabular, multirow, multicolumn)

news/2024/5/18 14:05:15 标签: latex, 表格, 论文, multirow, multicolumn

最近写论文要用latex,实验部分需要画表格,于是百度看了两个多小时的博客,一无所获,全都写的乱七八糟的,越看越烦躁,于是谷歌五分钟,就学会了怎么画表格,下面是我最终画出来的表格

在这里插入图片描述

接着我将讲解如何从零开始绘制一张latex表格,参考LaTeX tables - Tutorial with code examples

先画一张最简单的表格

绘制Latex表格需要用到 tabletabular 环境。其中 table 环境里写表格的标题(caption)、表格的偏移之类的。 tabular 环境则是绘制表格的内容。一个简单的表格绘制代码如下所示:

latex">\documentclass{article}

\begin{document}

\begin{table}[h!]
  \begin{center}
    \caption{Your first table.}
    \begin{tabular}{l|c|r} % <-- Alignments: 1st column left, 2nd middle and 3rd right, with vertical lines in between
      \textbf{Value 1} & \textbf{Value 2} & \textbf{Value 3}\\
      $\alpha$ & $\beta$ & $\gamma$ \\
      \hline
      1 & 1110.1 & a\\
      2 & 10.1 & b\\
      3 & 23.113231 & c\\
    \end{tabular}
  \end{center}
\end{table}

\end{document}

table-1.png

首先是 table 环境部分,\begin{center}表格居中,\caption{Your first table.}表格的标题。

然后是 tabular 环境部分,\begin{tabular}{l|c|r}这里面的{l|c|r},包含了三个字母,代表了表格总共有三列,第一列靠左偏移,第二列居中,第三列靠右偏移。竖线代表列之间用线分隔开来,如果想要左右两边都用线包围起来,应该改成{|l|c|r|}。接下来就是正式的表格绘制部分。

latex里的表格是一行行来绘制的,每一行里面用&来分隔各个元素,用\\来结束当前这一行的绘制。代码中\textbf{Value 1} & \textbf{Value 2} & \textbf{Value 3}\\绘制表格的第一行,是三个加粗的字符串。第二行$\alpha$ & $\beta$ & $\gamma$ \\则是三个希腊字符。

接着是\hline,它的作用是画一整条横线,注意如果想画一条只经过部分列的横线,则可以用cline{a-b},代表的是画一条从第a列到第b列的横线。

至此就画完了表头部分,接下来填充表格数据,这个很简单,看代码即可。

简单的表格画完了,但是完全不能满足需求,我需要用到的是一个更复杂的表格形式,一个表格单元占据了多个行或者列。

表格单元占据多个行或者列

这里需要用到multirowmulticolumn,首先要引入相关的包:

latex">%...
\usepackage{multirow} % Required for multirows
\begin{document}
%...

multirowmulticolumn的格式如下:

latex">\multirow{NUMBER_OF_ROWS}{WIDTH}{CONTENT} 

NUMBER_OF_ROWS代表该表格单元占据的行数,WIDTH代表表格的宽度,一般填 * 代表自动宽度,CONTENT则是表格单元里的内容。

latex">\multicolumn{NUMBER_OF_COLUMNS}{ALIGNMENT}{CONTENT}

NUMBER_OF_COLUMNS代表该表格单元占据的列数,ALIGNMENT代表表格内容的偏移(填l,c或者r),CONTENT则是表格单元里的内容。

multirow_71">一个multirow的例子

latex">%...

\begin{table}[h!]
  \begin{center}
    \caption{Multirow table.}
    \label{tab:table1}
    \begin{tabular}{l|S|r}
      \textbf{Value 1} & \textbf{Value 2} & \textbf{Value 3}\\
      $\alpha$ & $\beta$ & $\gamma$ \\
      \hline
      \multirow{2}{*}{12} & 1110.1 & a\\ % <-- Combining 2 rows with arbitrary with (*) and content 12
      & 10.1 & b\\ % <-- Content of first column omitted.
      \hline
      3 & 23.113231 & c\\
      4 & 25.113231 & d\\
    \end{tabular}
  \end{center}
\end{table}

%...

table-5.png

主要是这一句代码\multirow{2}{*}{12} & 1110.1 & a\\,使得内容为 12 的这一个表格单元占据了两行。注意的是,下一行的第一个位置,由于已经被 12 这个单元给占据了,因此第二行的代码是& 10.1 & b\\,这里第一个位置没有写东西,如果写了东西会使得这一行超过3列,表格错位。

multicolumn_100">一个multicolumn的例子

latex">%...

\begin{table}[h!]
  \begin{center}
    \caption{Multicolumn table.}
    \label{tab:table1}
    \begin{tabular}{l|S|r}
      \textbf{Value 1} & \textbf{Value 2} & \textbf{Value 3}\\
      $\alpha$ & $\beta$ & $\gamma$ \\
      \hline
      \multicolumn{2}{c|}{12} & a\\ % <-- Combining two cells with alignment c| and content 12.
      \hline
      2 & 10.1 & b\\
      3 & 23.113231 & c\\
      4 & 25.113231 & d\\
    \end{tabular}
  \end{center}
\end{table}

%...

table-6.png

这里主要是这一句代码\multicolumn{2}{c|}{12} & a\\,使得内容为 12 的这一个表格单元占据了两列。所以这一行接下来只能填一个元素a。注意这里的ALIGNMENT写的是c|代表表格内容居中,表格右侧有竖线而左侧没有。

multirowmulticolumn_129">结合multirowmulticolumn

可以看到我所需要画的表格中,内容为Model的这个表格单元需要同时占据两行和两列,这是最复杂的。其实只需要把\multirow{NUMBER_OF_ROWS}{WIDTH}{CONTENT}的CONTENT写成multicolumn就可以了。

latex">%...

\begin{table}[h!]
  \begin{center}
    \caption{Multirow and -column table.}
    \label{tab:table1}
    \begin{tabular}{l|S|r}
      \textbf{Value 1} & \textbf{Value 2} & \textbf{Value 3}\\
      $\alpha$ & $\beta$ & $\gamma$ \\
      \hline
      \multicolumn{2}{c|}{\multirow{2}{*}{1234}} & a\\ % <-- Multicolumn spanning 2 columns, content multirow spanning two rows
      \multicolumn{2}{c|}{} & b\\ % <-- Multicolumn spanning 2 columns with empty content as placeholder
      \hline
      3 & 23.113231 & c\\
      4 & 25.113231 & d\\
    \end{tabular}
  \end{center}
\end{table}

%...

table-7.png

最主要的语句\multicolumn{2}{c|}{\multirow{2}{*}{1234}} & a\\使得内容为1234表格单元占据了2行两列,所以当前这一行右边只能再写一个元素a了,然后注意的是下一行是\multicolumn{2}{c|}{} & b\\用一个空的multicolumn来代表前两个位置空置,然后填剩下的一个元素b

我的表格实例代码

latex">\begin{table*}[t]
\centering
\caption{MAP scores of teacher model, different student models with 4 widths and three baseline models with different length of binary codes on CIFAR-10 and SUN datasets.}
\label{table1}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline
\multicolumn{2}{|c|}{\multirow{2}{*}{Model}} &\multirow{2}{*}{FLOPs}&\multirow{2}{*}{Params} & \multicolumn{4}{c|}{CIFAR-10}&\multicolumn{4}{c|}{SUN}\\
\cline{5-12}

\multicolumn{2}{|c|}{} & & & 12bits & 24bits & 32bits & 48bits & 12bits & 24bits & 32bits & 48bits \\
\hline

\multicolumn{2}{|c|}{Teacher} &4.12G	&25.56M	&0.87841	&0.89512	&0.9014	&0.90601	&0.83587	&0.85736	&0.86297	&0.87103\\ 
\hline

%0.25x-----------------
\multirow{4}{*}{$0.25\times$} & Stu-1 & 0.15G & 1.03M &
0.70746 & 0.73458 &	0.74909 &	0.75833 &	0.69618 &	0.76631 &	0.78075 &	0.78787 \\
\cline{2-12}

\multirow{4}{*}{} & Stu-2 &0.19G	&1.08M	&0.7629	&0.79111	&0.80039	&0.80519	&0.73539	&0.79714	&0.80753	&0.81195\\
\cline{2-12}

\multirow{4}{*}{} & Stu-3 &0.26G	&1.43M	&0.84684	&0.86443	&0.87384	&0.88268	&0.79284	&0.83442	&0.84350	&0.84353\\
\cline{2-12}

\multirow{4}{*}{} & Stu-4 & 0.29G	&1.99M	&0.85901	&0.87269	&0.8836	&0.88728	&0.81997	&0.84620	&0.85041	&0.85036\\
\hline
\end{tabular}
\label{table_MAP}
\end{table*}

在这里插入图片描述

这里我用\begin{table*}[t]有一个星号,是为了让表格宽度与页面等宽而不是二分之一宽。

latex的基本画法就差不多这样了,如果还有更高的需求,最好去谷歌查询,因为百度出来的博客写的实在太烂了,排版混乱,不知所云,看了也是浪费时间。


http://www.niftyadmin.cn/n/1493718.html

相关文章

【转载】C#使用Math.Ceiling方法对计算结果向上取整操作

在C#的数值运算中&#xff0c;有时候需要对计算结果进行向上取整操作&#xff0c;支持设定结算结果的有效位数&#xff0c;Math.Ceiling方法是C#中专门用来对数值进行向上取整的方法&#xff0c;此方法和Math.Round方法、Math.Floor方法的差别在于&#xff0c;Math.Ceiling不对…

redis应用与学习

(tf2) ~ ᐅ cat /etc/rc.local #!/bin/sh -e /usr/local/bin/redis-server /usr/local/etc/redis.conf exit 0

pyplot绘制论文折线图

Matplotlib是Python中最著名的绘图库。这里就是用matplotlib.pyplot来绘制论文实验部分所需的折线图。 画出来的折线图&#xff1a; 所涉及到的要素有&#xff1a; 一个figure包含两个子图&#xff0c;用subplot实现图片直接生成展示或者保存成pdf格式&#xff0c;用plt.show…

在工业派上使用opencv库的记录

1、在工业派linux操作系统环境下&#xff0c;调用OpenCV库&#xff0c;用python写了第一个查看图片的程序 注意&#xff1a;要进入工业派的terminal 参考&#xff1a;https://www.cnblogs.com/magic-girl/p/opencv-python-01.html 2、开启摄像头的程序 注意&#xff1a;cv2.Vid…

keras example

文章目录Activation Functionreuters_mlp_relu_vs_selu.pyMLPmnist_mlp.pyreuters_mlp.pyCNNmnist_cnn.pyAEmnist_denoising_autoencoder.pyvariational_autoencoder.pyRNNimdb_lstm.pylstm_seq2seq.pycnn_seq2seq.pyimdb_bidirectional_lstm.pyGANmnist_acgan.pyActivation Fu…

@程序员,你还记得当年高考时的样子吗?

01、程序员天天 说实话&#xff0c;我高考的时候内心毫无波澜&#xff0c;因为自己啥水平能掂量出来的&#xff0c;想着就是考多少分都无所谓&#xff0c;反正开心就好&#xff0c;所以高考前几天也没复习&#xff0c;该玩玩、该吃吃、该喝喝。 父母很看不惯我当时一幅“漫不经…

docker部署简易Django项目(详细入门教程)

百度找来的博客&#xff0c;关于docker部署Django的博客一大堆&#xff0c;但是可以说都是垃圾&#xff0c;要么语焉不详、讲的不明不白&#xff0c;要么排版极烂&#xff0c;一看就是复制粘贴&#xff0c;看了也只是浪费时间、自找麻烦。下面的教程是官方教程的翻译和实践&…

cookie与session会话跟踪技术

会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。如果没有会话跟踪技术的话&#xff0c;每次请求都需要进行用户登录&#xff0c;才能确定用户身份&#xff0c;这样是很不合理的&#xff0c;所以需要用到会话跟踪技术。常用…