惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Vercel News
Vercel News
月光博客
月光博客
S
SegmentFault 最新的问题
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
小众软件
小众软件
WordPress大学
WordPress大学
G
Google Developers Blog
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
I
InfoQ

jdhao's digital space

Conversion between base64 and OpenCV or PIL Image 腾讯云对象存储博客图床开启 CDN 加速(不需要购买额外域名) Search and Replace in Multiple Files in Vim/Neovim Change Table Column Width in LaTeX Image or Table Side by Side in LaTeX LaTeX 并排显示图像或表格 Firenvim: Neovim inside Your Browser Content inside HTML tags missing in Latest Hugo? Creating Markdown Front Matter with Ultisnips Labelme JSON 标注格式转 voc XML 格式 Nifty Nvim Techniques That Make My Life Easier -- Series 6 macOS 下如何为视频制作字幕 Running Command Asynchronously inside Neovim Resolving Merge Conflict after Git Stash Pop Pylint: command not found? A Hands-on Experience with Neovim's Built-in LSP Support How to Convert PDF to Images with Imagemagick 互联网上常用缩略语集锦 File Backup in Neovim Converting PDF Pages to Images with Poppler Nifty Nvim Techniques That Make My Life Easier -- Series 5 Neovim Configuration for System-wide Use How to sort a list of tuple or list in Python -- lambda or itemgetter? Building A Vim Statusline from Scratch 人类第一颗原子弹爆炸始末 Distributed Training in PyTorch with Horovod Learning Expect Programming Essential Knowledge about SSH Nifty LaTeX Techniques -- Series 1 更改 Adsense 邮寄地址,重新寄送 PIN
Creating A Professional Table in LaTeX with booktabs
2019-08-27 · via jdhao's digital space

The default table style provided by LaTeX is not good-looking and professional. In this post, I would like to talk about how to create professional table with the help of booktabs package. We will create the table shown in the title image.

For how to create a normal table without booktabs, see this tutorial. To use booktabs, we need first to import it since it is not loaded by LaTeX by default:

To create multi-row cells in a table, we need also to include the multirow package:

Professional tables often appear as a three-line table, i.e., top line, middle line and bottom line. The three lines are usually thicker than other lines that appear in the table. Booktabs package provides the \toprule, \midrule and \bottomrule command to represent the three lines. To draw a line which only spans a few columns, you can use \cmidrule command.

I show an example to create a table using the booktabs below:

\begin{table}[h]
    \centering
    \begin{tabular}{lllll}
        \toprule
        \multirow{2}{*}{Models} & \multicolumn{3}{c}{Metric 1} & Metric 2\\
        \cmidrule{2-4} \cmidrule{5-5} \\
        {} & precision & recall & F-score  & R@10 \\
        \midrule
        model 1 & 0.67  & 0.8 & 0.729  & 0.75 \\
        model 2 & 0.8 & 0.9 & 0.847 & 0.85 \\
        \bottomrule
    \end{tabular}
\end{table}

The produced table is like:

There are several issues with the table:

  • The text in the multi-row cell is not properly aligned.
  • Row 1 and row 2 are not in the same height.
  • The two \cmidrule are connected to each other in one end.

To align the text in multi-row cell vertically, an easy way is to provide a vertical space parameter before the cell text:

\multirow{column_num}{cell_width}[vspace]{Text}

We can use the vspace parameter to adjust the vertical position of Text. A positive value will move the text up while a negative value will move the text down.

The two \cmidrule line are too close to the text in the first row. We can manually add some space using the \addlinespace[] command from the booktabs package. This command can be put after the table line separator \\ to add extra space.

To prevent the two cmidrule from connecting each other in one end, we need to provide the trim parameter to \cmidurle command. The trim parameter is provide in () after the command, for example, \cmidrule(lr){2-4}, which means to trim in both left and right side of the rule.

Combining these improvements together, we have the following code:

\begin{table}[h]
    \centering
    \begin{tabular}{lllll}
        \toprule
        \multirow{2}{*}[-1em]{Models} & \multicolumn{3}{c}{Metric 1} & Metric 2\\
        \addlinespace[10pt]
        \cmidrule(lr){2-4} \cmidrule(lr){5-5} \\
        {} & precision & recall & F-score  & R@10 \\
        \midrule
        model 1 & 0.67  & 0.8 & 0.729  & 0.75 \\
        model 2 & 0.8 & 0.9 & 0.847 & 0.85 \\
        \bottomrule
    \end{tabular}
\end{table}

One last issue is that the edge of table is not tight enough: there are apparent space in the left and right side of the table. You can add @{} in the tabular column setup to trim the extra space like the following:

\begin{tabular}{@{}lllll@{}}

References#