问我的人越来越多,意味着越来越多的人开始尝试LaTeX了,这是一件好事。不过我还是希望大家能够在我的文章下面直接提问,我一定会在一天之内回答的。因为我目前在+1区,和国内有时差,很多人问我问题的时候,我事实上在忙。而且,留言和解答也是给其他人一个参考。

参考文献一直是学术文章特别重要的一个环节。大家不禁要问,为什么要有参考文献呢?甚至不断有学生问我,Report要不要加参考文献?我来谈谈我对参考文献的理解好了。

为什么要有参考文献

我认为参考文献既有其实用价值,又体现学术道德。

在实用价值方面,合理的参考文献首先是用来表明某观点或结论的出处,为读者提供进一步研习的参考,或者为自己的观点提供可靠的论据。这种类型的参考文献在文献综述的时候会非常多的被使用。举个例子,如果你是个新手,从今年的顶级期刊或者会论文里找关于计算机视觉的文章,我敢保证绝对看不懂,基本上从第二句话就开始看不懂了,但是你可以顺着那句话的参考文献往前找其引用的文章,然后在看那篇,然后看不懂再看参考文献列表,这样只要花上一段时间就能找到相对的源头,然后就可以向后理解目前的最新进展了。

在学术道德方面,参考文献可以区别前人的成果和该文章的成果。一篇学术文章,本质上是用来“邀功”的,当然不能把别人的功劳算到自己头上。所以任何不是你自己提出的观点或者方法,都需要给出一个出处,也就是参考文献。

另外要特别提到的一点,几乎在任何时候,都不可以直接复制粘贴别人的话,尤其是整句整段的复制,这绝对是禁忌。

当然还有很多种关于参考文献的说法,无外乎是用处和道德两个方面的阐述。所以,学术文章必须要参考文献的。

回到Lab Report上来,那些电路知识是你自己提出的吗?肯定不是,从哪里来的呢?学术文章、课本、老师的ppt、网络资料、维基百科等等。当然网络资料和各种百科不推荐放在参考文献里,因为各种百科都是任何人可以随意编辑修改的,并不是真正可靠的信息。那为什么学术文章是可靠的参考文献来源呢?

这就要讲讲学术圈是怎么回事了(后面两段是故事,没时间可以跳过)。学术圈里最重要的一个事情就是论文发表,而到底怎么样才能发表一篇论文呢?都是谁来评审的呢?是不是有一些权威来评审这些投稿的论文呢?其实并不是的,学术圈的评审规则是同行评审(Peer review),一篇投稿的文章,会被期刊主编或者会议的主席按照细分领域分发给相应的副主编,然后有副主编来找若干名(一般3到5人)合适的审稿人,然后发给审稿人,审稿人要在规定的时间内给出符合规定的审稿意见(双规^-^),审稿意见一般包含是否同意接收以及相应的评语。是否同意接收也不是接收或者拒绝,而是中间也有好几类。然后副主编根据审稿人的审稿意见来下结论,对于期刊论文来说,一般除了彻底拒绝之外,都有机会根据审稿意见进行修改,再提交的。会议论文有时候有机会再次提交,有时候是一锤子买卖。审稿过程也有双盲审稿和单盲审稿,双盲就是投稿人不知道审稿人是谁,审稿人也看不到投稿人名字;单盲审稿的话,审稿人是知道投稿人的名字的。总之,投稿人一定不能知道审稿人名字,否则就可以各种腐败了(事实上这个圈子搞的很熟了,是比较容易审稿人中有熟人的,不过即便有熟人,学术圈毕竟也不太做特别离谱的事情,很差的文章必然不会被轻易放水)。所以,一经发表过的论文,尤其是好的期刊和会议上的论文,可以认为是可靠的参考文献来源的。

那任何判定一个期刊或者会议是不是好的呢?对于期刊来说,有SCI影响因子可以判定,一般在一个学科领域内,影响因子高的会比影响因子低的要好一些。SCI影响因子的重要判定依据就是引文数量,如果一个期刊中的论文被引用的次数很多,那说明受到同行的认可。所以,影响因子高的期刊的副主编为了维护期刊的声誉,比如要把控审稿的质量,胡来的成本还是相当高的。对于会议论文来说,在不同的圈子里都会流传着各种言论,基本上在哪个圈子自然就会知道哪些学术会议比较好。一般会议名称比较短,领域专一,区域覆盖范围大的会比较好,当然也有例外的。另外一个影响因素是录用率,录用率低的必然会好一些。学术圈里还有很多故事可以讲,之后有时间我再来说道说道。

参考文献的两种形式

对于英文学术写作,翻译成汉语叫参考文献的有两种,一种是Reference,一种是Bibliography。我的理解是Bibliography的范围要比Reference大一些,Reference一般就是指的引文,你在文中已经提过了,引文可以提供证据、提供更详尽的解释以及规避学术道德风险。而在Bibliography中,可以在文中不着重提到而添加参考文献,意思是这个文献对你的文章有启发,或者带有很基础的作用,你加进来也是为了给读者更全面的信息。

一般的文章都是用的Reference,在毕业论文中,因为涉及面会很广,所以会用Bibliography。其实也没有必要特别区分这两种引文的区别。

参考文献的各种格式

随便打开一篇正规的学术文章来看,都会发现参考文献的格式是很规范的,但不同的期刊或者会议之间要求的可能是不同的。常用的参考文献格式有:

IEEE格式

IEEE的全称是电气电子工程师学会,已经成为电子信息领域统治地位的组织了。旗下所有的期刊和会议论文的引文格式均使用其自己的格式。特点是在文中用[N]来编号,在文中末尾处将所有引文按照引用的顺序排列,引文的格式遵照其规定的格式(点击查看IEEE引文规范指导)。在EEE系,使用IEEE肯定是最正确的了。不过大家并不需要记住怎么排列标题作者这些信息,Bibtex帮我们来解决。IEEE的具体形式是这样的:

This is a sentence [1].

[1] X.-C. Yin, X. Yin, K. Huang and H.-W. Hao, “Robust text detection in natural scene images,” IEEE transactions on pattern analysis and machine intelligence, vol. 36, no. 5, pp. 970-983, 2014.

APA格式

APA是美国心理学会的简称。其特点是参考文献列表使用姓氏字母顺序排列。具体要求也很复杂(点击参考,最好别看)。其具体的形式是这样的:

This is a sentence (Yin, Yin, Huang, & Hao, 2014)

Yin, X.-C., Yin, X., Huang, K., & Hao, H.-W. (2014). Robust text detection in     natural scene images. IEEE transactions on pattern analysis and machine intelligence, 36(5), pp. 970-983.

Chicago格式

这种格式在北美比较常用。文献列表也是用姓氏排列的。但是在文中,作者的名字很短,不占篇幅。其他和APA很接近。

This is a sentence (Yin, et al. 2014).

Yin, Xu-Cheng, Xuwang Yin, Kaizhu Huang, and Hong-Wei Hao. 2014. “Robust text detection in natural scene images.” IEEE transactions on pattern analysis and machine intelligence, 970-983.

GB/T 7714-2015 中国标准

这是中文论文中的要求规范,由于我们今天主要说英文的文献规范,中文的就不给例子了。

Harvard格式

Harvard格式和Chicago格式其实比较接近,只是引文列表不缩进。列表也是按照姓氏排列的。

This is a sentence (Yin, et al., 2014).

Yin, X.-C., Yin, X., Huang, K. & Hao, H.-W., 2014. Robust text detection in natural scene images. IEEE transactions on pattern analysis and machine intelligence, 36(5), pp. 970-983.

MLA

MLA中,不在正文中出现年份,而是使用所有作者的姓氏。而且引文格式也比较简洁。

This is a sentence (Yin, Yin and Huang).

Yin, Xu-Cheng, et al. “Robust text detection in natural scene images.” IEEE transactions on pattern analysis and machine intelligence 2014: 970-983.

LaTeX中的参考文献管理与插入

干货来了!管理和插入参考文献,对于Word来讲绝对是噩梦的二次方,尤其是在不是用Endnote的情况下。即便用了Endnote,也是噩梦,并且Endnote是收费软件,价格非常贵。而在LaTeX里,简直就是特别轻松的事情。这一点很好理解,想想前面我们讲过的交叉引用,就知道有点像编程的LaTeX是多擅长这方面了。

首先确认使用的是我最新提供的完全版的模板,没有的请在github上同步,注意,原来的轻量级版本是没有Reference功能的,是刚刚更新的。Github地址为:https://github.com/feimax/latex_template_for_xjtlu_eee_light,和https://github.com/feimax/latex_template_for_xjtlu_eee

有请Bibtex隆重登场,听这个名字就挺LaTeX的,而且专门管参考文献的。Bibtex是个可以将一种统一的数据格式类型的参考文献按照要求变成各种格式的工具。这种统一的格式类似于下面这样:

