LaTeX讲解系列(1):如何优雅地插入图表

LaTeX讲解系列(1): 如何优雅地插入图表

包括插入子图,多图排列,画模型图等等

具体代码以会议/期刊所给的模板格式为准

插入图片

插入一张图片

1
2
3
4
5
6
7
8
%\begin{center} % 外部居中
\begin{figure}[!htbp]
\centering % 内部居中
\includegraphics[width=0.4\textwidth]{introduction_3_cases.pdf} % Reduce the figure size so that it is slightly narrower than the column.
\caption{XXXXXX}
\label{fig1:three_cases}
\end{figure} % Note that it should be below includegraphics
%\end{center}

插入多张图片

  1. 对于插入多张子图的组图,如果数量$$4的,建议在PPT或者draw.io中手动排版一下,调整间距大小截图角度等组合成一个整体,作为单张图片来插入。

  2. 如果数量很多,比如\(5 \times 6\)的阵列,可以使用 MulimgViewer软件(https://github.com/nachifur/MulimgViewer)进行多图联排展现可视化,软件会自动合成一张大单图。

  3. 若使用LaTex的subfigure来组图,实现方法如下:

    但是困难是 1)一旦图片变多调试会变得非常麻烦 2) 非常容易overfull超过页面大小,除非把每张图片缩小的特别小,但这样就看不清了 3) 图片内部之间的白色间隔难以消除。非必要不用这种方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
\begin{center}
\begin{figure}[htbp] % 一个figure环境套多个subfigure环境(保证Figure序号递增)
\centering
\subfigure{ % 每个subfigure负责控制一行图片的排列,下辖多个minipage环境
\begin{minipage}[h]{0.4\linewidth}
\centering
\includegraphics[scale=0.45]{Fig/beat.png} % 不同的子图控制不同的缩放比
\caption{Beating}\label{Beating} % 不同的子图设置不同的标题
\end{minipage}

\begin{minipage}[h]{0.6\linewidth}
\centering
\includegraphics[scale=0.45]{Fig/lean.png}
\caption{leaning}
\end{minipage}
}
\centering
\subfigure{
\begin{minipage}[h]{0.4\linewidth}
\centering
\includegraphics[scale=0.45]{Fig/catch_up.png}
\caption{Catch up}
\end{minipage}

\begin{minipage}[h]{0.6\linewidth}
\centering
\includegraphics[scale=0.45]{Fig/sneak.png}
\caption{Sneaking}
\end{minipage}
}

\subfigure{
\begin{minipage}[h]{0.4\linewidth}
\centering
\includegraphics[scale=0.3]{Fig/stand.png}
\caption{Stand still}
\end{minipage}

\begin{minipage}[h]{0.6\linewidth}
\centering
\includegraphics[scale=0.35]{Fig/slippery.png}
\caption{Slippery}
\end{minipage}
}
\centering
\subfigure{
\begin{minipage}[h]{0.4\linewidth}
\centering
\includegraphics[scale=0.3]{Fig/turnaround.png}
\caption{Upside down}
\end{minipage}

\begin{minipage}[h]{0.6\linewidth}
\centering
\includegraphics[scale=0.3]{Fig/struggle.png}
\caption{Struggle to turn around}\label{struggle}
\end{minipage}
}
\end{figure}
\end{center}

效果图:

插入表格

检查插入如下必要的宏包

1
2
\usepackage{graphicx}
\usepackage{booktabs}

CS科研表格

效果图:

table1.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\begin{table*}[htbp] % 注意在双栏模板中,带*表示跨栏排版,不带星号表示单栏排版;
\centering
\resizebox{1.0\textwidth}{!}{ % 注意使用resizebox需要\usepackage{graphicx},\textwidth是设定好的标准的一行的长度数值。如果要被双栏装下,需改成0.5\textwidth,以此类推。
\begin{tabular}{l|cccc|ccc|ccc|c|c} % 需要12列,l,c,r分别代表居左中右对齐,|代表竖杠分割线
\toprule %添加表格头部粗线,toptule, midrule和bottomrule 都需要\usepackage{booktabs}宏包
Method & PPP & PPPP & QQ & QQQ & QQQQ & RRR & RRRR & TTTT & TTTTT & ZZZZZZ & mIoU & FPS \\
%有n个&,就表示该行有n+1列
\hline %绘制一条水平横线
Method-A & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & 100.0 & - \\

Method-B & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & 90.0 & - \\

Method-C & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & 85.0 & - \\
\bottomrule %添加表格底部粗线
\end{tabular}
}

\caption{XXXXXX Performance.}
\label{tab1:performance} % 添加作为引用的锚点label
\end{table*}

三线表

