救救你的REPORT(6)— LaTeX插图之进阶

通过之前的5讲,我所知道的至少有三四十人都开始尝试LaTeX来写报告了。这非常好,也让我的努力没有白费。不过还是有一些话想说的,之前看李笑来老撕在得到的专栏中,反复强调要只字不提的阅读。我的写作质量当然比不过李老撕了,但还是希望大家能够稍微不那么浮躁,如果是第一次看到我的教程的同学,请访问:LaTeX写作专栏 从头尽量仔细阅读。我在做完这整个教程之后也会根据大家的反馈进行重新编辑和调整,让质量变得更好。鉴于XJTLU的同学在ICE已经发现了某位老师传了一个很简单的模板,我想说的是,如果使用我的模板的话,一定要从github上整个下载所有的文件的压缩包,才能实现文中我描述的效果。会用git的同学每次套用模板就直接clone就好了。我之后也会针对git写一个教程的。

LaTeX插图进阶讲解

通过上一讲,我相信大家已经知道了如何在LaTeX中插图,以及如何对图片、章节等进行交叉引用了。在插图方面,通过我设计的简化命令可以特别舒服的插图,我博士硕士期间写了5年的文章几乎都是用那个方式插图的。来进行简单的复习:

\figpdf{hahaha}{result1}{12cm} % 对应的, fig文件夹下要有 result1.pdf
\figpng{hahaha}{result2}{12cm} % 对应的, fig文件夹下要有 result2.png
\figany{hahaha}{result3}{jpg}{12cm} % 对应的, fig文件夹下要有 result3.jpg

在同学们实际使用的过程中,常会有几个误解容易造成错误:

  • 并没有使用我的模板而直接使用这几个命令
  • 文件名的大小写问题,以及交叉引用的标签名的大小写,如果在Mac和Linux,文件名大小写错误已经不能识别文件了,而Windows文件名忽略大小写,请大家任何时候都要注意这个问题
  • 文件名里不要有空格,这个在任何时候都是好习惯。空格有_下划线代替

这种插图方式是最普遍使用的,但还是有一些其他形式的图:多幅子图片的情况,也就是一幅图里包括2幅以上的图片,他们分别用(a)(b)(c)…来标识,然后给他们一个统一的标题;在双栏文档中,存在一些大图需要横跨两栏的情况,当然我给出的模板是单栏的,一般的Report和Thesis常用单栏,在学术期刊和会议发表中,常用双栏,双栏比较省纸张。

多幅子图片的插入

在写文章时很常用的一个描述方式是把若干幅格式和尺寸相同的图片按照阵列排列在一起,用于对比性能、体现差异等功能。在单栏文档中,一般一般推荐水平图片个数不要超过3幅,否则会让图片尺寸过小,影响阅读体验。所以我在这里只来讲一下如何插入 2 x 2 。通常插入的图片效果如下:

一个2×2字图片阵列的例子

通常我使用两种方法来实现这种效果,一个是比较正统的使用LaTeX的命令的方法, 另一个是投机取巧的办法。通过上一讲的最后部分,我们知道了正常的LaTeX图片的插入方式,我们在那个基础上使用新的指令进行扩展:

\begin{figure}[htp] %htp用来表示图片的位置
  \centering
  \subfigure[Description 1]{
    \label{fig:subfig:a} % 第1幅图的的标签
    % 第1幅图片的尺寸和地址
    \includegraphics[width=6cm]{fig/sub1.pdf}}
  \hspace{0.5cm} % 图片的水平间隔
  \subfigure[Description 2]{
    \label{fig:subfig:b} % 第2幅图的的标签
    % 第2幅图片的尺寸和地址
    \includegraphics[width=6cm]{fig/sub2.pdf}}
  \\ % 强制换行
  \vspace{0.5cm} % 图片的垂直间隔
  \subfigure[Description 3]{
    \label{fig:subfig:c} % 第3幅图的的标签
    \includegraphics[width=6cm]{fig/sub3.pdf}}
  \hspace{0.5cm} % 图片的水平间隔
  \subfigure[Description 4]{
    \label{fig:subfig:d} % 第4幅图的的标签
    \includegraphics[width=6cm]{fig/sub4.pdf}}
  % 整个图片阵列的标题
  \caption{Four sub firgures located in a $2\times 2$ array}
  \label{fig:subfig} %% 整个图片阵列的表情
