救救你的REPORT(5)— LaTeX中图的插入

在前面的四讲中,我们已经讲过如何安装正确的LaTeX发行版,以及如何安装Sublime编辑器。值得高兴的是,已经有不少同学有了使用LaTeX的意识,开始尝试用LaTeX来写Report了。我的更新速度显然跟不上同学们的需求,很抱歉。有一些同学进行了自己的探索,这很好。但是LaTeX事实上是一个坑很多的工具,这主要是其灵活性和开放性造成的。所以我一开始就想让大家要跟着我的方法来做。网上绝大部分的LaTeX的教程都很难做到通用,然后他们又不声明发行版和编译器种类,就会让大家很疑惑,甚至怀疑LaTeX到底行不行。LaTeX已经收到几乎全球的科研者和专业人士使用,肯定是没问题的。今天主要来讲学术写作中的一些规则,以及图的插入和绘制。我感觉写这部分的挑战还是很大的,希望学术同行大佬们指正。

学术写作的一些规则

在第(4)讲中,我们简单的讲了一下最普通的学术文章的结构。大家要明白,那只是一种通常情况。一篇好的学术文章,归根究底还是要阐述出研究人员的理论和结论的。

但是,学术写作的规则还是有很多的,网上能搜到特别繁多,看完基本上就懵(A+C)/2了。我也算是个合格的researcher,也发表过不少学术论文,我能记住的应该都比较重要而且实用了。

首先要说一个最基本规则,就是行文的顺序。对于单列文章(一页纸只有一栏)来说,行文的顺序是从上到下。对于双列文章(一页纸只有两栏)来说,行文的顺序是从上到下,然后从左栏到右栏。有人说这不是废话嘛。但是注意,这里我用的是“行文”,也就是说这个顺序其实是严格针对文字的,但不是严格针对图片和表格的。在文字排版中,图片和表格可以认为是“固体”,而文字是“液体”,所以,为了版面的美观和高效利用,图片往往会根据实际情况进行浮动。举个例子,一篇文章有Para1, Para2 和 Para3三段,有一张图片要插在 Para1 后面,但是如果在实际的页面中刚好在Para1后面的空间不够插入那张图,那么图片可能会被插在Para3后面。大家放心,事实上LaTeX都会自动处理好这些事情,我写了这么多只是为了让大家理解这并不是LaTeX的Bug。

正是因为图片和表格某种程度上是浮动的,所以才引出了下面的图片插入规则:图片必须给出标题,通常标题放在图片下面,并冠以编号。通常用Fig. X来编号;而表格也要给出标题,通常放在表格上方,并冠以 Table X的编号。编号按照图片的插入顺序递增。并且,在文字中的适当位置要提到插入的图片的编号(Fig. X),并根据需要给出解释或者描述。我研究生时英语课上讲,文字早于图片的出现,不过大量的学术论文,即便是顶级期刊或者会议的文章,也没有严格遵照这一点。其实只要准确的描述了图片编号,又,图片是顺序编号的,读者可以很容易找到图片了。上面说了这么多,其实大家完全不用担心,因为LaTeX会自动处理编号。

问题又来了,在文中我们怎么插入Fig.X呢?难道对于Fig.1就真的输入 Fig.1么?Word用的稍微好点的人都不会这么做的,何况是LaTeX了。这个功能叫交叉引用:对于文中的编号项,如果在文中其他位置被提及,可以通过插入一种标识符的方式,让这个编号可以自动生成和变化。不再受到添加或删除一个项目的影响。Word的方式网上教程很多,其缺点就是步骤繁琐,弄不好就崩了。LaTeX可以通过简单的指令很容易的做到。这一讲的后半部分会着重讲命令,别(第四声)着急。并且,在LaTeX中,可以对chapter,section, subsection, subsubsection, figure, table, equation, code block 等等进行交叉引用。