@article{yin2014robust,
title={Robust text detection in natural scene images},
author={Yin, Xu-Cheng and Yin, Xuwang and Huang, Kaizhu and Hao, Hong-Wei},
journal={IEEE transactions on pattern analysis and machine intelligence},
volume={36},
number={5},
pages={970--983},
year={2014},
publisher={IEEE}
}

在这段代码中,所有的重要信息都已经定义好了,而用还是不用,以什么格式用,全部有Bibtex来生成。这就方便太多了。

而这种数据格式如果让我们自己输入,是不是也挺烦的,虽然会比Word方便一下。好在Google Scholar或者其他出版社网站(像IEEE)已经将绝大部分的文献都帮我们整理成上面这种格式了。

Google Scholar截图

IEEE网站截图

这两个网站都特别容易找得到。查找到这段bib格式化的文本之后,在模板的根目录里找reference.bib文件,用sublime打开,然后把上面的文本粘贴进去,保存。然后就可以在正文中调用了。在上面这段代码里,大家需要注意的是 “@article{yin2014robust,” 里的 yin2014robust。这个是之后引用引文的名称。在需要引用的时候我们只要输入:

\cite{yin2014robust}

然后编译,就可以生成正确的引文编号,并且后面的参考文献列表也就更新好了。如果是使用的sublime编辑器,并且正确安装了插件,在输入完 \cite{ 的时候就会弹出提示窗口了,非常的方便。如果是要在同一个地方cite两篇文章,就在中间用逗号隔开就行了,sublime也会自动提示,尝试一下就知道了。

最后说一下如果要换其他格式怎么办,注意看report.tex文件的最后几行:

\bibliographystyle{IEEEtran}
\bibliography{reference}
\addcontentsline{toc}{chapter}{Reference}

事实上在网上找一个任何其他格式的.bst 和 .cls 文件,然后放到工程文件夹里,并修改\bibliographystyle{IEEEtran}大括号中的文字为相应的格式的文件名,然后再重新编译就行了。就是这么简单。

今天写了这么多,看似只有最后一点是干货,其实我反而觉得这最后一点是所有网站都这么讲的,而前面是我自己很多想法和观点。希望对大家有些帮助。


确实写点东西不容易,还有很多同学不仔细看老是问我的。请大家继续支持。支付宝帐户是13584435676,比特币钱包是:1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39。新用了微信的赞赏码,这个也是长按就能扫描的,我将最低金额设置为了7.8,也就是一欧元,不多吧。


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

在我很小的时候,我妈妈不知道为什么断定我会喜欢软笔书法,就送我去学了很多年书法,大概从小学一年级一直到初中。其实我那时候更喜欢音乐~学书法的过程中,我确实临摹了不少字体,从大的方面看,有篆书、隶书和楷书,每一种我都能写的有模有样,我的微信头像的那个字就是我自己写的。那时候说不上多喜欢书法,毕竟每次练习都要连续站几个小时。我妈妈的初衷肯定是让我写好硬笔字,可惜的是我直到现在硬笔写的也是很糟糕。直到大学,我发现无论是中文还是英文排版,无论是Word还是PPT,我还是能够弄得有模有样。用什么字体,用多少字号,什么时候加粗,什么时候斜体,我似乎都能很好的掌控。

古罗马角斗场(Colosseo)

古罗马角斗场(Colosseo)

字体(font)是纸质印刷排版、电子出版物排版和各种广告传媒文章排版中最关键的因素没有之一。字体的学问还是很大的,虽然我自幼研习书法,但毕竟没有经过完善理论的学习,在这一讲中,我仅从我这么多年的文字排版的经验(since 1998,那时候还有一些同学没出生吧)来浅谈和闲扯一些字体知识。再者,我最近刚好游历人类文化的瑰宝、千年古城、意大利首都罗马,而西文中最常用的字体,就是Times New Roman了,在罗马城写字体这一讲确实有点意思。

首先,我们今天只说印刷字体。印刷字体就是看起来比较正规,比较不搞笑的字体。像什么娃娃体、手写体、书法字体(宋体不算)之类的,就不是印刷字体,这种字体当然几乎不会被用在纸质媒介和电子媒介中,除非是真的想不开,或者别有用意。

衬线or无衬线

如果想讲清楚什么字体用在什么地方,那必须对字体进行分类。首先我们按照是否带有衬线来进行分类:无论是中文还是西文,字体都可以被分为衬线字体serif和无衬线字体sans-serif。中文典型的衬线字体是宋体,典型的无衬线字体是黑体。而西文中,最常用的衬线字体是Times New Roman和Morden字体,最常用的无衬线字体是Arial,Tahoma,Helvetica等。

大家肯定发现这两种字体的区别了:衬线字体的笔画开始和结束的地方会有修饰性的衬线,笔画的粗细会有变化,尤其是横竖笔画会有较大差异,一般都是横笔画比较细,竖笔画比较粗;而非衬线字体的笔画是光滑的,而且笔画粗细比较一致。

这两种字体的应用场合众说纷纭,有人说衬线字体美观有利于阅读,有人说衬线字体很多多余部分,容易视疲劳。咱们用事实说话,绝大多数的期刊论文和报纸的,无论是中文还是英文,正文都是采用的衬线字体,这足以证明衬线字体是适合印刷品阅读的了。

衬线字体在分辨率高的介质上表现更好,印刷品是典型的高分辨率,一般在600dpi以上,我小时候用的喷墨打印机就已经支持到1200dpi了。而电脑显示器支持到retina级别(也就不到300dpi)才是最近几年的事情,还没有普及。有人可能会抬杠,说手机屏幕的分辨率早就到retina级别了,为什么手机几乎没有使用衬线字,手机上字体的实际尺寸实在是很小,如果用衬线字体,横线实在很细,我在Kindle Whitepaper3 (接近300dpi)用宋体字,字号合适的话效果也是不错的。有一次我用macbook pro做了一个阅读型ppt,用的宋体,自我感觉显示效果是很棒的,放到低分辨率的windows电脑上立刻就逊色特别多。两个原因,一是屏幕分辨率差异,二是即便是在同样分辨率的情况下,MacOS的字体渲染是要比Windows强很多的。

什么是字体渲染呢,目前无论是Windows还是MacOS用的字体文件都是矢量字体,可以无限放大不模糊,矢量图的概念之前我已经在插图那两讲讲过了。但是有一个问题,就是很多时候通过计算得到的点的位置不在屏幕上的整数像素上,如果只是简单的取整,字体显示就会特别垮,尤其在分辨率不高的情况下,如果是简单的加权取灰度,会好一些,但也很垮,这是一门挺深的学问,我也只是略知一二。所以在windows下,为了应对这种情况,就出现了Cleartype技术,通过这项技术可以让字体渲染的更好,但还是比Mac逊色很多。而无衬线字体因为粗细均匀,在低分辨率的情况下,即便有一些像素点无法精确渲染,但也能清晰显示,所以Windows在7之后都直接将系统字体改为无衬线字体,最新的字体是“等线”。Mac系统目前使用的系统字体也是无衬线字体,最新的版本是“苹方”。

为什么操作系统都倾向于用无衬线字体呢?因为系统界面上文字毕竟还是少的。我们看一下文字很多的情况:

从我自己的感觉上来说,衬线字体在文字密集的情况下的可读性是比无衬线字体好的。所以我的结论就是:正规的印刷品正文字体,建议使用衬线字体,标题可以使用无衬线字体,但也可以使用加粗的衬线字体。对于大家的Report和其他文章来说,一般认为是印刷品,虽然PDF也是在电脑上看的,但我自己还是把PDF认为是电子印刷品,所以,除非某些老师对无衬线字体有特殊癖好,否则大胆且自信的使用衬线字体一定没错的。别再都用Tahoma字体了,我个人是真心不喜欢看到Tahoma字体。

这是我在罗马角斗场里拍的一处遗迹,这个很显然是衬线字体。这个角斗场几次兴衰,我无法确定这块文字的年份,不过可以肯定的是,这种字体在欧洲肯定是非常流行的。

说到衬线字体,我们要对比一下Times和Modern系列。Times New Roman是1932年有Monotype公司设计,对传统的衬线字体进行了简化和美化,然后泰晤士报使用了这个字体。我个人也比较喜欢这个字体。而LaTeX的默认西文字体是Modern。从前面那张字体对比图来看,Modern字体更加传统一些,也是很漂亮的字体。我一开始也是常用Modern,后来还是把LaTeX模板改成了Times字体,看起来更加正式一些。

当然,无衬线字体自有它们的用武之地。除了在标题上使用,在PPT和海报中也是很常用的。PPT可以分为演讲型和阅读性两种,演讲型的PPT就是你作为讲者去现场演讲时配合你的讲述而使用的PPT,这种PPT只能有简要的提纲和图片,来辅助听众理解你的讲述,绝对不能放太多文字,以免听众只看不听。对于文字少的情况,那就可以使用无衬线字体了,会让文字看起来更加醒目。另外一种是你讲完,如果要留给大家你的PPT的话,最好是在演讲版本上加入辅助文字,让听过的人,甚至是没听过的人都可以基本理解你的演讲内容,如果文字很多,可以使用衬线字体。至于怎么做PPT咱们之后专门讲。

最后我想说的是,如果你没有太多字体使用经验,可以先按照我说的来做,可以迅速让自己变得专业起来。如果已经很有经验了,就可以很自如的发挥了。

等宽字体or比例字体

另外一种字体的分类是等宽字体和比例字体。我举一个简单的例子就很清楚了,大家看一下i这个字母,是不是很瘦。如果考虑整个句子的平衡和美观,那i的宽度应该是比A要小的,这就是比例字体,每个字母的比例是不同的。但是,对于早期的打字机和计算机来讲,处理这种比例字体是比较困难的,而把每一个字母的宽度设计出一样,会很方便,因此就有了等宽字体。后面计算机技术的发展就很牛叉了,当然不可能处理不了比例字体,但是程序员给等宽字体带来了第二春。写程序,很讲究格式上的对齐和缩进,比如说C语言里的大括号要对齐,大括号内的程序要缩进,而python直接使用缩进来标识作用域。

我们常用的等宽字体是Consolas,在Windows下的Sublime里,默认的就是Consolas字体,同时这也是无衬线字体。另一个常用的等宽字体是Courier New,这是一种衬线字体。另外,所有的汉字都是等宽字体,汉字是方块字,当然是等宽的。他们的效果如下:

如何在LaTeX里如何操作字体

字体设置

字体的设置在LaTeX里还是有点复杂的,我们下一次再讲。我在模板里已经规定好了,正文用Times字体,而且给了添加代码的方式,代码用的是等宽字体。

字体风格

斜体字:\textit{italic},或者 \emph{italic}

粗体字:\textbf{bold font}

细体字:\textlf{light font}

使用等宽字体:\texttt{code}

使用无衬线字体:\textsf{sans-serif}

所以字母大写:\uppercase{CAPITALS}

所有字母大写,但小写字母比较小:\textsc{Small Capitals}

字号(字体尺寸)

首先,在模板中,我们已经规定了对于A4纸张的最佳的字号是11pt了,最好不要乱改这个值。如果在局部需要改,从小到大请使用如下指令:

\tiny

\small

\normalsize

\large

\Large

\LARGE

\huge

\Huge

在需要变化的文字之前加入指令,结束之后用\normalsize让字体回到正常字体。或者用{\small Some Texts}来对若干文字进行修改。这部分之后会和字体修改一样细讲,目前掌握到这里就可以了。

这一讲,我们简单的讲了一下两种字体分类的方法,衬线字体or无衬线字体,等宽字体or比例字体,并且给出了相关的使用场景和案例。然后又在LaTeX里教大家如何运用。

参考:

https://en.wikibooks.org/wiki/LaTeX/Fonts

https://en.wikipedia.org/wiki/Times_New_Roman


旅途辛苦,写文不易。我不也是专业写手,但想把我掌握的一些知识“分享”给大家。打赏越多,必然我会写的更快,质量更好。请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

从访问数据和打赏上看,能跟着我继续走下去的人我估计会越来越少了。不知道是大家已经掌握了LaTeX还是放弃了LaTeX。如果你真的放弃了,我觉得你可能这辈子都不会再学得会LaTeX了,你会越来越忙,越来越没时间学一个好的工具,然后因为没有好的工具,会越来越忙,进入死循环。相信我,可能没有什么比你在大二的时候能学会用LaTeX更重要的了,从现在到你硕士毕业少说有50到80篇的各种文章要写,用LaTeX给你的益处可能真的是无穷的。

从安装LaTeX和Sublime、基本写作框架、图片到公式,我相信一路能一起走过来的同学已经对LaTeX有所了解了,并且已经有人表示再也不想用Word了,这让人很欣慰。我也顺便简要的讲了Matlab的用法,基本上只要想学会的同学,经过练习一定可以学会。不过我要再次声明一下,如果是第一次看到这篇文章的同学,请从第一讲开始看,否则很多内容会非常迷茫。

今天我们主要来说一说表格。表格是学术写作非常常用的表达形式之一,通常用来总结归纳结果或者展示可归类数据,也有一些时候用于将一些同类的内容进行归类展示。当然,用LaTeX是必然可以做出高质量的表格的。

虽然我非常不喜欢Word,但是不可否认的一点是,我非常喜欢Word的表格功能,因为非常直观,尤其是Word相对早期的版本,大概是Office 98(比很多同学年龄都大)的版本,表格线的位置非常好控制,后期的版本知道现在的Word最新版,表格线的控制都是有些难度的。而LaTeX在表格绘制上虽然非常专业,但是很麻烦,尤其是遇到极为复杂的表格的时候,其语句的可读性比较差。

并且由于LaTeX是开源的,不断的有人编写新的Package来处理表格,所以也出现了不同的方法,我们在本文中先来讲述基本的表格使用方法,也就是并不需要新增更多的Package。我会将最传统的方法、一些好用的工具、以及一个非常“缺德”但可能也好用的损招。

LaTeX中正常的表格绘制基本方法

\begin{table}[h]
\label{tab:tab1}
\centering
\caption{ Title Of Table }
\begin{tabular}{ |p{2cm}|p{2cm}|p{3cm}| } % #1
\hline % 绘制横向表格线,在LaTeX中需要自己定义每一行的表格线
cell 11 & cell 12 & cell 13  \\
\hline
cell 21 & cell 22 & cell 23  \\
cell 31 & cell 32 & cell 33  \\
\hline
\end{tabular}
\end{table}

这个表格的绘制结果如下:

语法总是有点枯燥的,但我们还是要解释一下细节。首先,在这里我们使用了两种环境,最外层的是 table 环境,table 环境的作用是对表格添加标题和编号。在 table 环境下,我们定义了 \centering 是表格居中,对应的,如果想让整个表格居左,就用\flushleft,
局右显示就是 \flushright。并且定义了表格的标题,在 \caption 里进行定义。

在 table 环境下,我们需要再使用 tabular 环境来定义表格主体。在上面的代码中的#1位置,第二个大括号里就是定义表格每一列的情况。LaTeX允许定义多种单元格列的形式,通过如下表格列的格式标识符来实现:

p{宽度}: 指定宽度的单元格,支持多行文字自动换行,顶端对齐

m{宽度}: 指定宽度的单元格,支持多行文字自动换行,单元格垂直居中对齐

b{宽度}: 指定宽度的单元格,支持多行文字自动换行,底端对齐

l: 根据内容调整单元格宽度,不支持多行文字自动换行,左对齐

c: 根据内容调整单元格宽度,不支持多行文字自动换行,居中对齐

r: 根据内容调整单元格宽度,不支持多行文字自动换行,右对齐

上面所有的宽度单位建议使用公制的厘米,也就是cm,除非你真的熟悉英制单位。事实上由于我小时候竟然画电路板,所以对英制很了解,但依然不喜欢在日常中用英制。

在各个列之间,如果想需要绘制竖线,则使用 | 将上面的标识符隔开,如果需要双竖线,就使用 || 将标识符隔开。

这里会有一个小问题,如何既然设置了单元格宽度,又让内容居中呢?使用 p{宽度}<{\centering},就可以实现这个功能了。偶尔还是挺有用的。

另外,我们有时候会面临让一列都加粗,这时候可以通过在标识符的左边添加 >{\bfseries}p{3cm} 来实现加粗,而将 bfseries 替换为 itshape 后,则是斜体。粗体的英文是 bold,斜体的英文是 italic,italic 这个词是Italy的派生词,很好记,意大利有比萨斜塔,所以意大利体就是斜体字(一个猜想)。下一讲咱们来说道说道字体,我最近正在罗马,正好咱们用到的最常用的字体就是Times New Roman,而且斜体字又是以意大利这个神奇的国度命名的。我会在罗马写完字体这一讲。

我们再回到上面的例子中,还有几个特殊符号和命令我们没有解释。首先是 \hline,这个就是水平线,LaTeX制表需要指定每一行的水平线;然后是 & 符号,这个是在一行中,区分每一列的;最后是 \\ 符号,在表格中是重新起一行表格,注意别和C++的单行注释弄混了,方向是不一样的.由于在正常的段落中,\\就是换行符,但是在表格中换的是整个表格的一行,而不是单元格里段落的一行了,所以在单元格中,则使用\newline来进行换行。

有时候,我们并不想让所有的水平线覆盖所有的列,这时候可以使用 \cline{i-j}来替换 \hline,i和j分别是起始列和结束列。

初次使用表格,大家总会觉得LaTeX表格的行距特别紧,看起来不是很舒服。
在表格环境之外,定义这句:\renewcommand{\arraystretch}{1.5}
,其中的1.5就是1.5倍行距,根据相应的情况改变就可以了。如果不直接指定列宽,那么LaTeX表格会根据内容进行调整宽度,并在最后留出空隙;在指定列宽的情况下,也会在文章和表格线直接留出空隙。这个空隙也是可以调整的,通过语句:\setlength{\tabcolsep}{6pt}来调整,默认就是6pt,也可以使用cm作为单位。这两条语句都是放在 table 环境里,tabular环境外。

下面给出一个简单的例子,用上上面所有讲过的语法:

\begin{table}[h]
\label{tab:tab1}
\centering
\caption{ Title Of Table }
\renewcommand{\arraystretch}{2}
\setlength{\tabcolsep}{10pt}
\begin{tabular}{ |>{\itshape}c|p{2cm}| >{\bfseries}m{3cm}<{\centering}| }
\hline % 绘制横向表格线,在LaTeX中需要自己定义每一行的表格线
cell 11 & cell 12 & cell 13   \\
\hline
cell 21 & cell 22 & cell 23 \\
\cline{1-2}
cell 31 & cell 32 \newline 456& cell 33  \\
\hline
\end{tabular}
\end{table}

效果是这样的:

通过上面讲述的表格绘制的基本方法,已经可以绘制出相当专业的表格了。不过还要大量的细节功能还没有讲。后面慢慢讲。接下来我要说一些“损招”。

LaTeX表格损招

我前面已经表扬过Office系列在表格处理上确实很好用,并且在图片插入等章节已经讲过如何在Office PowerPoint里作图并且插入到LaTeX中。同样的道理,也可以在PowerPoint利用其可视性和便利性迅速绘制表格,并导出矢量图。这里唯一的问题就是如何让Figure的标识编程Table。于是乎,我想出来了如下损招:

\begin{table}[h]
\label{tab:tab2}
\centering
\caption{ Title Of Table }
\includegraphics[width=10cm]{fig/table.pdf}
\end{table}

原理很简单,就是把figure环境变成table环境就行了。然后在稍微调整一下图片宽度,让字体大小和正文匹配。这样你就可以做出任何复杂的表格了。是不是很绝的一个手段!

效果如下:

真的是爱怎么折腾就可以怎么折腾啊!哈哈哈!我在这里测试的时候并没有把字体改成一样的,请大家注意这一点,改成一样的字体,否则容易被看出来。

今天就写到这里,明天给大家更新在罗马写的字体专题。


罗马消费很高啊,写东西不容易,请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

其实这一篇本来不是单独的一讲,但是考虑到未来很多人会单独来查看各种符合,所以就单独列出来了。

首先大家注意一下该讲的使用方法,后面所有的公式符合,都可以点击,然后复制到剪切板,然后粘贴到你的文章中就可以了。使用起来很方便。

公式常用符号

数学符号

累加积分和类似运算符

\(\sum\)
\sum
\(\prod\)
\prod
\(\coprod\)
\coprod
\(\bigoplus\)
\bigoplus
\(\bigotimes\)
\bigotimes
\(\bigodot\)
\bigodot
\(\bigcup\)
\bigcup
\(\bigcap\)
\bigcap
\(\biguplus\)
\biguplus
\(\bigsqcup\)
\bigsqcup
\(\bigvee\)
\bigvee
\(\bigwedge\)
\bigwedge
\(\int\)
\int
\(\oint\)
\oint
\(\iint\)
\iint
\(\iiint\)
\iiint
\(\iiiint\)
\iiiint
\(\idotsint\)
\idotsint

关系描述符号

\(\leq\)
\leq
\(\ll\)
\ll
\(\subset\)
\subset
\(\subseteq\)
\subseteq
\(\nsubseteq\)
\nsubseteq
\(\sqsubset\)
\sqsubset
\(\sqsubseteq\)
\sqsubseteq
\(\preceq\)
\preceq
\(\geq\)
\geq
\(\gg\)
\gg
\(\supset\)
\supset
\(\supseteq\)
\supseteq
\(\nsupseteq\)
\nsupseteq
\(\sqsupset\)
\sqsupset
\(\sqsupseteq\)
\sqsupseteq
\(\succeq\)
\succeq
\(\doteq\)
\doteq
\(\equiv\)
\equiv
\(\approx\)
\approx
\(\cong\)
\cong
\(\simeq\)
\simeq
\(\sim\)
\sim
\(\propto\)
\propto
\(\neq\)
\neq
\(\parallel\)
\parallel
\(\asymp\)
\asymp
\(\vdash\)
\vdash
\(\in \)
\in
\(\smile\)
\smile
\(\models\)
\models
\(\perp \)
\perp
\(\prec \)
\prec
\(\sphericalangle \)
\sphericalangle
\(\nparallel\)
\nparallel
\(\bowtie\)
\bowtie
\(\dashv\)
\dashv
\(\ni\)
\ni
\(\frown\)
\frown
\(\notin\)
\notin
\(\mid\)
\mid
\(\succ\)
\succ
\(\measuredangle\)
\measuredangle

二级制操作符

\(\pm\)
\pm
\(\mp\)
\mp
\(\times\)
\times
\(\div\)
\div
\(\ast\)
\ast
\(\star\)
\star
\(\dagger\)
\dagger
\(\ddagger\)
\ddagger
\(\cap\)
\cap
\(\cup\)
\cup
\(\uplus\)
\uplus
\(\sqcap\)
\sqcap
\(\sqcup\)
\sqcup
\(\vee\)
\vee
\(\wedge\)
\wedge
\(\cdot\)
\cdot
\(\diamond\)
\diamond
\(\bigtriangleup\)
\bigtriangleup
\(\bigtriangledown\)
\bigtriangledown
\(\triangleleft\)
\triangleleft
\(\triangleright\)
\triangleright
\(\bigcirc\)
\bigcirc
\(\bullet\)
\bullet
\(\wr\)
\wr
\(\oplus\)
\oplus
\(\ominus\)
\ominus
\(\otimes\)
\otimes
\(\oslash\)
\oslash
\(\odot\)
\odot
\(\circ\)
\circ
\(\setminus\)
\setminus
\(\amalg\)
\amalg

逻辑描述符号

\(\exists\)
\exists
\(\nexists\)
\nexists
\(\forall\)
\forall
\(\neg\)
\neg
\(\subset\)
\subset
\(\supset\)
\supset
\(\in\)
\in
\(\notin\)
\notin
\(\ni\)
\ni
\(\land\)
\land
\(\lor\)
\lor
\(\to\)
\to
\(\gets\)
\gets
\(\mapsto\)
\mapsto
\(\implies\)
\implies
\(\implies\)
\implies
\(\leftrightarrow\)
\leftrightarrow
\(\iff\)
\iff
\(\Leftrightarrow\)
\Leftrightarrow
\(\top\)
\top
\(\bot\)
\bot
\(\emptyset\)
\emptyset
\(\varnothing\)
\varnothing

分隔符

\(\mid\)
\mid
\(\|\)
\|
\(\backslash\)
\backslash
\(\{\)
\{
\(\}\)
\}
\(\langle\)
\langle
\(\rangle\)
\rangle
\(\uparrow\)
\uparrow
\(\downarrow\)
\downarrow
\(\Uparrow\)
\Uparrow
\(\Downarrow\)
\Downarrow
\(\lceil\)
\lceil
\(\rceil\)
\rceil
\(\lfloor\)
\lfloor
\(\rfloor\)
\rfloor

三角函数

\(\sin\)
\sin
\(\cos\)
\cos
\(\tan\)
\tan
\(\cot\)
\cot
\(\arcsin\)
\arcsin
\(\arccos\)
\arccos
\(\arctan\)
\arctan
\(\sinh\)
\sinh
\(\cosh\)
\cosh
\(\tanh\)
\tanh
\(\coth\)
\coth
\(\sec\)
\sec
\(\csc\)
\csc

希腊字母

大写字母

\( A \)
A
\( B \)
B
\( \Gamma \)
\Gamma
\( \Delta \)
\Delta
\( E \)
E
\( Z \)
Z
\( H \)
H
\( \Theta \)
\Theta
\( I \)
I
\( K \)
K
\( \Lambda \)
\Lambda
\( M \)
M
\( N \)
N
\( \Xi \)
\Xi
\( O \)
O
\( \Pi \)
\Pi
\( P \)
P
\( \Sigma \)
\Sigma
\( T \)
T
\( \Upsilon \)
\Upsilon
\( \Phi \)
\Phi
\( X \)
X
\( \Psi \)
\Psi
\( \Omega \)
\Omega

小写字母

\( \alpha \)
\alpha
\( \beta \)
\beta
\( \gamma \)
\gamma
\( \delta \)
\delta
\( \epsilon \)
\epsilon
\( \zeta \)
\zeta
\( \eta \)
\eta
\( \theta \)
\theta
\( \vartheta \)
\vartheta
\( \iota \)
\iota
\( \kappa \)
\kappa
\( \varkappa \)
\varkappa
\( \lambda \)
\lambda
\( \mu \)
\mu
\( \nu \)
\nu
\( \xi \)
\xi
\( o \)
o
\( \pi \)
\pi
\( \sigma \)
\sigma
\( \varsigma \)
\varsigma
\( \tau \)
\tau
\( \upsilon \)
\upsilon
\( \phi \)
\phi
\( \varphi \)
\varphi
\( \chi \)
\chi
\( \psi \)
\psi
\( \omega \)
\omega

其他字符

\(\partial\)
\partial
\(\eth\)
\eth
\(\hbar\)
\hbar
\(\imath\)
\imath
\(\jmath\)
\jmath
\(\ell\)
\ell
\(\Re\)
\Re
\(\Im\)
\Im
\(\wp\)
\wp
\(\nabla\)
\nabla
\(\Box\)
\Box
\(\infty\)
\infty
\(\aleph\)
\aleph
\(\beth\)
\beth
\(\gimel\)
\gimel

重音符号

重音符号在公式中常有不同的含义,有的用来指示向量,有的在文章中定义了具体的操作,常见的重音符号有:

\(a’\)
a’
\(a”\)
a”
\(\hat{a}\)
\hat{a}
\(\bar{a}\)
\bar{a}
\(\grave{a}\)
\grave{a}
\(\acute{a}\)
\acute{a}
\(\dot{a}\)
\dot{a}
\(\ddot{a}\)
\ddot{a}
\(\not{a}\)
\not{a}
\(\mathring{a}\)
\mathring{a}
\(\overrightarrow{AB}\)
\overrightarrow{AB}
\(\overleftarrow{AB}\)
\overleftarrow{AB}
\(\overline{aaa}\)
\overline{aaa}
\(\check{a}\)
\check{a}
\(\breve{a}\)
\breve{a}
\(\vec{a}\)
\vec{a}
\(\dddot{a}\)
\dddot{a}
\(\ddddot{a}\)
\ddddot{a}
\(\widehat{AAA}\)
\widehat{AAA}
\(\widetilde{AAA}\)
\widetilde{AAA}
\(\stackrel\frown{AAA}\)
\stackrel\frown{AAA}
\(\tilde{a}\)
\tilde{a}
\(\underline{a}\)
\underline{a}

矩阵中的省略号

\(\dots\)
\dots
\(\ldots\)
\ldots
\(\cdots\)
\cdots
\(\vdots\)
\vdots
\(\ddots\)
\ddots

参考文献:

https://en.wikibooks.org/wiki/LaTeX/Mathematics 这个网站讲的也非常好,就是太多了,我把有用的拿出来给大家讲讲。

另外感谢MathJax提供了HTML的LaTeX公式插件。

整理这个列表是很麻烦的。请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

很不好意思晚更新了几天。最近事情较多,打赏太少,夜里没有太大的动力写文章。加上目前在airbnb找的地方晚上没有一个可靠的桌子,写文章的难度进一步加大。今天我们继续来说说公式该怎么想。LaTeX来书写公式,总体上还是有一点点难度的,尤其是很复杂的公式。但是考虑到word里写公式也是很麻烦,还经常卡死,所以写公式对于各种编辑器都是很难的事情了。话说回来,用Word写公司的难度随着你的使用并不会降低,但是LaTeX一但你掌握了,就特别快了。另外还是得再说一遍,本教程的大部分的讲解仅适用于我提供的模板。请看到新的文章就去Github上下载我最新上传的模板。在写课程的同时,我也在不断升级模板的。

公式应该是科研和学习中最重要的表达形式之一了,从我们学数学的第一天起,就和公式结下了不解之缘。一个好的公式,不仅要正确,还要看起来形式很美。这里的形式包括公式推导的形式和公式的表现形式。LaTeX作为全世界最流行的学术写作工具,在公式的表现上是一流的,初步掌握之后,就能写出教科书般漂亮的公式了。但是,看完这篇文章,并不能保证大家能够很快就学会怎么写公式。看完还是需要多加练习,即便是我也记不住很多特殊符号的命名。但我看到一个公式一点都不虚,我知道一定能写出来,而且不复杂。大家看完这一讲,如果能够不虚,我觉得就起到效果了。

公式的一般语法

插入语法

在LaTeX中,允许大家在文中插入三种形式的公式,但我们一般只用两种,所以我只讲两种:

1.  在行文中插入公式(inline mode)
其语法是:

质能方程的公式是$E=mc^2$。

显示的效果为:
质能方程的公式是\(E=mc^2\)。

2.  将公式单独显示并编号(displayed mode)
其语法是:

欧拉公式为:
\begin{equation}\label{equ:equation1}
e^{ix}=\cos x+i\sin x
\end{equation}

显示的效果为:
欧拉公式为:
\[
e^{ix}=\cos x+i\sin x
\]

要注意的是,在实际的LaTeX环境下,公式的右侧会有编号,由于我在网页中无法完全模拟LaTeX环境,所以编号显示不出来。

这两种基本语法形式属于TeX语法,事实上LaTeX有自己的语法,但我觉得不如TeX语法简洁,使用中是兼容TeX语法的,所以只要掌握一种就好了。只有TeX和LaTeX的关系,感兴趣的同学请自己搜索。

交叉引用

和图片的交叉引用一样,使用

\ref{equ:xxx}

在行文中引用即可。在任何情况下使用交叉引用都要记得带标签的类别,也就是equ, fig之类的。

语法规则

从上面简单的例子中,可以看出,在公式中,可以使用数字、运算符号等元素,但由于数学中很多特殊的元素是无法直接输入的,所以必须通过命令来表示。和其他的LaTeX命令一样,用来表示数学符号的命令由“\”开始,如果带有参数,会以大括号的形式设置参数。例如:

\symbol{参数1}{参数2}...

除此之外,上下标因为非常常用,就可以通过“^”和“_”符号来进行标识。下一节我们会将常见的公式公式形式展现给大家。

公式的各种形式

数字与符号

在公式输入中,数字和英文字母是直接从键盘输入即可,对于希腊字母和其他,需要通过公式命令才可以输入,请看后文中的希腊字母表(电阻单位欧姆就是大写的Omega)。

运算符中\(+,-,=,<,>,[,],(,),!\)可以直接输入,标准的乘除号本身键盘上也没有,分别为 \times和\div。

上下标

上下标是公式中很常用的表示形式,在LaTeX表现形式很简单。上标使用 “^”,也就是美式键盘的主键区数字键-6上面的符号,下标就是下划线“_”。使用方法如下:

A^{bc}_{de}

效果是:\(A^{bc}_{de}\),这里需要注意的是,如果上标只有一个字符的时候,是可以不加大括号的,不过建议大家不要省略,以免在后面修改公式的时候出错。上下标不仅仅可以是符号,也可以是各种复杂的表达式。

对于一些特殊的运算符,下标的位置可能是在运算符下面的,例如求极限:

\lim_{x \to \infty} \exp(-x) = 0

其显示效果是:
\[\lim_{x \to \infty} \exp(-x) = 0\]

分数

分数的命令是:

\frac{分子}{分母}

分数的命令很好记,就是英文fraction的缩写。分子分母可以是任何形式的表达式,当然也可以是分数的嵌套。例如:

z=\frac{\frac{1}{a}+\frac{1}{b}}{\frac{e}{f}-g}

显示效果为:\[z=\frac{\frac{1}{a}+\frac{1}{b}}{\frac{e}{f}-g}\]

还有另外一种斜着表示的分数,显示效果为\(^a/_b\),适用于inline模式,其语法为:

^a/_b

根号

根号的基本语法有点特殊,可以带有两个参数,但是开方次数是在中括号里的:

\sqrt[n]{m}

举一个一元二次方程求根公式的例子:

x=\frac{-b\pm \sqrt[2]{b^2-4ac}}{2a}

效果是:
\[x=\frac{-b\pm \sqrt[2]{b^2-4ac}}{2a}\]

累加和积分

累加和积分的命令是 \sum 和 \int, 两种符合的上下标分别用 “^” 和 “_” 来定义。例如:

\sum_{n=1}^{10}\frac{1}{n}
\int_{x=1}^{10}\frac{1}{x}\,mathrm{d}x

其效果是:
\[\sum_{n=1}^{10}\frac{1}{n}\]
\[\int_{x=1}^{10}\frac{1}{x}\,\mathrm{d}x\]

在inline模式的时候,累加和积分限制之类的信息会被放在符号右侧以节省空间。

另外还有多种类似于累加的运算符,用法是很类似的,下面将所有的类似运算符都列出:

\(\sum\)
\sum
\(\prod\)
\prod
\(\coprod\)
\coprod
\(\bigoplus\)
\bigoplus
\(\bigotimes\)
\bigotimes
\(\bigodot\)
\bigodot
\(\bigcup\)
\bigcup
\(\bigcap\)
\bigcap
\(\biguplus\)
\biguplus
\(\bigsqcup\)
\bigsqcup
\(\bigvee\)
\bigvee
\(\bigwedge\)
\bigwedge
\(\int\)
\int
\(\oint\)
\oint
\(\iint\)
\iint
\(\iiint\)
\iiint
\(\iiiint\)
\iiiint
\(\idotsint\)
\idotsint

有时候在累加或者二重积分的时候,会在运算符号下面加入不止一行的限制条件:
\[\sum_{\substack{
i>0 \\
j>0
}}
P(i,j)\]
其语法形式是:

\sum_{\substack{
   i>0 \\
   j>0
  }} 
 P(i,j)

各种括号

各种括号的用法为:

( x ),[ x ],\{ x \},| x |,\| x \|,\langle x \rangle,
\lfloor x \rfloor, \lceil x \rceil, \ulcorner x \urcorner

其显示效果为:
\[( x ),[ x ],\{ x \},| x |,\| x \|,\langle x \rangle, \lfloor x \rfloor, \lceil x \rceil, \ulcorner x \urcorner
\]

有时候,括号里会有很高的公式,例如分数,这时候需要把括号也同样变高:

z=\left( \frac{1-x}{1+y^2} \right)

效果为:
\[z=\left( \frac{1-x}{1+y^2} \right)\]

矩阵

矩阵是工程数学中最常用的表达形式,在LaTex中支持几乎所有的矩阵形式,矩阵的最简单形式是:

 \begin{matrix}
  a & b & c \\
  d & e & f \\
  g & h & i
 \end{matrix}

效果是:
\[
\begin{matrix}
a & b & c \\
d & e & f \\
g & h & i
\end{matrix}
\]

在插入矩阵的时候,每一列之间用 & 符号隔开,每一行用 \\ 来换行即可。

但是我们使用矩阵的时候往往是在两边使用括号、中括号、大括号或者竖线来表达不同的含义的,在这里我们并不需要使用上一小节中讲的使用括号的方法插入括号,而是直接修改 \begin{}里的环境名称即可,支持的环境有:

pmatrix: (), 括号

bmatrix: [], 中括号

Bmatrix: {}, 大括号

vmatrix: | |, 竖线

Vmatrix: || ||, 双竖线。

请大家多多尝试这些环境。

有些时候,我们会使用点点点来省略重复或者有规律的项,这时候可以使用类似的语法:

A_{m,n} = 
 \begin{bmatrix}
  a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
  a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
  \vdots  & \vdots  & \ddots & \vdots  \\
  a_{m,1} & a_{m,2} & \cdots & a_{m,n} 
 \end{pmatrix}

\[
A_{m,n} =
\begin{bmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m,1} & a_{m,2} & \cdots & a_{m,n}
\end{bmatrix}
\]

所有的点的表示形式如下:

\(\dots\)
\dots
\(\ldots\)
\ldots
\(\cdots\)
\cdots
\(\vdots\)
\vdots
\(\ddots\)
\ddots

重音符号

重音符号在公式中常有不同的含义,有的用来指示向量,有的在文章中定义了具体的操作,常见的重音符号有:

\(a’\)
a’
\(a”\)
a”
\(\hat{a}\)
\hat{a}
\(\bar{a}\)
\bar{a}
\(\grave{a}\)
\grave{a}
\(\acute{a}\)
\acute{a}
\(\dot{a}\)
\dot{a}
\(\ddot{a}\)
\ddot{a}
\(\not{a}\)
\not{a}
\(\mathring{a}\)
\mathring{a}
\(\overrightarrow{AB}\)
\overrightarrow{AB}
\(\overleftarrow{AB}\)
\overleftarrow{AB}
\(\overline{aaa}\)
\overline{aaa}
\(\check{a}\)
\check{a}
\(\breve{a}\)
\breve{a}
\(\vec{a}\)
\vec{a}
\(\dddot{a}\)
\dddot{a}
\(\ddddot{a}\)
\ddddot{a}
\(\widehat{AAA}\)
\widehat{AAA}
\(\widetilde{AAA}\)
\widetilde{AAA}
\(\stackrel\frown{AAA}\)
\stackrel\frown{AAA}
\(\tilde{a}\)
\tilde{a}
\(\underline{a}\)
\underline{a}

今天这一讲可以满足大家基本的公式书写需求了,请大家不断的尝试,否则还是无法熟练的掌握LaTeX中公式的书写的。这一讲确实有一些枯燥,不要尝试记住所有的命令,只要明白规则,然后知道可以在我这里查到就可以了。下一讲我会将所有常用的符合命令全部列给大家。


参考文献:

https://en.wikibooks.org/wiki/LaTeX/Mathematics 这个网站讲的也非常好,就是太多了,我把有用的拿出来给大家讲讲。

另外感谢MathJax提供了HTML的LaTeX公式插件。

公式这一讲虽然比较枯燥,但是我写起来真是特别麻烦,而且专门去弄了插件来在网页上显示公式。请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

很不好意思晚更新了几天。最近事情较多,打赏太少,夜里没有太大的动力写文章。加上目前在airbnb找的地方晚上没有一个可靠的桌子,写文章的难度进一步加大。今天我们继续来说说公式该怎么想。LaTeX来书写公式,总体上还是有一点点难度的,尤其是很复杂的公式。但是考虑到word里写公式也是很麻烦,还经常卡死,所以写公式对于各种编辑器都是很难的事情了。话说回来,用Word写公司的难度随着你的使用并不会降低,但是LaTeX一但你掌握了,就特别快了。另外还是得再说一遍,本教程的大部分的讲解仅适用于我提供的模板。请看到新的文章就去Github上下载我最新上传的模板。在写课程的同时,我也在不断升级模板的。

公式应该是科研和学习中最重要的表达形式之一了,从我们学数学的第一天起,就和公式结下了不解之缘。一个好的公式,不仅要正确,还要看起来形式很美。这里的形式包括公式推导的形式和公式的表现形式。LaTeX作为全世界最流行的学术写作工具,在公式的表现上是一流的,初步掌握之后,就能写出教科书般漂亮的公式了。但是,看完这篇文章,并不能保证大家能够很快就学会怎么写公式。看完还是需要多加练习,即便是我也记不住很多特殊符号的命名。但我看到一个公式一点都不虚,我知道一定能写出来,而且不复杂。大家看完这一讲,如果能够不虚,我觉得就起到效果了。

公式的一般语法

插入语法

在LaTeX中,允许大家在文中插入三种形式的公式,但我们一般只用两种,所以我只讲两种:

1.  在行文中插入公式(inline mode)
其语法是:

质能方程的公式是$E=mc^2$。

显示的效果为:
质能方程的公式是\(E=mc^2\)。

2.  将公式单独显示并编号(displayed mode)
其语法是:

欧拉公式为:
\begin{equation}\label{equ:equation1}
e^{ix}=\cos x+i\sin x
\end{equation}

显示的效果为:
欧拉公式为:
\[
e^{ix}=\cos x+i\sin x
\]

要注意的是,在实际的LaTeX环境下,公式的右侧会有编号,由于我在网页中无法完全模拟LaTeX环境,所以编号显示不出来。

这两种基本语法形式属于TeX语法,事实上LaTeX有自己的语法,但我觉得不如TeX语法简洁,使用中是兼容TeX语法的,所以只要掌握一种就好了。只有TeX和LaTeX的关系,感兴趣的同学请自己搜索。

交叉引用

和图片的交叉引用一样,使用

\ref{equ:xxx}

在行文中引用即可。在任何情况下使用交叉引用都要记得带标签的类别,也就是equ, fig之类的。

语法规则

从上面简单的例子中,可以看出,在公式中,可以使用数字、运算符号等元素,但由于数学中很多特殊的元素是无法直接输入的,所以必须通过命令来表示。和其他的LaTeX命令一样,用来表示数学符号的命令由“\”开始,如果带有参数,会以大括号的形式设置参数。例如:

\symbol{参数1}{参数2}...

除此之外,上下标因为非常常用,就可以通过“^”和“_”符号来进行标识。下一节我们会将常见的公式公式形式展现给大家。

公式的各种形式

数字与符号

在公式输入中,数字和英文字母是直接从键盘输入即可,对于希腊字母和其他,需要通过公式命令才可以输入,请看后文中的希腊字母表(电阻单位欧姆就是大写的Omega)。

运算符中\(+,-,=,<,>,[,],(,),!\)可以直接输入,标准的乘除号本身键盘上也没有,分别为 \times和\div。

上下标

上下标是公式中很常用的表示形式,在LaTeX表现形式很简单。上标使用 “^”,也就是美式键盘的主键区数字键-6上面的符号,下标就是下划线“_”。使用方法如下:

A^{bc}_{de}

效果是:\(A^{bc}_{de}\),这里需要注意的是,如果上标只有一个字符的时候,是可以不加大括号的,不过建议大家不要省略,以免在后面修改公式的时候出错。上下标不仅仅可以是符号,也可以是各种复杂的表达式。

对于一些特殊的运算符,下标的位置可能是在运算符下面的,例如求极限:

\lim_{x \to \infty} \exp(-x) = 0

其显示效果是:
\[\lim_{x \to \infty} \exp(-x) = 0\]

分数

分数的命令是:

\frac{分子}{分母}

分数的命令很好记,就是英文fraction的缩写。分子分母可以是任何形式的表达式,当然也可以是分数的嵌套。例如:

z=\frac{\frac{1}{a}+\frac{1}{b}}{\frac{e}{f}-g}

显示效果为:\[z=\frac{\frac{1}{a}+\frac{1}{b}}{\frac{e}{f}-g}\]

还有另外一种斜着表示的分数,显示效果为\(^a/_b\),适用于inline模式,其语法为:

^a/_b

根号

根号的基本语法有点特殊,可以带有两个参数,但是开方次数是在中括号里的:

\sqrt[n]{m}

举一个一元二次方程求根公式的例子:

x=\frac{-b\pm \sqrt[2]{b^2-4ac}}{2a}

效果是:
\[x=\frac{-b\pm \sqrt[2]{b^2-4ac}}{2a}\]

累加和积分

累加和积分的命令是 \sum 和 \int, 两种符合的上下标分别用 “^” 和 “_” 来定义。例如:

\sum_{n=1}^{10}\frac{1}{n}
\int_{x=1}^{10}\frac{1}{x}\,mathrm{d}x

其效果是:
\[\sum_{n=1}^{10}\frac{1}{n}\]
\[\int_{x=1}^{10}\frac{1}{x}\,\mathrm{d}x\]

在inline模式的时候,累加和积分限制之类的信息会被放在符号右侧以节省空间。

另外还有多种类似于累加的运算符,用法是很类似的,下面将所有的类似运算符都列出:

\(\sum\)
\sum
\(\prod\)
\prod
\(\coprod\)
\coprod
\(\bigoplus\)
\bigoplus
\(\bigotimes\)
\bigotimes
\(\bigodot\)
\bigodot
\(\bigcup\)
\bigcup
\(\bigcap\)
\bigcap
\(\biguplus\)
\biguplus
\(\bigsqcup\)
\bigsqcup
\(\bigvee\)
\bigvee
\(\bigwedge\)
\bigwedge
\(\int\)
\int
\(\oint\)
\oint
\(\iint\)
\iint
\(\iiint\)
\iiint
\(\iiiint\)
\iiiint
\(\idotsint\)
\idotsint

有时候在累加或者二重积分的时候,会在运算符号下面加入不止一行的限制条件:
\[\sum_{\substack{
i>0 \\
j>0
}}
P(i,j)\]
其语法形式是:

\sum_{\substack{
   i>0 \\
   j>0
  }} 
 P(i,j)

各种括号

各种括号的用法为:

( x ),[ x ],\{ x \},| x |,\| x \|,\langle x \rangle,
\lfloor x \rfloor, \lceil x \rceil, \ulcorner x \urcorner

其显示效果为:
\[( x ),[ x ],\{ x \},| x |,\| x \|,\langle x \rangle, \lfloor x \rfloor, \lceil x \rceil, \ulcorner x \urcorner
\]

有时候,括号里会有很高的公式,例如分数,这时候需要把括号也同样变高:

z=\left( \frac{1-x}{1+y^2} \right)

效果为:
\[z=\left( \frac{1-x}{1+y^2} \right)\]

矩阵

矩阵是工程数学中最常用的表达形式,在LaTex中支持几乎所有的矩阵形式,矩阵的最简单形式是:

 \begin{matrix}
  a & b & c \\
  d & e & f \\
  g & h & i
 \end{matrix}

效果是:
\[
\begin{matrix}
a & b & c \\
d & e & f \\
g & h & i
\end{matrix}
\]

在插入矩阵的时候,每一列之间用 & 符号隔开,每一行用 \\ 来换行即可。

但是我们使用矩阵的时候往往是在两边使用括号、中括号、大括号或者竖线来表达不同的含义的,在这里我们并不需要使用上一小节中讲的使用括号的方法插入括号,而是直接修改 \begin{}里的环境名称即可,支持的环境有:

pmatrix: (), 括号

bmatrix: [], 中括号

Bmatrix: {}, 大括号

vmatrix: | |, 竖线

Vmatrix: || ||, 双竖线。

请大家多多尝试这些环境。

有些时候,我们会使用点点点来省略重复或者有规律的项,这时候可以使用类似的语法:

A_{m,n} = 
 \begin{bmatrix}
  a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
  a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
  \vdots  & \vdots  & \ddots & \vdots  \\
  a_{m,1} & a_{m,2} & \cdots & a_{m,n} 
 \end{pmatrix}

\[
A_{m,n} =
\begin{bmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m,1} & a_{m,2} & \cdots & a_{m,n}
\end{bmatrix}
\]

所有的点的表示形式如下:

\(\dots\)
\dots
\(\ldots\)
\ldots
\(\cdots\)
\cdots
\(\vdots\)
\vdots
\(\ddots\)
\ddots

重音符号

重音符号在公式中常有不同的含义,有的用来指示向量,有的在文章中定义了具体的操作,常见的重音符号有:

\(a’\)
a’
\(a”\)
a”
\(\hat{a}\)
\hat{a}
\(\bar{a}\)
\bar{a}
\(\grave{a}\)
\grave{a}
\(\acute{a}\)
\acute{a}
\(\dot{a}\)
\dot{a}
\(\ddot{a}\)
\ddot{a}
\(\not{a}\)
\not{a}
\(\mathring{a}\)
\mathring{a}
\(\overrightarrow{AB}\)
\overrightarrow{AB}
\(\overleftarrow{AB}\)
\overleftarrow{AB}
\(\overline{aaa}\)
\overline{aaa}
\(\check{a}\)
\check{a}
\(\breve{a}\)
\breve{a}
\(\vec{a}\)
\vec{a}
\(\dddot{a}\)
\dddot{a}
\(\ddddot{a}\)
\ddddot{a}
\(\widehat{AAA}\)
\widehat{AAA}
\(\widetilde{AAA}\)
\widetilde{AAA}
\(\stackrel\frown{AAA}\)
\stackrel\frown{AAA}
\(\tilde{a}\)
\tilde{a}
\(\underline{a}\)
\underline{a}

今天这一讲可以满足大家基本的公式书写需求了,请大家不断的尝试,否则还是无法熟练的掌握LaTeX中公式的书写的。这一讲确实有一些枯燥,不要尝试记住所有的命令,只要明白规则,然后知道可以在我这里查到就可以了。下一讲我会将所有常用的符合命令全部列给大家。


参考文献:

https://en.wikibooks.org/wiki/LaTeX/Mathematics 这个网站讲的也非常好,就是太多了,我把有用的拿出来给大家讲讲。

另外感谢MathJax提供了HTML的LaTeX公式插件。

公式这一讲虽然比较枯燥,但是我写起来真是特别麻烦,而且专门去弄了插件来在网页上显示公式。请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

终于发现了Mac下最爽的办法了

用过CTeX的人一定会被WinEdt编辑器+SumatraPDF浏览器的“无缝连接”印象深刻,在WinEdt里编辑好,编译后,SumatraPDF就会自动更新,在阅读器里双击,就会自动定位到WinEdt里的相应文字的那行,非常方便文章修改,这是一个极好的功能,可惜的是WinEdt实在是很难调整字体和主题,长时间写作非常累。并且,SumatraPDF虽然也是我很喜欢的一款轻量级阅读器,但是只支持Windows系统。

后来我主要还是在Mac电脑上写文章,转战了Sublime,却一直对WinEdt和Sumatra这个无缝连接念念不忘。Mac自带的预览app其实是很优秀的,是可以自动更新修改后的PDF,但需要用鼠标点一下。我之前也一直都忍了。直到最近有同学发信息给我说觉得不能动态更新让新手觉得很难,我一下子又想起来Windows下的无缝连接了。感觉Mac下一定会实现的。

说实话,如果是我自己用根本没动力去探索,而事实上Sublime下的LaTeXTools插件早就给出了解决方案,只是被我忽略了。但是,我也看了很多网上用LaTeX+Sublime的教程,确实也没有提到无缝连接的事情。

言归正传,无缝连接的关键点在于PDF阅读器和编辑器的配合,我们需要一个可以动态刷新并且支持从PDF阅读器调用Sublime的接口来定位到*.tex文件的某一行。我其实并不知道该怎么描述这项功能,在谷歌搜索也没有得到很好的结果。然而在一次无意中执行LaTeXTools的System Check功能时,我突然发现Mac下对应的PDF阅读器应该是“Skim”。就赶忙下载了“Skim”。一试果然对!就因为这功能我真想再多读一年PhD再多写几篇Paper。

下面我们来具体介绍怎么配置。首先,确认自己使用的是苹果电脑并且没有换成Windoes系统。目前我的系统版本是10.13.1。然后,请下载“Skim” PDF阅读器,其官方下载网页是 http://skim-app.sourceforge.net,打开看起来确实是有点山寨,但是不要紧,确实很好用。下载不了的同学请通过我提供的百度云盘下载:http://pan.baidu.com/s/1pKHF28V。安装完请至少运行一次,因为MacOS的安全机制会阻止程序的运行,系统偏好设置的安全性与隐私中运行“Skim”的运行。总体上“Skim”的性能和Mac自带的预览工具很接近了,渲染很流畅,而且比预览工具功能强大。

运行了Skim之后,请点击系统任务栏上的Skim->选项…

Skim选项

选择同步选项卡,勾选“检查文件变化”,将PDF-TeX同步支持选择为Sublime Text。Skim的配置工作就完成了。

下面需要解决Sublime如何在命令行里执行的问题了,Sublime官方给出了解决方案:https://www.sublimetext.com/docs/3/osx_command_line.html。但是实际使用中会发现并没有办法在Terminal里直接输入subl就运行sublime。我实际使用的指令是:

sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

(页面可能不够宽,复制到的地址是 /usr/local/bin/subl)
就可以在Terminal里直接输入 subl 打开Sublime了。

最后一步,去Sublime里,使用 P事儿快捷键 shift+command+p,输入命令 check system,查找到的第一个应该就和LaTeXTools有关,执行之。稍等之后,在弹出的结果的最后一部分如果看到了
Viewer Status Location
------ ------ --------
skim available /Applications/Skim.app

就说明成功了。

下面请自由的编译几个TeX文件试试,看会不会自动打开Skim进行预览,然后在PDF里按住 shift+command 然后鼠标点击相应的文本位置,会自动回到Sublime里的相应位置去。虽然不是100%准,但是段落定位肯定是对的。

这项功能在Windows下的CTeX已经集成了很久了,但是是WinEdt编辑器下才行。用Sublime必然也是可以的。

继续求打赏,我这还在因斯布鲁克浪呢,还在夜里更文章。支付宝13584435676,不给比特币钱包了,也没人给我打比特币。


作者: 程飞, 未经作者允许请勿转载|3,600 次浏览

果然我的更新速度是跟不上大家的需求的。这一讲我们简单的说一下如何用Matlab来绘制曲线图,以及怎么导出PDF图并插入到LaTeX中去。另外,我根据某老师放在ICE上的极简LaTeX模板,结合我的模板,制作了一个轻量级的支持我定义的命令的新模板:去Github上下载。事实上我为这个专栏做了一个专门的页面:LaTeX写作专栏,每一期的内容和资料都会在上面呈现。

曲线图的绘制(Matlab版本)

曲线图是最常用的用来对比效果、展示性能的手段。我们可以使用很多种软件来绘制如下这种曲线图:

但是Matlab是我的最爱,Matlab是一个特别强大的工具,可以拿它来做太多事情了。用来画图绝对是大材小用了。但是大家以后几乎必然会学到Matlab,并且西浦为所有学生都购买了Matlab的正版(如何安装请咨询MITS Office),所以我们干脆直接点就来让大家尝试Matlab了。如果你的电脑没有Matlab,没关系,可以在任何一个EEE的机房来使用,Matlab肯定是必装软件。请大家一定要安装正版使用,安装完成之后,打开Matlab会出现如下画面(可能颜色和我不一样):

Matlab启动后的画面(全屏)

这个界面的最左侧是文件管理器,中间是一个命令窗口,用来直接执行一些命令,或者查看脚本(script)的输出结果等到,右边的Workspace主要是用来显示当前的变量等信息。我们今天不是主讲Matlab,所以细节先不讲,主要是迅速教大家怎么用Matlab绘制二维的曲线图。以后有时间我们慢慢来说Matlab和绘图,包括三维图等等(又挖了一个坑)

第一步,新建一个script文件,可以命名为 draw.m:

新建脚本

然后双击打开draw.m文件,你会得到一个空白的编辑窗口:

编辑窗口

下面用几十行代码让大家速成一下Matlab:

% 一个最简单的Matlab教程
% 百分号开始的是注释, 两个百分号是分段

%% 基本语法

% 无论是在script里还是在命令窗里,都可以执行所有的matlab命令和函数
% 不需要include之类的东西

% clear 是清除所有保存的变量和数据
% Matlab 事实上是个lab,你可以在里面不停的实验,程序执行完,数据都在的,
% 你可以不停的尝试
clear;

% clc 是清屏
clc


% 赋值语句就是等于号,和C语言一样
% 后面加分号的意思是结果不输出到命令窗
a = 1;
b = 2

% Matlab 直接支持矩阵型变量,事实上Matlab就是 Matrix Lab的缩写
% []里就是矩阵,可以直接表达1维和2维,更高维度特殊一些,以后再说
m = [1 2 3 4 5];
n = [1 2 3 4 5 
     6 7 8 9 10];

% 这俩矩阵直接能做乘法,是不是比C不知道高到哪里去了
mul = m * n'
% 单引号的意思是矩阵转置,要不那俩矩阵不能相乘,希望你们线性代数学了,不学也没关系

% 如果两个矩阵尺寸完全一致,需要做点乘,就用 .* 就行了,除法,指数(^)一样的道理

% 访问矩阵里某个数值像下面这样就可以了,注意,Matlab里的index从1开始,这个和C不一样
n(1,3)

% 快速生成矩阵的一些办法
% 下面这种方法是生成等间隔的1维矩阵,从0开始,间隔0.1,生成都0.9,一共十个数
t = 0:0.1:0.9;

% 生成一个2行3列全是0的矩阵
z = zeros(2,3);

% 生成一个2行3列全是1的矩阵
o = ones(2,3);

%% 选择结构

if a == b
    c = 1;
elseif b == 2
    c = 2;
else
    c= 3;
end

c

% 选择结构和C的套路完全一样,只是语法变得更简单了,Matlab里不是用大括号来分作用域
% 而是使用end来表示一段作用域的结束

%% 循环结构

% i从1循环到100,中间间隔为1,也可以根据上面的方法改间隔
for i = 1:100
    
end

% 最基本的语法已经讲完了

%% 绘图

% 假设数据是这个,时间轴是 之前定义的 t
data1 = [1 2 1 3 4 6 7 9 11 10];
data2 = [3 4 1 5 7 1 4 8 12 9];
% 二维曲线的绘图命令是 plot
plot(t, data1, 'r+-', 'linewidth',2);
hold on;
plot(t, data2, 'b*-.', 'linewidth',2);
% 第一个参数是 x轴, 第二个参数是 y 轴,
% ’r+-' 代表 红色 节点为+号形状 实线
% 'b*-.' 代表 蓝色 节点为*号形状 点画线
% ’linewidth‘ 显而易见是粗细
% hold on 意思是画下一个曲线是上一个保留

% 还有更多设置请使用help命令来求助
help plot

% 我们再加上x和y轴的文字描述以及标题
xlabel('time')
ylabel('distance')
title('Movement')

% 打开网格,看起来更舒服
grid on;

% 再对两条线进行描述
legend('Machine 1','Machine 2','Location','NorthWest');

% 是不是已经出现了像模像样的图了?

执行这段代码,会出现下面的场面:

执行结果

这个图看起来已经有点意思了,不过还是需要调整的:

选择 File -> Export Setup

输出的设置

设置完毕之后点击 Apply to Figures,然后点击Export,输出PDF格式到我们LaTeX项目的fig文件夹下。然后用pdfcrop来裁减掉白边。就可以插入到LaTeX中了。

在这一讲中,恭喜大家又学会了一个新工具——Matlab,虽然只是速成。请大家记住Matlab的学习方法:遇到任何想法,去google搜出相应的Matlab命令函数,然后在Matlab的command window里 help 这个命令,用官方的解释和例子来学习。你会进步的很快。Matlab还有很多很多东西可以讲,但不是在这里讲。

这次是日更,请大家多多支持,扫码支持或者通过支付宝13584435676。比特币钱包是1NBzPagXqFHrwzxT4haGnX7S9FuwTkvX39.


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

 

通过之前的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,521 次浏览

在前面的四讲中,我们已经讲过如何安装正确的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,247 次浏览