Table2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
\begin{table}[htbp] % 注意在双栏模板中,带*表示跨栏排版,不带星号表示单栏排版;
\small % 设置字号
\centering
\resizebox{0.6\textwidth}{!}{ % 注意使用resizebox需要\usepackage{graphicx},\textwidth是设定好的标准的一行的长度数值。如果要被双栏装下,需改成0.5\textwidth,以此类推。
\begin{tabular}{ccccc} % 需要5列,l,c,r分别代表居左中右对齐,|代表竖杠分割线
\toprule %添加表格头部粗线
Method & PPP & PPPP & QQ & QQQ \\
%有n个&,就表示该行有n+1列
\midrule % 三线表中的顶格线
Method-A & 100.0 & 100.0 & 100.0 & 100.0 \\

Method-B & 90.0 & 90.0 & 90.0 & 90.0 \\

Method-C & 85.0 & 85.0 & 85.0 & 85.0 \\
\bottomrule %添加表格底部粗线
\end{tabular}
}

% \setlength{\abovecaptionskip}{5pt} 设置标题与上方/下方的距离间隔,一定要紧贴`\caption`命令
% \setlength{\belowcaptionskip}{6pt}
\caption{XXXXXX Performance.}

\label{tab2:three_line} % 添加作为引用的锚点label
\end{table}

补充:

  1. Latex字号大小\tiny < \scriptsize < \footnotesize < \small < \normalsize < \large < Large < LARGE < huge < Huge , 一般默认是\normalsize。此外,在正文里若想只对一部分文字改变字号,可以{\Large Input your text here}

  2. \resizebox{宽度}{高度}{}\scalebox{0.65}区别在于高度控制的不同。 “两者的区别在于高度的控制,前者控制相对高度,后者控制总高度,如果命令中的宽度或高度使用了感叹号代替,表示按照高度或宽度保持宽高比进行缩放”[3]

  3. 列宽调整[3]

    将代码中的 \begin{tabular}{c|ccc}中的每个c改成\begin{tabular}{ p{5pt} <<span class="hljs-cell">{\centering} | ccc}, 其中花括号里面填写宽度数值,如果需要该列居中则加入 <<span class="hljs-cell">{\centering}

  4. 好像三线表中\toprule, \bottomrule,如果要用竖线分割时会导致竖线在顶线和底线处断开。目前暂时没找到好的解决方法。如果均换成 \hline,虽然竖线不会断开但是也没有粗细区别了[4]

多个子列合并

首先\usepackage{multirow}

下面两个博客讲解的都特别好,因此推荐看原文,就不再赘述。源代码中做了一些小改进,附文在下:

参考资料:

https://blog.csdn.net/liu16659/article/details/111656244 使用latex做三线表


E.g. 1

Table3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% multirow,multicolumn 使用1
\begin{table}[!htbp]
\centering
\begin{tabular}{ccccccccccc} %需要10列
\toprule %添加表格头部粗线
\multicolumn{3}{c}{\multirow{2}{*}{Method}}& \multicolumn{3}{c}{Homographic}& &\multicolumn{3}{c}{Hetergraphic}\\
\multicolumn{3}{c}{} & Precision & Recall & F1 & & Precision &Recall & F1\\ %有n个&,就表示该行有n+1列, 这里有7个&,本应该有8列,再加上\multicolumn{3}{c}{}把第一列拆成3列,故共10列
\hline %绘制一条水平横线
\multicolumn{3}{c}{A}& 50 & 0 & 100& &200 & 300 & 300\\ % 占两列,列名为A;后面陆续跟着数字
\multicolumn{3}{c}{B}& 100 & 100 &0 & &100 & 200 & 200\\
\multicolumn{3}{c}{C}& 150 & 200 &100 & &0 & 100 & 200\\
\bottomrule %添加表格底部粗线
\end{tabular}
\caption{hihihi}
\end{table}

补充:

  1. 注意用到multirow 和multicol命令时需要使用宏包\usepackage{multirow}
  2. 源博客代码中&Recall & F1&\\这里多了一个&,这里去掉了多余的&修复bug

E.g. 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
% from `tbl/tb1_main_table.tex`
\begin{tabular}{
% r, c, l means aligned to right, center and left. @{} means delete default column width, and the following p{2.0em} means setting fixed column width while p refers to `parabox`.
@{}l
% c@{} c@{}p{1.0em}@{}
c@{\hspace{0.5em}} c@{\hspace{0.5em}} c@{}p{1.0em}@{}
% c@{\hspace{0.5em}}c @{}p{2.0em}@{}
c@{\hspace{0.5em}} c@{\hspace{0.5em}}c @{}p{1.0em}@{}
c@{\hspace{0.5em}} c@{\hspace{0.5em}}c @{}p{1.0em}@{}
c@{}
}

\toprule

\multirow{2}{*}{Method} &
\multicolumn{3}{c}{A} & &
\multicolumn{3}{c}{\PrivateDatasetOne{}} & &
\multicolumn{3}{c}{\PrivateDatasetTwo{}} & &
\multirow{2}{*}{Avg Rank}
\\

&
R1↓ &
R2↓ &
R3↑ & &
R1↓ &
R2↓ &
R3↑ & &
R1↓ &
R2↓ &
R3↑
\\