\end{figure}

这段代码使用的新命令是 \subfigure,目前没有必要深究里面的细节,先能用会用再说。你可以在网上搜到很多种这种图片阵列的插入方式,会有各种复杂的方式,用各种不同的指令,不推荐大家现在去学,那不是重点。这种常用的方式基本上就够大家目前使用了。值得指出的是,在使用图片阵列的时候,可以用两种方式描述字图片:一种是在\subfigure指令的[]中直接写描述,这样会在图片下方出现 “(a) Description 1”这种风格的描述,但是这样不适合很长的描述;另一种就是在字图片的描述中留空白,然后在整个图片的标题中挨个描述,这样可以用足够的文字来描述了。其实我觉得这种插入方式还是很复杂的,因为我自己还不太会用sublime开发插件,等我学会了我会开发出绝对简单好用的插件的,如果有同学知道好用的插件也请告诉我,分享给大家。

下面说说第二种投机取巧的办法:在作图的时候直接把N张图做到一个图片里去。这个方法也是我常用的一种办法,尤其是在图片并不是矢量图的时候,使用一些简单的工具就能搞定了。

跨双栏的图片

在双栏的学术文章中,经常会用到,其实这个语法也特别简单:

\begin{figure*}
%中间该是什么还是什么
\end{figure*}

学术文章的插图绘制

画图绝对是一个技巧和脑洞并存的技术,首先我们得知道用什么工具来绘图,我常用的有:PowerPoint (没错,就是做幻灯片的那个),Matlab (没错,就是用来做科学计算的那个),Excel,Visio (是不是专业点了),Photoshop,Adobe Illustrator (AI, 可能是最专业的矢量图绘制软件),AutoCAD。不可能每一个都讲,我只讲一下PPT和Matlab绘图,其他的软件有的我也不精通,就像AI,我只会简单的用用。

PPT绘图大法

其实吧,不怕说出来显得low,我90%以上的图都是PowerPoint画出来的,就像下面这张,这张图是矢量图,如果在PDF文档中看就可以放大不失真了。我还有很多图集,等我的博士论文通过了我会分享给大家看,里面有不少我认为画的不错的图。

用PPT画出来的图

适合用PPT绘制的图有如下类型:

  • 系统框图
  • 不是特别复杂的流程图
  • 像素图和矢量图结合的图
  • 其他可以用简单几何图形构建的图

PPT绘图的主要优点有:

  • 软件简单易用
  • 图形的自动对齐功能比较完善,这一点特别重要
  • 绘图功能里包含了几乎所有简单几何图形
  • 带有一些简单有趣的适量插图
  • 可以直接导出已经嵌入过字体的矢量图PDF (字体的事儿咱们改天再唠,我感觉我挖了好多坑了,得慢慢填,我从小练习书法,对字体也算有点研究)

由于实在不容易一步一步的截图,我只能用语言描述一些基本的技巧了,希望大家能够看懂,看不明白的话尽量在文章后面留言,当然发微信给我也可以,但是别人就看不到了,留言我回复的话别人可以看到。为了能够更好的看懂,我希望大家具备基本的PPT技能,比如说调字体、字号、颜色、对齐,调图形框的边框颜色、充填颜色、边框粗细等。

进行绘图的第一步,就是新建一个空白模板的pptx文档,然后只需要一个页面就可以了,页面尺寸不需要调整。然后就可以尽情的作画了。

有一些基本的小技巧想和大家分享:

  • 改变图形尺寸,使用四角的点进行拖动时,安住shift键可以保持比例,这个基本上是Office和很多软件的惯例
  • 改变尺寸时,安住option (Mac)/ alt (WIndows, 好久不用win了,如果错了请大家指出),可以让图以中心对齐的方式进行缩放,这一点在做流程图的时候非常有用
  • 拖动图形或者图片的时候,安住shift可以保证在只在一个维度上运动
  • 拖动图片的时候按control (Mac) / ctrl (Win),可以复制图片
  • 灵活而熟练的同时使用上面两个技巧,可以迅速的画出很多同样的元素,并且很容易对齐,就像我上面给大家看的那个图