另一种特殊的引用就是对其他人成果的引用——参考文献 (Reference 参考文献 或者 Bibliography 参考书目)。Reference 一般是指的你直接引用了别人的成果,为了不被算作抄袭,需要加入参考文献来标明出处。而Bibliography除了Reference的功能外,还指的一些书目或者文章,你并没有引用,但是可以给读者一些基础知识、启发或者灵感。不过实际中我觉得没有本质上的区别。参考文献绝对是Word的痛点,即便用EndNote也会非常麻烦。但在LaTeX里处理起来简直太简单了。

今天讲的规则我并没有严格的梳理,后面随着大家的反馈我会进一步的梳理,后面也会不断的补充,最终给出更加严谨的版本。

下面我们进入语法命令部分。

交叉引用

为了引用,必须给被引用项加入标签。加入标签的方式是:在需要被引用的位置插入

\label{ccc:lll}

其中,ccc是类别,lll一般是个缩写或者别名。类别就是用以区分是章节还是图片的,别名就是在同一个类别下区分不同的引用项的。举个例子来说,对于章节来说:

\chapter{Introduction}\label{cpt:intro}

\section{Background}\label{sec:bg}

在需要被引用的地方,我们通过

\ref{ccc:lll}

来进行引用。要注意的是,

\ref{ccc:lll}

并不会帮我们加上Chapter字样,只会加入数字。这些需要我们自己来写。我给出的模板里,所有的章节都加入了标签。请大家仔细看一下,并且修改和尝试。
对于图片和表格,用法也是几乎一样的。但我们还没讲到这里,而且我提供了更加简便的方式,所以不在这里讲了。

LaTeX中的图(Figure)

在开始后面的步骤之前,提醒大家: 1. 跟着我的方法走,包括安装LaTeX和使用Sublime等;2. 我讲的内容只适用于我提供的模板;3. 我没办法为不follow我的人提供解答。我做这些就是为了让大家不要踩我踩过的坑,有人非要踩的话,对个人来说是很好的经历。但我没办法每个人都帮一下,我们也不是为了成为LaTeX的专家。Follow我的人,无论有没有打赏,我都会尽力帮助,大家一起改进这一套方法,才会节约大家的时间。

LaTeX常用的图像格式有:pdf, eps, jpg, png。其实其他也支持一些,但是这四个足够用了。图像格式分成两种:矢量图和像素图。矢量图就是无论你怎么放大,都不会模糊的图,但一般只能用来描述图线、方块、圆形这样的简单图形。而像素图片就是通过描述每一个像素点的色彩来构建图像,自然可以丰富多彩,但是放大很多倍之后就没有足够的细节了,看起来就会模糊。至于是为什么,我以后会写科普来讲述。pdf和eps本质上是混合式,也就是同时支持矢量图和像素图;而jpg和png是像素图。

一般地,在需要描述图线、形状、流程、框图等情况时,我们一定要使用pdf或者eps格式;对于混合型的图,也要用pdf或者eps格式;只有纯照片才会用到jpg和png图片。其中,我更推荐大家使用pdf格式,甚至完全不要去尝试eps。用pdf格式是更主流也更方便的方式。之后会慢慢教大家怎么画出好的图。下面来讲图片插入的语法,我会分为两个层次来讲,首先会讲我自己创造的新的简化版图片插入命令,更简单好用;然后会把这个指令的完全版本拆开给大家看是怎么回事儿,在一些特殊情况还是需要用完全版本。

简化版命令

使用前提:所有图片放在 fig 文件夹下。不可以用文件名重名,也就是说不同格式的图片也不可以重名。由于在这一讲的时候,对命令进行了改进,所以请大家务必从github上更新最新的xjtlu.sty文件,如果不会更新就下载下来覆盖掉原来的xjtlu.sty即可。github地址:https://github.com/feimax/latex_template_for_xjtlu_eee

我设计了3个简化版的图片插入命令:

\figpdf{图片标题}{图片文件名}{宽度} %专门用于插入pdf格式的图片

\figpng{图片标题}{图片文件名}{宽度} %专门用于插入png格式的图片

