LaTeX完成Scientific Papers的一些说明

  • A+
所属分类:LaTeX基础
摘要这一篇会介绍关于LaTeX来完成论文写作的一些小的技巧, 和一些小的方法。

简介

这一部分会介绍一下关于LaTeX来完成论文写作的一些方式。之前介绍过LaTeX的一些基本的使用方式,这里主要是介绍使用他来完成科学类文章的写作。主要参考资料是GitHub上一个仓库里的内容,链接会放在下面。

更多资料

主要参考链接 : Tips and Tricks for Writing Scientific Papers

LaTeX的更多详细说明 : LaTeX指南信息

表格的绘制

在说绘制表格之前, 简单说明几个问题

  • hline表示横线
  • toprule: 表示三线表的表头的横线(这个与后面两个三线表的都需要使用booktabs
  • midrule: 表示三线表中间的横线
  • bottomrule: 表示三线表最后的横线

我们可以使用booktabs绘制出很漂亮的表格,下面看一个简单的例子。这个例子演示一下三线表的绘制, 这种表格在写paper的时候会经常被使用到.

  1. \documentclass{article}
  2. \usepackage{booktabs}
  3. \begin{document}
  4. % --
  5. \begin{table}
  6.     \centering
  7.     \begin{tabular}{lcccc}
  8.         \toprule
  9.         & \multicolumn{4}{c}{Data} \\ \cmidrule(lr){2-5}
  10.         DoS Types & Correct &  Wrong & Total & Accuracy \\
  11.         \midrule
  12.         back & 0 & 359 & 359 & 0.00\% \\
  13.         land & 7 & 0 & 7 & 100.00\% \\
  14.         neptune & 4616 & 41 & 4657 & 99.12\% \\
  15.         pod & 36 & 5 & 41 & 87.80\% \\
  16.         smurf & 652 & 13 & 665 & 98.05\% \\
  17.         teardrop & 12 & 0 & 12 & 100\% \\
  18.         mailbomb & 0 & 293 & 293 & 0.00\% \\
  19.         apache2 & 72 & 665 & 737 & 9.77\% \\
  20.         processtable & 135 & 550 & 685 & 19.71\% \\
  21.         udpstorm & 0 & 2 & 2 & 0.00\% \\
  22.         \bottomrule
  23.     \end{tabular}
  24.     \caption{The Model1 for DoS Attack}
  25.     \label{tab-label}
  26. \end{table}
  27. \end{document}

简单做一下说明, 上面的我们需要修改的是{lcccc}这里后面四个c表示后面(也就是Data部分)的数据居中表示, multicolumn{4}表示的是Data有4列.

最终绘制的表格如下所示:

LaTeX完成Scientific Papers的一些说明

表格行合并

上面的表格我们讲了一下如何进行多列合并的操作, 下面我们来看一下如何进行多行的合并. 多行的合并使用multirow来完成相应的操作.

LaTeX完成Scientific Papers的一些说明

下面是对应的代码. 在使用之前, 我们需要引入相应的package

  1. \usepackage{multirow}

接着就是对于表格的绘制, 简单的说明一下, 我们会把\multirow写在我们合并的起始行, 然后后面括号跟合并的行数, 后面的行空着就行.

  1. \begin{table}
  2.     \centering
  3.     \begin{tabular}{ccc}
  4.     \toprule
  5.     \multicolumn{2}{c}{Predict label} & \multirow{2}{*}{Example} \\ \cmidrule(r){1-2}
  6.     traditional model & our model & \\
  7.     \midrule
  8.     5 & 6 & aaaaaaaa \\
  9.     8 & 9 & bbbbbbbb \\
  10.     11 & 12 & ccccccc \\
  11.     \bottomrule
  12.     \end{tabular}
  13. \end{table}

参考资料: Combine and reduce rows in a table

多行多列合并的表格

下面看一个稍微复杂一些的表格. 里面同时有多行合并, 也有多列合并, 同时包含多行和多列的合并. 下面的内容来自这个链接: latex的table总结. 我们直接来看代码.

  1. \begin{table}
  2.     \centering
  3.     \begin{tabular}{|c|c|c|c|c|}
  4.         \hline
  5.         \multirow{2}{*}{Multi-Row} & % 合并多行
  6.         \multicolumn{2}{c|}{Multi-Column} & % 合并多列
  7.         \multicolumn{2}{c|}{\multirow{2}{*}{Multi-Row and Col}} \\ % 同时合并多行和多列
  8.         \cline{2-3} % 绘制2-3格的横线
  9.         & column-1 & column-2 & \multicolumn{2}{c|}{} \\ % 这里的multicolumn为了画右侧的边框线
  10.         \hline % 画一条横线
  11.         label-1 & label-2 & label-3 & label-4 & label-5 \\
  12.         \hline % 画一条横线
  13.     \end{tabular}
  14. \end{table}

简单介绍一下上面表格中的参数. 主要注意一下下面hline和cline的使用.

  1. \multirow{2}{*}{Multi-Row}, \multirow是跨列功能,第一个参数2,表示跨两列,第二个参数*,表示系统自动调整文字,最后一个参数即是要填入的文字,跨列需注意的是,使用\multirow指令的那一列表格,到了要撰写下一列表格时,被跨列直接留空,不可填字(填了之后就会知道为什么了)
  2. \multicolumn{2}{c|}{Multi-Column}, \multicolumn是跨行功能,第一个参数2,表示跨两行,第二个参数c|,表示文字置中,并在栏位右边画一条直线框,最后一个参数即是要填入的文字
  3. \hline, 表示画出一整条从左至右横线
  4. \cline{2-3}, 表示画出一条在第2栏位到第3栏位的横线段,其他栏位将不会有横线段

下面是最终绘制出来的表格的结果.

LaTeX完成Scientific Papers的一些说明

表格中某个元素居中

有的时候, 我们可能会有下面的需求, 我们表格中的某一列是左对齐的, 但是我们希望其中的header部分是居中的, 这个时候我们可以使用multicolumn来进行操作. 下面是一个简单的例子.

  1. % 没有居中的形式
  2. \begin{table}
  3.     \centering
  4.     \begin{tabular}{lccc}
  5.         \toprule
  6.         \multirow{2}{*}{Model} & \multicolumn{3}{c}{Data} \\ \cmidrule(lr){2-4}
  7.         & Training Set &  Test Set &  Accuracy \\
  8.         \midrule
  9.         SVM & 300 & 200 & 84.00\% \\
  10.         C4.5 & 300 & 200 & 77.52\% \\
  11.         \bottomrule
  12.     \end{tabular}
  13.     \caption{The Comparision of Modeling Results}
  14.     \label{tab-label-1}
  15. \end{table}
  16. % 居中的形式
  17. \begin{table}
  18.     \centering
  19.     \begin{tabular}{lccc}
  20.         \toprule
  21.         \multicolumn{1}{c}{\multirow{2}{*}{Model}} & \multicolumn{3}{c}{Data} \\ \cmidrule(lr){2-4} % 注意看这一行的第一个是怎么写的
  22.         & Training Set &  Test Set &  Accuracy \\
  23.         \midrule
  24.         SVM & 300 & 200 & 84.00\% \\
  25.         C4.5 & 300 & 200 & 77.52\% \\
  26.         \bottomrule
  27.     \end{tabular}
  28.     \caption{The Comparision of Modeling Results}
  29.     \label{tab-label-1}
  30. \end{table}

下面是有居中和没有居中的例子(代码里我省略了几行的内容, 不影响最后要说明的问题), 和两者的对比.

LaTeX完成Scientific Papers的一些说明

 

表格的自动换行

有的时候, 我们需要表格中的内容可以自动换行, 这里需要注意的是, Only the p - type can have a width argument. 关于自动换行的参考资料见: How to create a table with fixed column widths

我们看一个简单的例子:

  1. \begin{table}[htbp!]
  2.     % 我提取的特征与其他人提取的特征
  3.     \centering
  4.     \begin{tabular}{|p{2cm}|p{5cm}p{2cm}p{2cm}|}
  5.         \toprule
  6.         Attack Types & Important Features in cite &  Numbers of Important Features in cite & The Same Important Feature \\
  7.         \midrule
  8.         DoS & 3, 4, 5, 6, 8, 23, 29, 36, 38, 39, 40 & 11 & 9 \\
  9.         Probe & 2, 3, 4, 5, 6, 12, 29, 32, 33, 34, 35, 36, 37, 40 & 14 & 11 \\
  10.         R2L & 1, 2, 3, 5, 6, 10, 12, 14, 16, 24, 32, 33, 35, 36, 37, 38, 39, 41 & 18 & 9 \\
  11.         U2R & 3, 5, 6, 10, 14, 17, 32, 33 & 8 & 6 \\
  12.         \bottomrule
  13.     \end{tabular}
  14.     \caption{Performances of The Model}
  15.     \label{tab5-ModelExplain-1}
  16. \end{table}

最终的效果如下图所示:

LaTeX完成Scientific Papers的一些说明

长表格自动换页

有的时候, 我们会遇到表格过长, 一页装不下的问题, 这个时候就需要使用长表格的自动换页. 同时, 我们在自动换页的时候, 希望表头和表尾的横线可以在每一页都出现, 下面就看一个小例子, 可以实现上面的功能, 即长表格的自动换页和表头的自动重复. 代码如下:

  1. \documentclass{article}
  2. \usepackage{longtable}
  3. \begin{document}
  4. \begin{longtable}{|c|c|r|r|r|r|}
  5. \caption{caption}
  6. \label{table:label} \\ % add \\ command to tell LaTeX to start a new line
  7. % Appear table header at the first page as well
  8. \hline
  9. line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)\\
  10. \hline
  11. \endfirsthead
  12. % Appear the table header at the top of every page
  13. \hline
  14. line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)\\
  15. \hline
  16. \endhead
  17. % Appear \hline at the bottom of every page
  18. \hline
  19. \endfoot
  20. % data begins here
  21. 10 & 2 & 0:22:00 & 9:46:00 & 2:00:00 & 80.49 \\
  22. 204 & 205 & 2:01:00 & 2:57:00 & 1:11:00 & 47.97 \\
  23. % 这里复制粘贴更多的数据, 使其可以超出一页的范围
  24. \hline
  25. \end{longtable}
  26. \end{document}