\midrule

Method1~\cite{foo_1} &
1.910 & 10.2 & 89.5 & &
& & & &
& & & &
\\

Method2 ~\cite{foo_2} &
1.724 & 9.3 & 91.0 & &
& & & &
& & & &
\\


\midrule

Ours &
1.772 & 8.7 & 91.4 & &
& & & &
& & \textbf{1.4} & &

\\

\bottomrule

\end{tabular}


% from `main.tex`
\begin{table*}[t!]
\centering
\caption{
\textbf{Main Performance}
of \method{} with 123
}
\resizebox{0.9\linewidth}{!}{
\input{tbl/tb1_main_table}
\label{table:main_perform}
}
\\
\begin{minipage}{\linewidth}
\scriptsize
\vspace{0.4em}
\begin{itemize}
\item[$^\dagger$]
Most baselines are sourced from Fooo_0~\cite{Foo_0}, except for the A benchmark.
\end{itemize}
\end{minipage}
\end{table*}

补充:

  1. 值得学习的地方:① 把table环境和tabular环境分开,分到两个文件方便层次化的管理,避免一个文件内内容太杂。②可以在表格末尾插入minipage, 放一些想要添加的描述说明;表格标题放在tabular的上面。 ③ 通过增加额外的空白列实现一定的分隔效果。④ 使用\makecell{}命令,当单元格内容较长时在该环境里可以实现更轻松的直接换行,不需要外部重新计算multirowmulticolumn拆分为多少个。

E.g. 3

https://blog.csdn.net/qq_34823530/article/details/112504329 Latex复杂三线图的处理

Table4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
% multirow,multicolumn 使用
% \cline{2-6} % 这样使用cline能画一条横线在2-6 排之间
\begin{table*}
\centering
\resizebox{1.0\textwidth}{!}{
\begin{tabular}{ccccccc} % 控制表格的格式,7列
\toprule
\multirow{2}{*}{\textbf{Model}} &\multirow{2}{*}{\textbf{Skipped}} & \multirow{2}{*}{\textbf{Dilated}} & \multirow{2}{*}{\textbf{Attention}}&\multirow{2}{*}{\textbf{Fine-Tune}} &
\multicolumn{2}{c}{\textbf{Accuracy}}
\\&&&&&5-way 1-shot & 5-way 5-shot \\
\midrule
\textbf{Relation Net }& \checkmark & & & & 0.8449 &0.8325 \\
\textbf{Relation Net} & \checkmark & & & \checkmark & 0.8950&0.8488 \\
\textbf{Relation Net} & \checkmark & \checkmark & & &0.8624&0.8450 \\
\textbf{Relation Net} & \checkmark & \checkmark & & \checkmark & 0.8866&0.8647 \\
\textbf{Relation Net} & \checkmark & & \checkmark & & 0.8532&0.8599 \\
\textbf{Relation Net} & \checkmark & & \checkmark & \checkmark & 0.9268&0.8925 \\
\cline{1-7} %画一条横线
% \hline
\textbf{Our model} & \checkmark & \checkmark & \checkmark & & 0.8990&0.8537 \\
\textbf{Our model} & \checkmark & \checkmark & \checkmark & \checkmark& \textbf{0.9486}&\textbf{0.9039} \\
\bottomrule
\end{tabular}
}
\label{tbl:table1}
\caption{Comparison of different obfuscations in terms of their transformation capabilities}
\end{table*}

补充:

​ 1.为了好看方便对齐,在源代码基础上增加了\resize{}{}{}控制命令。

  1. \cline{}命令和\hline命令不同之处:

    The command produces a horizontal line extending across the entire table. It can only be issued after a line break \. The command draws a horizontal line from the left side of column n to the right side of column m. It may only be issued after a line break, and several can be issued at once.[1]

  2. 注意图表中使用的对号\checkmark命令需要引用\usepackage{amssymb}宏包。此外对号也有不同的风格[2]

    checkmart
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    \documentclass{article}
    \usepackage{bbding}
    \usepackage{pifont}
    \usepackage{wasysym}
    \usepackage{amssymb}

    \begin{document}

    % amssymb
    \checkmark

    % bbding
    \Checkmark
    \CheckmarkBold

    % pifont
    \ding{51}
    \ding{52}

    % wasysym
    \CheckedBox

    \end{document}

参考资料

  1. https://instruct.math.lsa.umich.edu/support/latex/tables.tex ↩︎
  2. https://tex.stackexchange.com/questions/132783/how-to-write-checkmark-in-latex ↩︎
  3. https://www.cnblogs.com/ybl20000418/p/11478324.html ↩︎
  4. https://zhuanlan.zhihu.com/p/580123090 ↩︎

LaTeX讲解系列(1):如何优雅地插入图表
https://oier99.cn/posts/b2b25956/
作者
Oier99
发布于
2022年12月29日
许可协议