\figany{图片标题}{图片文件名}{图片扩展名}{宽度} %用于插入任何支持格式的图片

前两个指令是更简化的命令,用于专门插入pdf或者png图片。有三个参数,第一个是图片标题,没什么好说的;第二个参数是图片文件名,是不带有扩展的,也就是说 result.pdf 这个文件,只需要写 result就可以了;第三个参数是宽度,因为绝对不推荐修改图片比例,所以只需要规定图片宽度,高度会自动修改,注意,宽度要带单位,一般用cm。对于第三个命令来说,适用于任何支持格式,第三个参数是扩展名,如果是 result.jpg 的话,就要写jpg在里面。分别举例:

\figpdf{hahaha}{result1}{12cm} % 对应的, fig文件夹下要有 result1.pdf

\figpng{hahaha}{result2}{12cm} % 对应的, fig文件夹下要有 result2.png

\figany{hahaha}{result3}{jpg}{12cm} % 对应的, fig文件夹下要有 result3.jpg

插入图片后,重要的就是如何交叉引用。对图片的交叉引用,我依然设计了一个新的命令:
\fig{图片文件名}

在我设计的图像相关的命令中,图片文件名就作为上一节中的交叉引用的别用使用。

用具体的例子来说明:

Cras eu dui quis dolor scelerisque eleifend sit amet a nibh. Suspendisse porttitor sit amet nunc sit amet hendrerit. Fusce tempus purus metus, rhoncus dictum nisl pretium vitae. Suspendisse sodales nunc velit, ac malesuada diam commodo sed. Sed maximus vel risus quis laoreet. Ut ullamcorper ante non faucibus imperdiet. Cras tristique nec ligula id egestas. Duis ut elit id lorem sodales viverra eu ut leo in \Fig{hey}.

\figpdf{Fusce tempus purus metus}{hey}{12cm}

如果不去深入思考,到这里其实已经可以很方便而优雅的插入图片和交叉引用图片了。但是勤于思考的同学肯定不会罢休的。下面我来剖析一下这些命令的细节。

简化版命令的真实面目

我们来看一下LaTeX自带的图片插入命令是什么样的:

\begin{figure}[htp]
\centering
\includegraphics[width=12]{fig/result1.pdf}
\caption{Title}
\label{fig:rst1}
\end{figure}
}

这是一段特别长的命令:[htp]是图片位置浮动的规定,以后再讲;\centering是图片居中,正常情况下我们都要居中图像的;\includegraphics是用来设定图像地址和宽度的;\caption是设置图像标题的;\lable我们之前讲过了,设定标签的。

这么长一段命令我是肯定不会去记住的,所以我使用LaTeX的一个可以创造新命令的命令来新建了一个新的命令,很类似于C语言里的函数。

\newcommand{\figpdf}[3]{
\begin{figure}[htp]
\centering
\includegraphics[width={#3}]{fig/#2.pdf}
\caption{{#1}}
\label{fig:#2}
\end{figure}
}

创造新命令的语法不解释了,大概都能看得懂,看不懂也别纠结,我之后会慢慢解释。再来看一下\Fig这个命令:

\newcommand{\Fig}[1]{
Fig. \ref{fig:#1}
}

其实就是很懒省事的把一些每次都重复的部分给省掉了。

这一讲先到这里。在该讲中,我先是介绍了学术写作中的一些不完全规则,然后介绍了在我的模板体系下,该如何方便优雅的插入图片,并且给大家分析了为什么可以那么插图片。请大家一定注意从github上重新下载xjtlu.sty文件,覆盖你的report工程里老文件,然后就能使用最新的命令了。

写教程真不是一件容易的事情,请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


作者:程飞。未经作者允许请勿转载其他网站,可以转载朋友圈。4,650 次浏览

6 评论

  1. 飞哥,我用的mac os,在用轻量级的模版的时候,build的时候出了,Package inputenc Error: Unicode character, (U+FF0C) [\code{c++}{c_test 这个错误,问一下这个怎么解决啊?

发表评论