效果如下图所示, 虽然有些不清楚, 不过总之是可以实现分页的.

LaTeX完成Scientific Papers的一些说明

表格种内容的对齐

参考资料: How can I left-justify a paragraph cell in a table?

我们需要使用array的宏包

  1. \usepackage{array}

接着可以使用raggedright, raggedleft, centering来完成左对齐, 右对齐和居中. 我们可以看一下下面的这个例子.

  1. \begin{table}
  2.      \begin{center}
  3.      \label{pntable}
  4.      \begin{tabular}{|p{2cm}<{\raggedright}|>{\centering}p{6.5cm}|p{3cm}<{\raggedleft}|}
  5.      \hline
  6.      \textbf{Integer} & \textbf{Partitions} & \textbf{Number of partitions} \\ \hline
  7.      1 & 1 & 1 \\ \hline
  8.      2 & 2, 1+1 & 2 \\ \hline
  9.      3 & 3, 2+1, 1+1+1 & 3 \\ \hline
  10.      \end{tabular}
  11.      \end{center}
  12.      \caption{All the partitions of $n \in \{1,\ldots,3\}$}
  13. \end{table}

最终的结果如下图所示:

LaTeX完成Scientific Papers的一些说明

绘制cmidrule长度为1

我们有的时候, 绘制三线表的时候, 需要上面cmidrule的宽度是一, 但是直接写\cmidrule(lr){1}是不行的, 我们需要写成\cmidrule(lr){1-1}. 下面我们看一个例子.

  1. % 三线表cmidrule长度为1
  2. \begin{table}
  3.     \caption{Test}
  4.     \label{tab4-Summary-1}
  5.     \setlength{\tabcolsep}{3pt}
  6.     \centering
  7.     \begin{tabular}{lllllll}
  8.     \toprule % 表格顶部的线
  9.         \textbf{AAA} & \multicolumn{5}{c}{\textbf{BBB}} & \textbf{CCC} \\ \cmidrule(lr){1-1}\cmidrule(lr){2-6}\cmidrule(lr){7-7}
  10.         \centering
  11.         No. 1-3 & No. 1-14 & No. 15-28 & No. 29-42 & No. 43-56 & No. 57-70 & No. 1-11 \\
  12.         \midrule % 划线
  13.         1 & 2 & 3 & 4 & 5 & 6 & 7 \\
  14.         1 & 2 & 3 & 4 & 5 & 6 & 7 \\
  15.         1 & 2 & 3 & 4 & 5 & 6 & 7 \\
  16.         1 & 2 & 3 & 4 & 5 & 6 & 7 \\
  17.         1 & 2 & 3 & 4 & 5 & 6 & 7 \\
  18.     \bottomrule % 表格底部的线
  19.     \end{tabular}
  20. \end{table}