首先说一下系统框图,两个比较简单,一般就只用到方形,将系统中的功能模块分别用方形描述出来,然后用直线或者箭头连上就可以,直线一般表示无方向性的连接关系,箭头表示一种方向性的关系。想把框图画好,首先内容要合理的抽象,并不是一定要把所有的东西都写上去,而是根据框图的级别进行合理抽象。然后是各个方块直接一定要摆放合理,尽量的对齐,这样才能比较美观容易阅读。在颜色方面,由于要考虑到多种介质阅读(纸、电脑屏幕、视网膜级屏幕、电纸书屏幕等),不宜使用过多的颜色,黑色的对比度最好,所以优先选择黑色边框和白色或者透明填充,边框的粗细不宜过细,一般在1pt到2pt之间,要根据当时的感觉来选择。使用带箭头的线时,要注意箭头的尺寸不要太小。总之,功能清晰+视觉效果好=优秀的框图。

在流程图里,用到的会多一些的元素,注意有方形、菱形、两头是圆形的方形等等。其实也不是很复杂,基本的程序流程图中,方形代表一般过程,例如函数什么的,菱形代表选择,两头是圆形的方形代表程序开始或者结束。还有很多其他规则,参见 FlowChart

矢量图和像素图结合的情况也是很常见的,直接把jpg或者png图片拖入PowerPoint软件,适当的裁剪和修改尺寸,然后配上图形元素,就可以了。

能不能做出好看的图,关键在于有没有耐心和想象力,一开始肯定会很慢,画的多了就快了。绘图真的很重要,在工作中也是一样的,能用简洁明了的图把事情讲清楚是非常重要的工作能力。

在图绘制完成之后,将pptx文档导出成pdf格式,mac和windows上的方法差不多,大家多多尝试肯定没问题的。这个时候,可能会有一个问题,就是图片四周有很多白边,这些白边插到文中会非常影响阅读体验。LaTeX的各个发行版基本上都带了一个工具,叫 pdfcrop,可以专门用来去除白边。在Mac下打开Terminal,在Windows下打开cmd(不会的同学请看第二讲),输入 pdfcrop 验证一下是不是有这个程序,如果显示的不是以任何语言描述的“不存在此程序”之类的话,说明你的发行版里带了这个工具。使用方法很简单,不过需要一些简单的命令行知识:

在Mac下,我们目前需要了解这么几个Terminal的命令 cd, cd.. , ls。cd用来进入一个文件夹,其实就是change director的缩写,cd.. 是退会上一级文件夹,.. 的意思在任何系统中都是指的上一级文件夹,ls是列出当前文件夹里的所有文件夹和文件。首先你需要知道你的pdf文件保存在哪里了,然后用这几个命令找到位置,执行:pdfcrop 文件名.pdf,回车。然后会在当前文件夹下看到一个被加上crop后缀的pdf文件,打开之后,发现已经没有白边了。在Win下,情况类似,cd 和 cd.. 是类似的,标准的cmd没有ls命令,但是win10的powershell有ls命令,在cmd中,用dir命令来显示文件夹里的文件和文件夹。Linux用户,相信我不需要讲。

通过裁剪过的pdf矢量图,就可以按照这两讲的办法插入到文中去了。下一次的内容,我们会快速讲一下Matlab的绘图,Matlab是非常适合数据绘图的,当然Excel也很好,也有很多其他软件。并且教大家一些对付示波器图像的技巧。我很早之前也讲过两期示波器和信号源的使用,这里我讲了如何保持示波器图片,这是一种办法,视频地址是:http://v.youku.com/v_show/id_XMTM4MjA0MjExMg

我每一期尽量保证写到5000字左右,想把教程写好是挺不容易的。请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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