最终的效果如下所示:

LaTeX完成Scientific Papers的一些说明

参考资料\cmidrule one column wide

 

表格中内容加上item

我们可以在表格中的内容加上类似于item的效果. 首先我们需要在最开始加上下面的内容.

  1. % 设置表格参数
  2. \newcommand{\tabitem}{~~\llap{\textbullet}~~}
  3. \usepackage{booktabs}

下面我们来看一个完整的例子.

  1. \documentclass{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage{graphicx}
  4. \usepackage{ctex}
  5. \usepackage{geometry} % 设置页边距
  6. \geometry{a4paper,scale=0.8}
  7. % 设置表格参数
  8. \newcommand{\tabitem}{~~\llap{\textbullet}~~}
  9. \usepackage{booktabs}
  10. % 开始绘制表格
  11. \begin{document}
  12. \begin{table}
  13.     \caption{Test}
  14.     \label{tab4-Summary-1}
  15.     \setlength{\tabcolsep}{3pt}
  16.     \centering
  17.     \begin{tabular}{lllllll}
  18.     \toprule % 表格顶部的线
  19.         \textbf{AAA} & \multicolumn{5}{c}{\textbf{BBB}} & \textbf{CCC} \\ \cmidrule(lr){1-1}\cmidrule(lr){2-6}\cmidrule(lr){7-7}
  20.         \centering
  21.         No. 1-3 & No. 1-14 & No. 15-28 & No. 29-42 & No. 43-56 & No. 57-70 & No. 1-11 \\
  22.         \midrule % 划线
  23.         \tabitem 1 & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \tabitem 6 \\
  24.         \tabitem 2 & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \tabitem 6 \\
  25.         \tabitem 3 & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \tabitem 6 \\
  26.                    & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \tabitem 6 \\
  27.                    & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \tabitem 6 \\
  28.                    & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \\
  29.                    & \tabitem 1 & \tabitem 2 & \tabitem 3 & \tabitem 4 & \tabitem 5 & \\
  30.     \bottomrule % 表格底部的线
  31.     \end{tabular}
  32. \end{table}
  33. \end{document}

最终的效果如下所示:

LaTeX完成Scientific Papers的一些说明

参考资料: How to use itemize in Table environment

 

引用subfigure

在书写的时候, 我们经常会出现使用子图的情况, 那么在引用的时候, 我们应该如何来进行书写呢, 下面就看一下一个简单的例子作为演示.

  1. \documentclass{article}
  2. \usepackage{subfigure}
  3. \usepackage{graphicx}
  4. \usepackage{caption,setspace}
  5. \begin{document}
  6. \begin{figure*}[htbp!]
  7.     \centering
  8.     \subfigure[Explanation for DoS]{
  9.         \includegraphics[width=4.16in]{DoSAttack.png} % 二分类模型的解释, DoS攻击的数据
  10.         \label{fig5-Binary-1:1}
  11.     }
  12.     \quad    %用 \quad 来换行
  13.     \subfigure[Explanation for Normal]{
  14.         \includegraphics[width=4.16in]{Normal.png} % 二分类模型的解释, Normal数据
  15.         \label{fig5-Binary-1:2}
  16.     }
  17.     \caption{Specific Data Explanation}
  18.     \label{fig5-Binary-1}
  19. \end{figure*}
  20. Fig.~\ref{fig5-Binary-1}
  21. Fig.~\ref{fig5-Binary-1:1}
  22. Fig.~\ref{fig5-Binary-1:2}
  23. \end{document}

最终的效果如下图所示, 我们可以对子图进行引用.

LaTeX完成Scientific Papers的一些说明

公式的书写

关于公式的书写,首先建议使用工具mathpix完成latex代码生成,工具链接将图像(数学公式)转换为LaTeX–Mathpix,进行粘贴即可。

注意公式书写需要package,amsmath. 下面看一个例子. 使用latex生成公式的时候是自动带上标号的,这个很是方便。

  1. \documentclass{article}
  2. \usepackage{amsmath}
  3. \begin{equation}
  4.     F \text { -Score }=\frac{2 * \text { Recall } * \text { Precision }}{\text { Recall }+\text { Precision }}
  5. \end{equation}

最终效果如下所示:

LaTeX完成Scientific Papers的一些说明

一些常用的数学公式

这里介绍一些常用的latex的数学公式, 可以方便查找和进行使用. 可以参考链接: 常用数学符号的 LaTeX 表示方法

分式

  1. \frac{N}{M}
LaTeX完成Scientific Papers的一些说明

连加

  1. \sum_{i \in (1,100)}^{100}
LaTeX完成Scientific Papers的一些说明

上划线与下划线

其中\qquad表示空格

  1. \overline{\phi_{i}(f, x)} \qquad \underline{\phi_{i}(f, x)}
LaTeX完成Scientific Papers的一些说明

m行n列图片插入(子图插入)

这一篇介绍一下关于LaTeX中子图的插入, 即我们希望插入n行m列的图片。主要参考链接如下: LaTeX中m行n列图片排版方法

我们使用subfigure包来完成排版。下面看一个简单的例子。下面会产生一个2*2的图片。

  1. \usepackage{subfigure}
  2. \begin{figure}[htbp!]
  3.     \centering
  4.     \subfigure[dst\_host\_serror\_rate Distribution]{
  5.         \includegraphics[width=2in]{dataDistribution1.png}
  6.     }
  7.     \subfigure[srv\_serror\_rate Distribution]{
  8.     \includegraphics[width=2in]{dataDistribution2.png}
  9.     }
  10.     \quad    %用 \quad 来换行
  11.     \subfigure[wrong\_fragment Distribution]{
  12.         \includegraphics[width=2in]{dataDistribution3.png}
  13.     }
  14.     \subfigure[wrong\_fragment Distribution]{
  15.         \includegraphics[width=2in]{dataDistribution3.png}
  16.     }
  17.     \caption{The disturbition of Data}
  18.     \label{fig5-Distribution-1}
  19. \end{figure}

最终的效果如下所示:

LaTeX完成Scientific Papers的一些说明

交叉引用

这里介绍关于LaTeX中交叉引用的实现. 主要参考链接(这一份参考资料很不错): 在 LaTeX 中使用交叉引用.

这里会包含引用章节, 引用图标, 引用数学公式等.

引用章节

下面简单说明一下引用章节的内容, 我们需要在section后面加上label, 来使得可以被引用.

  1. \documentclass{article}
  2. \usepackage[utf8]{inputenc}
  3. \usepackage{ctex} % 对于中文的显示
  4. \usepackage{booktabs}
  5. \begin{document}
  6. % 引用章节
  7. \section{123}
  8. \subsection{abc} \label{abc}
  9. \subsection{def}
  10. 这里引用subsection\{abc\}的内容, \ref{abc}.
  11. \end{document}

我们看一下最终的效果.

LaTeX完成Scientific Papers的一些说明

论文的引用

关于论文的引用, 在LaTeX指南信息中也做了简单的介绍, 在这里再做以下详细的说明.

我们需要将参考文献写在ref.bib文件中, 同时上面的bibliographystyle是可以有不同的选项的.

  1. % 参考文献
  2. \bibliographystyle{unsrt}
  3. \bibliography{ref} % 存文字的名字

下面简单介绍一下bibliographystyle的一些选项和不同的作用.

  • plain,按字母的顺序排列,比较次序为作者、年度和标题
  • unsrt,样式同plain,只是按照引用的先后排序
  • alpha,用作者名首字母+年份后两位作标号,以字母顺序排序
  • abbrv,类似plain,将月份全拼改为缩写,更显紧凑:
  • ieeetr,国际电气电子工程师协会期刊样式:
  • acm,美国计算机学会期刊样式:
  • siam,美国工业和应用数学学会期刊样式:
  • apalike,美国心理学学会期刊样式:

也就是我们要想使用按照引用的出现顺序进行标号, 我们就要使用unsrt的格式.

引用多处文献

参考资料: latex中同一处引用多篇文献

正常情况我们编译以后的正文引用处显示的是[1][2][3], 但是我们希望文献显示为[1,2,3], 可以使用下面的方法进行实现.

  1. \usepackage{cite}
  2. \cite{bibtex1,bibtex2,bibtex3}

引用公式

这里我们来说一下公式的引用, 其实原理都是差不多的, 只需要定义一下label即可. 我们可以简单来看一下例子.

  1. \begin{equation} \label{part3_eq2}
  2.     x^{\prime}
  3. \end{equation}
  4. % 上面定义了Label, 下面就可以引用
  5. This is \ref{part3_eq2}.

最终的结果如下图所示:

LaTeX完成Scientific Papers的一些说明

LaTeX手动换行

参考资料1: Allow line break, but without inserting a dash

参考资料2: Underscore makes text go past end of line into margins

我们使用\allowbreak或是\linebreak来进行分行, 同时使用这个时不会有连字符. 下面简单看两个例子.

  1. long\allowbreak word
  2. long\linebreak word

同时, 在latex中, 若出现了_的时候, 就不能自动换行. 我们可以使用下面的方式进行换行.

  1. \renewcommand\_{\textunderscore\allowbreak} % 使得_可以换行

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: